1 21 22 package org.opensubsystems.core.persist.db.driver; 23 24 import java.sql.PreparedStatement ; 25 import java.sql.ResultSet ; 26 import java.sql.SQLException ; 27 import java.text.DateFormat ; 28 import java.util.Calendar ; 29 30 import junit.extensions.TestSetup; 31 import junit.framework.Test; 32 import junit.framework.TestSuite; 33 34 import org.opensubsystems.core.error.OSSException; 35 import org.opensubsystems.core.persist.db.Database; 36 import org.opensubsystems.core.persist.db.DatabaseImpl; 37 import org.opensubsystems.core.persist.db.DatabaseTest; 38 import org.opensubsystems.core.persist.db.DatabaseTestSetup; 39 import org.opensubsystems.core.persist.db.DatabaseTestSuite; 40 import org.opensubsystems.core.util.DatabaseUtils; 41 import org.opensubsystems.core.util.DateUtils; 42 43 51 public final class TimeTest 52 { 53 55 58 private TimeTest( 59 ) 60 { 61 } 63 64 66 72 public static Test suite( 73 ) 74 { 75 TestSuite suite = new DatabaseTestSuite("TimeTest"); 76 suite.addTestSuite(TimeTestInternal.class); 77 TestSetup wrapper = new DatabaseTestSetup(suite); 78 79 return wrapper; 80 } 81 82 87 public static class TimeTestInternal extends DatabaseTest 88 { 89 92 static 93 { 94 Database dbDatabase; 96 97 try 98 { 99 dbDatabase = DatabaseImpl.getInstance(); 100 dbDatabase.add(DatabaseTestSchema.class); 102 } 103 catch (OSSException bfeExc) 104 { 105 throw new RuntimeException ("Unexpected exception.", bfeExc); 106 } 107 } 108 109 114 public TimeTestInternal( 115 String strTestName 116 ) 117 { 118 super(strTestName); 119 } 120 121 136 public void testBasicTimeSupport( 137 ) throws Throwable 138 { 139 final String INSERT_TIME = "insert into TIME_TEST(TIME_TEST) values (?)"; 140 final String SELECT_TIME = "select TIME_TEST.* from TIME_TEST where TIME_TEST = ?"; 142 final String DELETE_TIME = "delete from TIME_TEST where TIME_TEST = ?"; 143 144 Calendar calGenerate = Calendar.getInstance(); 145 java.sql.Time insertTime; 146 PreparedStatement insertStatement; 147 int iUpdateCount; 148 149 calGenerate.set(1995, 9, 15, 1, 2, 3); 151 insertTime = new java.sql.Time (calGenerate.getTimeInMillis()); 152 153 m_transaction.begin(); 154 155 try 156 { 157 insertStatement = m_connection.prepareStatement(INSERT_TIME); 158 insertStatement.setTime(1, insertTime); 159 160 iUpdateCount = DatabaseUtils.executeUpdateAndClose(insertStatement); 161 162 m_transaction.commit(); 163 } 164 catch (Throwable throwable) 165 { 166 m_transaction.rollback(); 167 throw throwable; 168 } 169 170 assertEquals("Exactly one record with time data shoud have been inserted.", 171 iUpdateCount, 1); 172 173 PreparedStatement selectStatement = null; 175 PreparedStatement deleteStatement = null; 176 ResultSet results = null; 177 java.sql.Time retrievedTime; 178 boolean bHasMoreThanOne; 179 int iDeletedCount = 0; 180 181 m_transaction.begin(); 182 183 try 184 { 185 java.sql.Time selectTime; 186 boolean bUpdatableResultSet = true; 187 188 try 189 { 190 selectStatement = m_connection.prepareStatement( 191 SELECT_TIME, 192 ResultSet.TYPE_SCROLL_SENSITIVE, 193 ResultSet.CONCUR_UPDATABLE); 194 } 195 catch (SQLException sqleExc) 196 { 197 bUpdatableResultSet = false; 200 selectStatement = m_connection.prepareStatement(SELECT_TIME); 201 } 204 205 calGenerate.set(1975, 10, 16, 1, 2, 3); 208 selectTime = new java.sql.Time (calGenerate.getTimeInMillis()); 209 selectStatement.setTime(1, selectTime); 210 results = selectStatement.executeQuery(); 211 212 assertTrue("The inserted time not found in the database since most" + 214 " likely because java.sql.Time and driver implementation" + 215 " doesn't enforce date portion to be set to January 1, 1970" + 216 " when using constructor(long).", results.next()); 217 retrievedTime = results.getTime(1); 218 if (bUpdatableResultSet) 220 { 221 try 225 { 226 results.deleteRow(); 227 iDeletedCount = 1; 228 } 229 catch (SQLException sqleExc) 230 { 231 bUpdatableResultSet = false; 234 } 235 } 236 if (!bUpdatableResultSet) 237 { 238 deleteStatement = m_connection.prepareStatement(DELETE_TIME); 239 deleteStatement.setTime(1, insertTime); 240 iDeletedCount = DatabaseUtils.executeUpdateAndClose(deleteStatement); 241 } 242 bHasMoreThanOne = results.next(); 245 m_transaction.commit(); 246 } 247 catch (Throwable throwable) 248 { 249 m_transaction.rollback(); 250 throw throwable; 251 } 252 finally 253 { 254 DatabaseUtils.closeResultSetAndStatement(results, selectStatement); 255 256 m_transaction.begin(); 257 try 258 { 259 deleteStatement = m_connection.prepareStatement( 260 "delete from TIME_TEST"); 261 deleteStatement.execute(); 262 m_transaction.commit(); 263 } 264 catch (Exception eExc) 265 { 266 m_transaction.rollback(); 267 throw eExc; 268 } 269 finally 270 { 271 DatabaseUtils.closeStatement(deleteStatement); 272 } 273 } 274 275 assertFalse("There should be only one inserted time in the database.", 276 bHasMoreThanOne); 277 278 assertEquals("Exactly one record with time data shoud have been deleted.", 279 iDeletedCount, 1); 280 281 assertNotNull("The inserted time shouldn't be retrieved as null from the database", 283 retrievedTime); 284 assertTrue("The time retrieved from database " 286 + DateFormat.getDateTimeInstance().format(retrievedTime) 287 + " is not the same as the inserted one " 288 + DateFormat.getDateTimeInstance().format(insertTime), 289 DateUtils.timeEquals(retrievedTime, insertTime, true)); 290 } 291 } 292 } 293 | Popular Tags |