1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sourceforge.addam.ddlgen;
20
21 import com.mockrunner.jdbc.JDBCTestCaseAdapter;
22 import com.mockrunner.mock.jdbc.MockConnection;
23 import com.mockrunner.mock.jdbc.MockDatabaseMetaData;
24 import com.mockrunner.mock.jdbc.MockResultSet;
25
26 import net.sourceforge.addam.ddlgen.GenerateTask;
27 import net.sourceforge.addam.ddlgen.GeneratorSpec;
28 import net.sourceforge.addam.ddlgen.Table;
29
30 import org.apache.tools.ant.BuildException;
31 import org.apache.tools.ant.Project;
32 import org.apache.tools.ant.types.Path;
33
34 import java.io.File;
35 import java.sql.Connection;
36 import java.sql.DatabaseMetaData;
37 import java.sql.ResultSet;
38 import java.sql.SQLException;
39
40 /**
41 * User: mkrishna
42 * Date: Nov 10, 2004
43 */
44 public class DDLGenTaskUTEST extends JDBCTestCaseAdapter {
45 private Project project;
46 private GenerateTaskMock task;
47 private MockConnection connection;
48
49 protected void setUp() throws Exception {
50 super.setUp();
51 project = new Project();
52 task = new GenerateTaskMock();
53 Path path = new Path(project);
54 path.setLocation(new File("lib/classes12.jar"));
55 task.setClasspath(path);
56 task.setUrl("jdbc:oracle:thin:@cambria:1521:nxgil");
57 task.setDriver("oracle.jdbc.driver.OracleDriver");
58 task.setUserid("krishna");
59 task.setPassword("krishna");
60 task.setSchema("KRISHNA");
61 GeneratorSpec constraintsSpec = new GeneratorSpec();
62 constraintsSpec.setDir("build/test/constraintsSpec");
63 constraintsSpec.setExtension(".sql");
64 task.addGenerator(constraintsSpec);
65 }
66
67 public void testGenerationOfSQLDoesntThrowException() {
68 GenerateTask task = new GenerateTask();
69 Path path = new Path(project);
70 task.setClasspath(path);
71 task.setUrl("jdbc:oracle:thin:@cambria:1521:nxgil");
72 task.setDriver("oracle.jdbc.driver.OracleDriver");
73 task.setUserid("krishna");
74 task.setPassword("krishna");
75 task.setSchema("KRISHNA");
76 GeneratorSpec constraintsSpec = new GeneratorSpec();
77 constraintsSpec.setDir("build/test/constraintsSpec");
78 constraintsSpec.setPrefix("foreignKeys");
79 constraintsSpec.setExtension(".sql");
80 task.addGenerator(constraintsSpec);
81
82 GeneratorSpec insertsSpec = new GeneratorSpec();
83 insertsSpec.setDir("build/test/seed");
84 insertsSpec.setExtension(".sql");
85
86 addTableFileSpec(insertsSpec);
87
88 task.addGenerator(insertsSpec);
89 task.setCatalog(null);
90 task.setProject(project);
91 GeneratorSpec tablesSpec = new GeneratorSpec();
92 tablesSpec.setDir("build/test/tablesSpec");
93 tablesSpec.setExtension(".sql");
94 task.addGenerator(tablesSpec);
95 try {
96 task.execute();
97 } catch (BuildException e) {
98 e.printStackTrace();
99 fail("Build Exception was thrown");
100 }
101 }
102
103 public void testGenerationOfSQLDoesntThrowExceptionInSqlServer() {
104 GenerateTask task = new GenerateTask();
105 Path path = new Path(project);
106 task.setClasspath(path);
107 task.setUrl("jdbc:bea:sqlserver://CK1\\Dev:1433");
108 task.setDriver("weblogic.jdbc.sqlserver.SQLServerDriver");
109 task.setUserid("krishna");
110 task.setPassword("krishna");
111
112 GeneratorSpec constraintsSpec = new GeneratorSpec();
113 constraintsSpec.setDir("build/test/constraintsSpec");
114 constraintsSpec.setPrefix("foreignKeys");
115 constraintsSpec.setExtension(".sql");
116 task.addGenerator(constraintsSpec);
117
118 GeneratorSpec insertsSpec = new GeneratorSpec();
119 insertsSpec.setDir("build/test/seed");
120 insertsSpec.setExtension(".sql");
121
122 addTableFileSpec(insertsSpec);
123
124 task.addGenerator(insertsSpec);
125 task.setCatalog(null);
126 task.setProject(project);
127 GeneratorSpec tablesSpec = new GeneratorSpec();
128 tablesSpec.setDir("build/test/tablesSpec");
129 tablesSpec.setExtension(".sql");
130 Table dtprops = new Table();
131 dtprops.setName("dtproperties");
132 tablesSpec.addConfiguredExclude(dtprops);
133 task.addGenerator(tablesSpec);
134 try {
135 task.execute();
136 } catch (BuildException e) {
137 e.printStackTrace();
138 fail("Build Exception was thrown");
139 }
140 }
141
142 private void addTableFileSpec(GeneratorSpec data) {
143 Table seedTable1 = new Table();
144 seedTable1.setName("ADDRESS");
145 data.addConfiguredInclude(seedTable1);
146
147 Table seedTable2 = new Table();
148 seedTable2.setName("ADDRESSUSAGE");
149 data.addConfiguredInclude(seedTable2);
150
151 Table seedTable3 = new Table();
152 seedTable3.setName("CODE");
153 data.addConfiguredInclude(seedTable3);
154
155 Table seedTable4 = new Table();
156 seedTable4.setName("COUNTRY");
157 data.addConfiguredInclude(seedTable4);
158
159 Table seedTable5 = new Table();
160 seedTable5.setName("CREDITREASONCODE");
161 data.addConfiguredInclude(seedTable5);
162
163 Table seedTable6 = new Table();
164 seedTable6.setName("EOLOPTIONTYPEFORPRODUCT");
165 data.addConfiguredInclude(seedTable6);
166
167 Table seedTable7 = new Table();
168 seedTable7.setName("EXEMPTIONREASON");
169 data.addConfiguredInclude(seedTable7);
170
171 Table seedTable8 = new Table();
172 seedTable8.setName("INVOICEFORMATFIELDNAME");
173 data.addConfiguredInclude(seedTable8);
174
175 Table seedTable9 = new Table();
176 seedTable9.setName("LANGUAGE");
177 data.addConfiguredInclude(seedTable9);
178
179 Table seedTable10 = new Table();
180 seedTable10.setName("ORGANIZATION");
181 data.addConfiguredInclude(seedTable10);
182
183 Table seedTable11 = new Table();
184 seedTable11.setName("PAYMENTREVERSALREASONCODE");
185 data.addConfiguredInclude(seedTable11);
186
187 Table seedTable12 = new Table();
188 seedTable12.setName("PRODUCT");
189 data.addConfiguredInclude(seedTable12);
190
191 Table seedTable13 = new Table();
192 seedTable13.setName("REASONCODE");
193 data.addConfiguredInclude(seedTable13);
194
195 Table seedTable14 = new Table();
196 seedTable14.setName("REASONCODETYPE");
197 data.addConfiguredInclude(seedTable14);
198
199 Table seedTable15 = new Table();
200 seedTable15.setName("RULEATTRIBUTEDESCRIPTOR");
201 data.addConfiguredInclude(seedTable15);
202
203 Table seedTable16 = new Table();
204 seedTable16.setName("RULEDESCRIPTOR");
205 data.addConfiguredInclude(seedTable16);
206
207 Table seedTable17 = new Table();
208 seedTable17.setName("SIC");
209 data.addConfiguredInclude(seedTable17);
210
211 Table seedTable18 = new Table();
212 seedTable18.setName("STATE");
213 data.addConfiguredInclude(seedTable18);
214
215 Table seedTable19 = new Table();
216 seedTable19.setName("VALIDPRODUCTCODE");
217 data.addConfiguredInclude(seedTable19);
218
219 Table seedTable20 = new Table();
220 seedTable20.setName("PROFSETUPDATA");
221 data.addConfiguredInclude(seedTable20);
222
223 Table seedTable21 = new Table();
224 seedTable21.setName("CHARTOFACCOUNTMASKINGFORMAT");
225 data.addConfiguredInclude(seedTable21);
226
227 Table seedTable22 = new Table();
228 seedTable22.setName("CHARGETYPECOAMATRIX");
229 data.addConfiguredInclude(seedTable22);
230
231 Table seedTable23 = new Table();
232 seedTable23.setName("IDCRULECOAMATRIX");
233 data.addConfiguredInclude(seedTable23);
234
235 Table seedTable24 = new Table();
236 seedTable24.setName("PROGRAMCOAMATRIX");
237 data.addConfiguredInclude(seedTable24);
238
239 Table seedTable25 = new Table();
240 seedTable25.setName("REASONCODECOAMATRIX");
241 data.addConfiguredInclude(seedTable25);
242
243 Table seedTable26 = new Table();
244 seedTable26.setName("REMITTOCOAMATRIX");
245 data.addConfiguredInclude(seedTable26);
246
247 Table seedTable27 = new Table();
248 seedTable27.setName("PROFVERSION");
249 data.addConfiguredInclude(seedTable27);
250
251 Table seedTable28 = new Table();
252 seedTable28.setName("CHARGETYPECOADETAILS");
253 data.addConfiguredInclude(seedTable28);
254
255 }
256
257 public void testGenerateCallsTableAndForeignKeyGenerator() throws SQLException {
258 connection = getJDBCMockObjectFactory().getMockConnection();
259 MockDatabaseMetaData mockDatabaseMetaData = new MockDatabaseMetaData();
260 MockResultSet mockResultSet = new MockResultSet("tablesSpec");
261 mockResultSet.addRow(new Object[]{new Object(), new Object()});
262 mockResultSet.addRow(new Object[]{new Object(), new Object()});
263 mockDatabaseMetaData.setTables(mockResultSet);
264 connection.setMetaData(mockDatabaseMetaData);
265
266 task.setCatalog(null);
267 task.setProject(project);
268 GeneratorSpec tablesSpec = new GeneratorSpec();
269 tablesSpec.setDir("build/test/tablesSpec");
270 tablesSpec.setExtension(".sql");
271 task.addGenerator(tablesSpec);
272 task.execute();
273
274 assertEquals(2, task.numberOfTimesGenerateTableDDLWasCalled);
275 assertEquals(2, task.numberOfTimesAddToForeignDDLWasCalled);
276 assertTrue(task.generateForeignKeyFileCalled);
277 assertTrue(task.generateTableFileSpecCalled);
278 verifyAllResultSetsClosed();
279 verifyAllStatementsClosed();
280 verifyConnectionClosed();
281 }
282
283 class GenerateTaskMock extends GenerateTask {
284 private int numberOfTimesGenerateTableDDLWasCalled = 0;
285 private int numberOfTimesAddToForeignDDLWasCalled = 0;
286 private boolean generateForeignKeyFileCalled;
287 private boolean generateTableFileSpecCalled;
288
289 protected Connection getConnection() {
290 return connection;
291 }
292
293 protected void generateConstraintDDL() throws SQLException {
294 generateForeignKeyFileCalled = true;
295 }
296
297 protected void addForeignKeyInfoForTable(DatabaseMetaData dbmd, ResultSet tablesResultSet) throws SQLException {
298 numberOfTimesAddToForeignDDLWasCalled++;
299 }
300
301 protected void generateInsertSQL(GeneratorSpec generatorSpec, Connection connection) {
302 generateTableFileSpecCalled = true;
303 }
304 }
305 }