KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > grlea > log > rollover > TestOfTimeOfDayRolloverStrategy


1 package org.grlea.log.rollover;
2
3 // $Id: TestOfTimeOfDayRolloverStrategy.java,v 1.2 2006/07/13 12:44:53 grlea Exp $
4
// Copyright (c) 2004-2006 Graham Lea. All rights reserved.
5

6 // Licensed under the Apache License, Version 2.0 (the "License");
7
// you may not use this file except in compliance with the License.
8
// You may obtain a copy of the License at
9
//
10
// http://www.apache.org/licenses/LICENSE-2.0
11
//
12
// Unless required by applicable law or agreed to in writing, software
13
// distributed under the License is distributed on an "AS IS" BASIS,
14
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
// See the License for the specific language governing permissions and
16
// limitations under the License.
17

18
19 import junit.framework.TestCase;
20
21 import java.io.IOException JavaDoc;
22 import java.lang.reflect.Field JavaDoc;
23 import java.text.SimpleDateFormat JavaDoc;
24 import java.util.Calendar JavaDoc;
25 import java.util.Date JavaDoc;
26 import java.util.Properties JavaDoc;
27 import java.util.SimpleTimeZone JavaDoc;
28 import java.util.TimeZone JavaDoc;
29
30 /**
31  * <p>Tests the public interface of {@link TimeOfDayRolloverStrategy}.</p>
32  *
33  * @author Graham Lea
34  * @version $Revision: 1.2 $
35  */

