1 package org.grlea.log.rollover; 2 3 6 18 19 import junit.framework.TestCase; 20 21 import java.io.IOException ; 22 import java.lang.reflect.Field ; 23 import java.text.SimpleDateFormat ; 24 import java.util.Calendar ; 25 import java.util.Date ; 26 import java.util.Properties ; 27 import java.util.SimpleTimeZone ; 28 import java.util.TimeZone ; 29 30 36 public class 37 TestOfTimeOfDayRolloverStrategy 38 extends TestCase 39 { 40 static final String KEY_ROLLOVER_TIME = "simplelog.rollover.timeOfDay.time"; 41 42 static final String KEY_TIMEZONE = "simplelog.rollover.timeOfDay.timezone"; 43 44 private TimeOfDayRolloverStrategy rollover; 45 46 public 47 TestOfTimeOfDayRolloverStrategy(String name) 48 { 49 super(name); 51 } 52 53 protected void 54 setUp() 55 { 56 rollover = new TimeOfDayRolloverStrategy(TimeZone.getDefault(), 0, 0); 57 } 58 59 protected void 60 tearDown() 61 { 62 rollover = null; 63 } 64 65 public void 66 testNotDueYet() 67 throws Exception 68 { 69 Calendar calendar = createCalendar(60); 70 rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar)); 71 72 Date fileCreationTime = createCalendar(0, 0).getTime(); 73 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 74 assertEquals("rolloverNow", false, rolloverNow); 75 } 76 77 public void 78 testDueAfterMidnight() 79 throws Exception 80 { 81 rollover.setRolloverTime(TimeZone.getDefault(), 0, 1); 82 83 Date fileCreationTime = new Date (createCalendar(0, 1).getTime().getTime()); 84 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 85 assertEquals("rolloverNow", false, rolloverNow); 86 } 87 88 public void 89 testDueNow() 90 throws Exception 91 { 92 Calendar calendar = createCalendar(-60); 93 rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar)); 94 95 Date fileCreationTime = createCalendar(0, 0).getTime(); 96 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 97 assertEquals("rolloverNow", true, rolloverNow); 98 } 99 100 public void 101 testDueBeforeMidnight() 102 throws Exception 103 { 104 rollover.setRolloverTime(TimeZone.getDefault(), 23, 59); 105 106 Date fileCreationTime = createCalendar(0, 0).getTime(); 107 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 108 assertEquals("rolloverNow", false, rolloverNow); 109 } 110 111 public void 112 testDueManyDaysAgo() 113 throws Exception 114 { 115 rollover.setRolloverTime(TimeZone.getDefault(), 0, 0); 116 117 Date fileCreationTime = createCalendar(24 * -7, 0).getTime(); 118 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 119 assertEquals("rolloverNow", true, rolloverNow); 120 121 rollover.setRolloverTime(TimeZone.getDefault(), 23, 59); 122 123 rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 124 assertEquals("rolloverNow", true, rolloverNow); 125 } 126 127 public void 128 _testNotDueAndThenDue() 129 throws Exception 130 { 131 Calendar calendar = createCalendar(60); 133 rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar)); 134 135 Date fileCreationTime = createCalendar(0, 0).getTime(); 137 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 138 assertEquals("rolloverNow", false, rolloverNow); 139 140 System.out.println("Sleeping for 62 seconds..."); 142 Thread.sleep(62 * 1000); 143 144 rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 146 assertEquals("rolloverNow", true, rolloverNow); 147 } 148 149 public void 150 _testAnotherTimezone() 151 throws Exception 152 { 153 TimeZone defaultTimezone = TimeZone.getDefault(); 155 int defaultZoneOffset = defaultTimezone.getOffset(System.currentTimeMillis()); 156 int testZoneOffset = (defaultZoneOffset == 0) ? 1 : 0; 157 TimeZone testZone = new SimpleTimeZone (testZoneOffset, "TEST"); 158 159 SimpleDateFormat dateFormat = new SimpleDateFormat ("dd/MM HH:mm"); 160 161 166 int timeDifference = testZoneOffset - defaultZoneOffset; 168 int oneHour = 1000 * 60 * 60; 169 int timeDifferenceHours = timeDifference / oneHour; 170 int timeDifferenceMinutes = timeDifference % oneHour; 171 174 Calendar calendar = createCalendar(60); 176 179 int rolloverHour = getHour(calendar) + timeDifferenceHours; 181 if (rolloverHour < 0) 182 rolloverHour += 24; 183 if (rolloverHour > 23) 184 rolloverHour -= 24; 185 186 int rolloverMinute = getMinute(calendar) + timeDifferenceMinutes; 187 if (rolloverMinute < 0) 188 rolloverMinute += 24; 189 if (rolloverMinute > 59) 190 rolloverMinute -= 60; 191 192 rollover.setRolloverTime(testZone, rolloverHour, rolloverMinute); 193 194 Date fileCreationTime = createCalendar(0, 0).getTime(); 196 197 200 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 201 assertEquals("rolloverNow", false, rolloverNow); 202 203 System.out.println("Sleeping for 62 seconds..."); 204 Thread.sleep(62 * 1000); 205 206 rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 207 assertEquals("rolloverNow", true, rolloverNow); 208 } 209 210 public void 211 testResultImmediatelyAfterRollover() 212 { 213 Calendar calendar = createCalendar(-5); 214 rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar)); 215 216 Date fileCreationTime = createCalendar(0, 0).getTime(); 217 boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 218 assertEquals("rolloverNow", true, rolloverNow); 219 220 fileCreationTime = new Date (); 222 rolloverNow = rollover.rolloverNow(fileCreationTime, 0); 223 assertEquals("rolloverNow", false, rolloverNow); 224 } 225 226 public void 227 testConfigure() 228 throws Exception 229 { 230 rollover = new TimeOfDayRolloverStrategy(); 232 233 Properties properties = new Properties (); 234 235 Field timezoneField = TimeOfDayRolloverStrategy.class.getDeclaredField("timeZone"); 236 Field hourField = TimeOfDayRolloverStrategy.class.getDeclaredField("hour"); 237 Field minuteField = TimeOfDayRolloverStrategy.class.getDeclaredField("minute"); 238 239 timezoneField.setAccessible(true); 240 hourField.setAccessible(true); 241 minuteField.setAccessible(true); 242 243 TimeZone defaultTimeZone = TimeZone.getDefault(); 245 String defaultTimeZoneId = defaultTimeZone.getID(); 246 configureTest(properties, timezoneField, hourField, minuteField, 247 defaultTimeZoneId, 0, 0); 248 249 properties.setProperty(KEY_ROLLOVER_TIME, "1:00"); 251 configureTest(properties, timezoneField, hourField, minuteField, 252 defaultTimeZoneId, 1, 0); 253 254 properties.setProperty(KEY_ROLLOVER_TIME, "0:01"); 256 configureTest(properties, timezoneField, hourField, minuteField, 257 defaultTimeZoneId, 0, 1); 258 259 properties.setProperty(KEY_ROLLOVER_TIME, "23:59"); 261 configureTest(properties, timezoneField, hourField, minuteField, 262 defaultTimeZoneId, 23, 59); 263 264 properties.setProperty(KEY_ROLLOVER_TIME, "24:59"); 266 try 267 { 268 configureTest(properties, timezoneField, hourField, minuteField, 269 defaultTimeZoneId, 24, 59); 270 fail("IOException expected"); 271 } 272 catch (IOException e) 273 {} 274 275 properties.setProperty(KEY_ROLLOVER_TIME, "11:60"); 277 try 278 { 279 configureTest(properties, timezoneField, hourField, minuteField, 280 defaultTimeZoneId, 11, 60); 281 fail("IOException expected"); 282 } 283 catch (IOException e) 284 {} 285 286 properties.setProperty(KEY_ROLLOVER_TIME, "02:10"); 288 configureTest(properties, timezoneField, hourField, minuteField, 289 defaultTimeZoneId, 2, 10); 290 291 properties.setProperty(KEY_ROLLOVER_TIME, "a:12"); 293 try 294 { 295 configureTest(properties, timezoneField, hourField, minuteField, 296 defaultTimeZoneId, 0, 12); 297 fail("IOException expected"); 298 } 299 catch (IOException e) 300 {} 301 302 for (int hour = 0; hour < 24; hour++) 304 { 305 for (int minute = 0; minute < 60; minute++) 306 { 307 properties.setProperty(KEY_ROLLOVER_TIME, hour + ":" + (minute < 10 ? "0" : "") + minute); 308 configureTest(properties, timezoneField, hourField, minuteField, 309 defaultTimeZoneId, hour, minute); 310 } 311 } 312 313 properties.setProperty(KEY_ROLLOVER_TIME, "0:00"); 315 properties.setProperty(KEY_TIMEZONE, "GMT"); 316 configureTest(properties, timezoneField, hourField, minuteField, "GMT", 0, 0); 317 318 properties.setProperty(KEY_ROLLOVER_TIME, "10:45"); 320 properties.setProperty(KEY_TIMEZONE, "GMT"); 321 configureTest(properties, timezoneField, hourField, minuteField, "GMT", 10, 45); 322 323 properties.setProperty(KEY_ROLLOVER_TIME, "0:00"); 325 properties.setProperty(KEY_TIMEZONE, "Australia/Adelaide"); 326 configureTest(properties, timezoneField, hourField, minuteField, "Australia/Adelaide", 0, 0); 327 328 properties.setProperty(KEY_ROLLOVER_TIME, "0:00"); 330 properties.setProperty(KEY_TIMEZONE, "GMT+5"); 331 configureTest(properties, timezoneField, hourField, minuteField, "GMT+05:00", 0, 0); 332 333 properties.setProperty(KEY_ROLLOVER_TIME, "0:00"); 335 properties.setProperty(KEY_TIMEZONE, "GMT-10"); 336 configureTest(properties, timezoneField, hourField, minuteField, "GMT-10:00", 0, 0); 337 338 properties.setProperty(KEY_ROLLOVER_TIME, "0:00"); 340 properties.setProperty(KEY_TIMEZONE, "GMT+0:30"); 341 configureTest(properties, timezoneField, hourField, minuteField, "GMT+00:30", 0, 0); 342 343 properties.setProperty(KEY_ROLLOVER_TIME, "0:00"); 345 properties.setProperty(KEY_TIMEZONE, "Wonka/BubblePop Room"); 346 try 347 { 348 configureTest(properties, timezoneField, hourField, minuteField, "Wonka/BubblePop Room", 0, 0); 349 fail("IOException expected"); 350 } 351 catch (IOException e) 352 {} 353 } 354 355 private void configureTest(Properties properties, Field timezoneField, Field hourField, 356 Field minuteField, String expectedTimezoneId, int expectedHour, 357 int expectedMinute) 358 throws IOException , IllegalAccessException 359 { 360 rollover.configure(properties); 361 TimeZone timezone = (TimeZone ) timezoneField.get(rollover); 362 int hour = hourField.getInt(rollover); 363 int minute = minuteField.getInt(rollover); 364 assertEquals("timezone", expectedTimezoneId, timezone.getID()); 365 assertEquals("hour", expectedHour, hour); 366 assertEquals("minute", expectedMinute, minute); 367 } 368 369 private void 370 printDate(Date time, SimpleDateFormat dateFormat, TimeZone defaultTimezone, TimeZone testZone) 371 { 372 dateFormat.setTimeZone(defaultTimezone); 373 System.out.println("Default Zone: " + dateFormat.format(time)); 374 dateFormat.setTimeZone(testZone); 375 System.out.println("Test Zone: " + dateFormat.format(time)); 376 } 377 378 private Calendar 379 createCalendar(int hour, int minute) 380 { 381 Calendar calendar = Calendar.getInstance(); 382 calendar.set(Calendar.HOUR_OF_DAY, hour); 383 calendar.set(Calendar.MINUTE, minute); 384 calendar.set(Calendar.SECOND, 0); 385 return calendar; 386 } 387 388 private Calendar 389 createCalendar(int differenceSeconds) 390 { 391 Calendar calendar = Calendar.getInstance(); 392 calendar.setTime(new Date (System.currentTimeMillis() + (differenceSeconds * 1000))); 393 return calendar; 394 } 395 396 private int 397 getHour(Calendar calendar) 398 { 399 return calendar.get(Calendar.HOUR_OF_DAY); 400 } 401 402 private int 403 getMinute(Calendar calendar) 404 { 405 return calendar.get(Calendar.MINUTE); 406 } 407 } | Popular Tags |