Changeset 173
- Timestamp:
- 12/19/07 17:01:10 (1 year ago)
- Files:
-
- lex/trunk/test/com/qwirx/db/SqlDatabaseTest.java (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
lex/trunk/test/com/qwirx/db/SqlDatabaseTest.java
r165 r173 13 13 import java.sql.SQLException; 14 14 import java.util.Iterator; 15 import java.util.List; 16 import java.util.Map; 17 import java.util.Set; 15 18 16 19 import junit.framework.TestCase; … … 22 25 * @author chris 23 26 * 24 * TODO To change the template for this generated type comment go to 25 * Window - Preferences - Java - Code Style - Code Templates 27 * Tests the SqlDatabase and SqlChange classes, specifically change tracking. 26 28 */ 27 29 public class SqlDatabaseTest extends TestCase 28 30 { 29 31 private SqlDatabase db; 32 private static final String dsn = 33 "jdbc:mysql://dev.aidworld.org:3306/test?user=test"; 30 34 31 35 public void testDatabasePreparedStatements() throws Exception 32 36 { 33 37 Class.forName("com.mysql.jdbc.Driver").newInstance(); 34 String dsn = "jdbc:mysql://localhost:3306/test?user=test";35 38 // + "&useServerPrepStmts=false"; 36 39 Connection conn = DriverManager.getConnection(dsn); … … 52 55 { 53 56 Class.forName("com.mysql.jdbc.Driver").newInstance(); 54 String dsn = "jdbc:mysql://localhost:3306/test?user=test";55 57 Connection conn = DriverManager.getConnection(dsn); 56 58 db = new SqlDatabase(conn, "test", "test"); … … 88 90 private int logRecordId; 89 91 90 p ublicvoid getChangeTypeAndId(int xaId)92 private void getChangeTypeAndId(int xaId) 91 93 throws DatabaseException, SQLException 92 94 { … … 101 103 } 102 104 103 p ublic void checkCurrentValues(String query, ChangedRow cr)105 private void assertCurrentValues(String query, ChangedRow cr) 104 106 throws DatabaseException, SQLException 105 107 { … … 141 143 } 142 144 143 p ublic void checkAndRemoveChanges(int rowLogId, ChangedRow cr)145 private void assertChangeLogUpdated(int rowLogId, ChangedRow cr) 144 146 throws DatabaseException, SQLException 145 147 { 148 List changedValues = cr.getValues(); 149 146 150 db.prepareSelect( 147 151 "SELECT ID, Col_Name, Old_Value, " + … … 190 194 rs.getString(3); 191 195 192 cr.remove(colName); 193 } 194 db.finish(); 195 196 Iterator i = cr.iterator(); 197 if (i.hasNext()) 198 { 199 ChangedValue cv = (ChangedValue)( i.next() ); 200 assertTrue("Expected column change log not found: "+ 201 cv.getName(), false); 202 } 203 } 204 205 private int insertTestRecord() throws DatabaseException, SQLException 196 changedValues.remove(cv); 197 } 198 199 db.finish(); 200 201 assertEquals("Expected column change logs not found: " + 202 changedValues.toString(), 0, changedValues.size()); 203 } 204 205 private SqlChange insertTestRecord() throws DatabaseException, SQLException 206 206 { 207 207 SqlChange ch = (SqlChange)db.createChange(SqlChange.INSERT, … … 216 216 // of mysql jdbc when getting column values 217 217 ch.execute(); 218 getChangeTypeAndId(ch.getId()); 219 return ch.getInsertedRowId(); 218 getChangeTypeAndId(ch.getId().intValue()); 219 return ch; 220 } 221 222 private void assertEquals(ChangedRow rowA, ChangedRow rowB) 223 { 224 List fieldsA = rowA.getColumns(); 225 226 for (Iterator i = rowB.getColumns().iterator(); i.hasNext();) 227 { 228 String colName = (String)i.next(); 229 String valA = rowA.get(colName).getOldValue(); 230 String valB = rowB.get(colName).getOldValue(); 231 if (valA != null && valB == null) 232 { 233 assertEquals(colName, valA, "null"); 234 } 235 assertEquals(colName, valA, valB); 236 237 valA = rowA.get(colName).getNewValue(); 238 valB = rowB.get(colName).getNewValue(); 239 if (valA != null && valB == null) 240 { 241 assertEquals(colName, valA, "null"); 242 } 243 assertEquals(colName, valA, valB); 244 245 fieldsA.remove(colName); 246 } 247 248 assertEquals(fieldsA.toString(), 0, fieldsA.size()); 220 249 } 221 250 222 251 public void testInsert() throws Exception 223 252 { 224 insertTestRecord();253 SqlChange insert = insertTestRecord(); 225 254 assertEquals("INSERT", changeType); 226 255 … … 239 268 db.finish(); 240 269 241 ChangedRow cr = new ChangedRow(); 242 cr.put(new ChangedValue("ID", null, "1")); 243 cr.put(new ChangedValue("t_int", null, "1234")); 244 cr.put(new ChangedValue("t_str", null, "Hello World")); 245 cr.put(new ChangedValue("t_txt", null, "A somewhat longer string")); 246 cr.put(new ChangedValue("t_flt", null, "3.14")); 247 cr.put(new ChangedValue("t_dat", null, "1979-01-07")); // happy birthday 248 cr.put(new ChangedValue("t_dtm", null, "1979-01-07 06:35:00.0")); 249 cr.put(new ChangedValue("t_dat2", null, "0000-00-00")); 250 251 checkCurrentValues("SELECT * FROM logtest", cr); 252 checkAndRemoveChanges(rowLogId, cr); 270 ChangedRow expectedRowChange = new ChangedRow(new ChangedValue[]{ 271 new ChangedValue("ID", null, "1"), 272 new ChangedValue("t_int", null, "1234"), 273 new ChangedValue("t_str", null, "Hello World"), 274 new ChangedValue("t_txt", null, "A somewhat longer string"), 275 new ChangedValue("t_flt", null, "3.14"), 276 new ChangedValue("t_dat", null, "1979-01-07"), // happy birthday 277 new ChangedValue("t_dtm", null, "1979-01-07 06:35:00.0"), 278 new ChangedValue("t_dat2", null, "0000-00-00"), 279 }); 280 281 assertCurrentValues("SELECT * FROM logtest", expectedRowChange); 282 assertChangeLogUpdated(rowLogId, expectedRowChange); 283 284 List rows = insert.getChangedRows(); 285 assertEquals(1, rows.size()); 286 expectedRowChange = (ChangedRow)rows.get(0); 287 assertChangeLogUpdated(rowLogId, expectedRowChange); 288 289 SqlChange delete = insert.reverse(); 290 assertEquals(SqlChange.DELETE, delete.getType()); 291 assertEquals("ID = 1", delete.getConditions()); 292 delete.execute(); 293 rows = delete.getChangedRows(); 294 assertEquals(1, rows.size()); 295 ChangedRow actualReverseRowChange = (ChangedRow)rows.get(0); 296 297 ChangedRow expectedReverseRowChange = new ChangedRow( 298 new ChangedValue[]{ 299 new ChangedValue("ID", "1", null), 300 new ChangedValue("t_int", "1234", null), 301 new ChangedValue("t_str", "Hello World", null), 302 new ChangedValue("t_txt", "A somewhat longer string", null), 303 new ChangedValue("t_flt", "3.14", null), 304 new ChangedValue("t_dat", "1979-01-07", null), // happy birthday 305 new ChangedValue("t_dtm", "1979-01-07 06:35:00.0", null), 306 new ChangedValue("t_dat2", "0000-00-00", null), 307 }); 308 assertEquals(expectedReverseRowChange, expectedRowChange.reverse()); 309 assertEquals(expectedReverseRowChange, actualReverseRowChange); 310 assertEquals(0, db.getSingleInteger("SELECT COUNT(1) FROM logtest")); 253 311 } 254 312 255 313 public void testUpdate() throws Exception 256 314 { 257 int testId = insertTestRecord(); 258 259 Change ch = db.createChange(SqlChange.UPDATE, 315 SqlChange testInsert = insertTestRecord(); 316 int testId = testInsert.getInsertedRowId(); 317 318 Change testUpdate = db.createChange(SqlChange.UPDATE, 260 319 "logtest", "t_int = 1234"); 261 ch.setInt ("t_int", 23456);262 ch.setString("t_str", "Hello Again");263 ch.setString("t_txt", "Another longer string");264 ch.setString("t_flt", "2.81718"); // will be truncated265 ch.setString("t_dat", "1980-10-15"); // happy birthday266 ch.setString("t_dtm", "1980-10-15 12:34:56.0");267 ch.execute();268 269 getChangeTypeAndId( ch.getId());320 testUpdate.setInt ("t_int", 23456); 321 testUpdate.setString("t_str", "Hello Again"); 322 testUpdate.setString("t_txt", "Another longer string"); 323 testUpdate.setString("t_flt", "2.81718"); // will be truncated 324 testUpdate.setString("t_dat", "1980-10-15"); // happy birthday 325 testUpdate.setString("t_dtm", "1980-10-15 12:34:56.0"); 326 testUpdate.execute(); 327 328 getChangeTypeAndId(testUpdate.getId().intValue()); 270 329 assertEquals("UPDATE", changeType); 271 330 … … 293 352 db.finish(); 294 353 295 ChangedRow cr= new ChangedRow();296 cr.put(new ChangedValue("t_int",354 ChangedRow expectedRowChange = new ChangedRow(); 355 expectedRowChange.put(new ChangedValue("t_int", 297 356 "1234", 298 357 "23456")); 299 cr.put(new ChangedValue("t_str",358 expectedRowChange.put(new ChangedValue("t_str", 300 359 "Hello World", 301 360 "Hello Again")); 302 cr.put(new ChangedValue("t_txt",361 expectedRowChange.put(new ChangedValue("t_txt", 303 362 "A somewhat longer string", 304 363 "Another longer string")); 305 cr.put(new ChangedValue("t_flt", "3.14", "2.82"));306 cr.put(new ChangedValue("t_dat",364 expectedRowChange.put(new ChangedValue("t_flt", "3.14", "2.82")); 365 expectedRowChange.put(new ChangedValue("t_dat", 307 366 "1979-01-07", "1980-10-15")); 308 cr.put(new ChangedValue("t_dtm",367 expectedRowChange.put(new ChangedValue("t_dtm", 309 368 "1979-01-07 06:35:00.0", "1980-10-15 12:34:56.0")); 310 369 311 checkCurrentValues("SELECT * FROM logtest", cr);312 checkAndRemoveChanges(rowLogId, cr);370 assertCurrentValues("SELECT * FROM logtest", expectedRowChange); 371 assertChangeLogUpdated(rowLogId, expectedRowChange); 313 372 } 314 373 … … 321 380 ch.execute(); 322 381 323 getChangeTypeAndId(ch.getId() );382 getChangeTypeAndId(ch.getId().intValue()); 324 383 assertEquals("DELETE", changeType); 325 384 … … 365 424 db.finish(); 366 425 367 checkAndRemoveChanges(rowLogId, cr);426 assertChangeLogUpdated(rowLogId, cr); 368 427 } 369 428 … … 382 441 ch.execute(); 383 442 384 getChangeTypeAndId(ch.getId() );443 getChangeTypeAndId(ch.getId().intValue()); 385 444 assertEquals("UPDATE", changeType); 386 445 … … 424 483 "1979-01-07 06:35:00.0", "1980-10-15 12:34:56.0")); 425 484 426 checkCurrentValues("SELECT * FROM logtest", cr);427 checkAndRemoveChanges(rowLogId, cr);485 assertCurrentValues("SELECT * FROM logtest", cr); 486 assertChangeLogUpdated(rowLogId, cr); 428 487 } 429 488 … … 431 490 { 432 491 Class.forName("com.mysql.jdbc.Driver").newInstance(); 433 String dsn = "jdbc:mysql://localhost:3306/test?" + 434 "zeroDateTimeBehaviour=convertToNull&noDatetimeStringSync=true"; 435 Connection conn = DriverManager.getConnection(dsn, "test", ""); 492 493 Connection conn = DriverManager.getConnection(dsn + 494 "zeroDateTimeBehaviour=convertToNull" + 495 "&noDatetimeStringSync=true", "test", ""); 436 496 437 497 try