36 public class
37 TestOfTimeOfDayRolloverStrategy
38 extends TestCase
39 {
40    static final String JavaDoc KEY_ROLLOVER_TIME = "simplelog.rollover.timeOfDay.time";
41
42    static final String JavaDoc KEY_TIMEZONE = "simplelog.rollover.timeOfDay.timezone";
43
44    private TimeOfDayRolloverStrategy rollover;
45
46    public
47    TestOfTimeOfDayRolloverStrategy(String JavaDoc name)
48    {
49       // Standard TestCase constructor. You shouldn't edit this.
50
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 JavaDoc
68    {
69       Calendar JavaDoc calendar = createCalendar(60);
70       rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar));
71
72       Date JavaDoc 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 JavaDoc
80    {
81       rollover.setRolloverTime(TimeZone.getDefault(), 0, 1);
82
83       Date JavaDoc fileCreationTime = new Date JavaDoc(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 JavaDoc
91    {
92       Calendar JavaDoc calendar = createCalendar(-60);
93       rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar));
94
95       Date JavaDoc 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 JavaDoc
103    {
104       rollover.setRolloverTime(TimeZone.getDefault(), 23, 59);
105
106       Date JavaDoc 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 JavaDoc
114    {
115       rollover.setRolloverTime(TimeZone.getDefault(), 0, 0);
116
117       Date JavaDoc 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 JavaDoc
130    {
131       // Set the rollover time 60 seconds in the future
132
Calendar JavaDoc calendar = createCalendar(60);
133       rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar));
134
135       // Test
136
Date JavaDoc fileCreationTime = createCalendar(0, 0).getTime();
137       boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0);
138       assertEquals("rolloverNow", false, rolloverNow);
139
140       // Sleep for sixty-two seconds
141
System.out.println("Sleeping for 62 seconds...");
142       Thread.sleep(62 * 1000);
143
144       // Test again
145
rolloverNow = rollover.rolloverNow(fileCreationTime, 0);
146       assertEquals("rolloverNow", true, rolloverNow);
147    }
148
149    public void
150    _testAnotherTimezone()
151    throws Exception JavaDoc
152    {
153       // Create a TimeZone with a different offset to the default
154
TimeZone JavaDoc defaultTimezone = TimeZone.getDefault();
155       int defaultZoneOffset = defaultTimezone.getOffset(System.currentTimeMillis());
156       int testZoneOffset = (defaultZoneOffset == 0) ? 1 : 0;
157       TimeZone JavaDoc testZone = new SimpleTimeZone JavaDoc(testZoneOffset, "TEST");
158
159       SimpleDateFormat JavaDoc dateFormat = new SimpleDateFormat JavaDoc("dd/MM HH:mm");
160
161       // Print current date
162
// Date currentTime = new Date();
163
// System.out.println("Current time:");
164
// printDate(currentTime, dateFormat, defaultTimezone, testZone);
165

166       // timeDifference is the value to add to local a default zone time to find the test zone time
167
int timeDifference = testZoneOffset - defaultZoneOffset;
168       int oneHour = 1000 * 60 * 60;
169       int timeDifferenceHours = timeDifference / oneHour;
170       int timeDifferenceMinutes = timeDifference % oneHour;
171 // System.out.println("timeDifferenceHours = " + timeDifferenceHours);
172
// System.out.println("timeDifferenceMinutes = " + timeDifferenceMinutes);
173

174       // Get a calendar in local time
175
Calendar JavaDoc calendar = createCalendar(60);
176 // System.out.println("One minute from now:");
177
// printDate(calendar.getTime(), dateFormat, defaultTimezone, testZone);
178

179       // Set the rollover time using the time difference
180
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       // File creation time is
195
Date JavaDoc fileCreationTime = createCalendar(0, 0).getTime();
196
197 // System.out.println("File creation:");
198
// printDate(fileCreationTime, dateFormat, defaultTimezone, testZone);
199

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 JavaDoc calendar = createCalendar(-5);
214       rollover.setRolloverTime(TimeZone.getDefault(), getHour(calendar), getMinute(calendar));
215
216       Date JavaDoc fileCreationTime = createCalendar(0, 0).getTime();
217       boolean rolloverNow = rollover.rolloverNow(fileCreationTime, 0);
218       assertEquals("rolloverNow", true, rolloverNow);
219
220       // Date of newly created file:
221
fileCreationTime = new Date JavaDoc();
222       rolloverNow = rollover.rolloverNow(fileCreationTime, 0);
223       assertEquals("rolloverNow", false, rolloverNow);
224    }
225
226    public void
227    testConfigure()
228    throws Exception JavaDoc
229    {
230       // Need a new strategy here, as setUp() programatically specifies the time
231
rollover = new TimeOfDayRolloverStrategy();
232
233       Properties JavaDoc properties = new Properties JavaDoc();
234
235       Field JavaDoc timezoneField = TimeOfDayRolloverStrategy.class.getDeclaredField("timeZone");
236       Field JavaDoc hourField = TimeOfDayRolloverStrategy.class.getDeclaredField("hour");
237       Field JavaDoc minuteField = TimeOfDayRolloverStrategy.class.getDeclaredField("minute");
238
239       timezoneField.setAccessible(true);
240       hourField.setAccessible(true);
241       minuteField.setAccessible(true);
242
243       // default:
244
TimeZone JavaDoc defaultTimeZone = TimeZone.getDefault();
245       String JavaDoc defaultTimeZoneId = defaultTimeZone.getID();
246       configureTest(properties, timezoneField, hourField, minuteField,
247                     defaultTimeZoneId, 0, 0);
248
249       // time:
250
properties.setProperty(KEY_ROLLOVER_TIME, "1:00");
251       configureTest(properties, timezoneField, hourField, minuteField,
252                     defaultTimeZoneId, 1, 0);
253
254       // time:
255
properties.setProperty(KEY_ROLLOVER_TIME, "0:01");
256       configureTest(properties, timezoneField, hourField, minuteField,
257                     defaultTimeZoneId, 0, 1);
258
259       // largest time:
260
properties.setProperty(KEY_ROLLOVER_TIME, "23:59");
261       configureTest(properties, timezoneField, hourField, minuteField,
262                     defaultTimeZoneId, 23, 59);
263
264       // hours too large:
265
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 JavaDoc e)
273       {}
274
275       // minutes too large:
276
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 JavaDoc e)
284       {}
285
286       // preceding 0 okay:
287
properties.setProperty(KEY_ROLLOVER_TIME, "02:10");
288       configureTest(properties, timezoneField, hourField, minuteField,
289                     defaultTimeZoneId, 2, 10);
290
291       // alpha:
292
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 JavaDoc e)
300       {}
301
302       // test all valid values:
303
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       // timezone GMT:
314
properties.setProperty(KEY_ROLLOVER_TIME, "0:00");
315       properties.setProperty(KEY_TIMEZONE, "GMT");
316       configureTest(properties, timezoneField, hourField, minuteField, "GMT", 0, 0);
317
318       // timezone GMT and time:
319
properties.setProperty(KEY_ROLLOVER_TIME, "10:45");
320       properties.setProperty(KEY_TIMEZONE, "GMT");
321       configureTest(properties, timezoneField, hourField, minuteField, "GMT", 10, 45);
322
323       // timezone Australia/Adelaide:
324
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       // timezone GMT offset:
329
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       // timezone GMT offset:
334
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       // timezone GMT offset:
339
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       // invalid timezone:
344
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 JavaDoc e)
352       {}
353    }
354
355    private void configureTest(Properties JavaDoc properties, Field JavaDoc timezoneField, Field JavaDoc hourField,
356                               Field JavaDoc minuteField, String JavaDoc expectedTimezoneId, int expectedHour,
357                               int expectedMinute)
358    throws IOException JavaDoc, IllegalAccessException JavaDoc
359    {
360       rollover.configure(properties);
361       TimeZone JavaDoc timezone = (TimeZone JavaDoc) 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 JavaDoc time, SimpleDateFormat JavaDoc dateFormat, TimeZone JavaDoc defaultTimezone, TimeZone JavaDoc 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 JavaDoc
379    createCalendar(int hour, int minute)
380    {
381       Calendar JavaDoc 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 JavaDoc
389    createCalendar(int differenceSeconds)
390    {
391       Calendar JavaDoc calendar = Calendar.getInstance();
392       calendar.setTime(new Date JavaDoc(System.currentTimeMillis() + (differenceSeconds * 1000)));
393       return calendar;
394    }
395
396    private int
397    getHour(Calendar JavaDoc calendar)
398    {
399       return calendar.get(Calendar.HOUR_OF_DAY);
400    }
401
402    private int
403    getMinute(Calendar JavaDoc calendar)
404    {
405       return calendar.get(Calendar.MINUTE);
406    }
407 }
Popular Tags