001 package org.apache.jcs.utils.key;
002
003 import java.text.ParseException;
004 import java.util.Calendar;
005 import java.util.Date;
006
007 import junit.framework.TestCase;
008
009 import org.apache.jcs.utils.date.DateFormatter;
010 import org.apache.jcs.utils.timing.SleepUtil;
011
012 /**
013 * Tests for the Key Generator Util.
014 */
015 public class KeyGeneratorUtilUnitTest
016 extends TestCase
017 {
018 /**
019 * Creates a query id. Verify that we lead with the system lead.
020 */
021 public void testGetQueryId_SytemLeadNumber_Good()
022 {
023 // SETUP
024 String lead = "9";
025 System.setProperty( KeyGeneratorUtil.KEY_LEAD_NUMBER_PROPERTY_NAME, lead );
026 // have to force this since it might have already been loaded.
027 KeyGeneratorUtil.setLeadFromSystemProperty();
028 String expectedDate = DateFormatter.getDddHHmm( new Date() );
029
030 // DO WORK
031 String result = KeyGeneratorUtil.generateRequestId();
032
033 // VERIFY
034 assertNotNull( "We should have a query id.", result );
035 assertTrue( "Should have the input.", result.indexOf( String.valueOf( expectedDate ) ) != -1 );
036 assertEquals( "Wrong lead", lead, result.substring( 0, 1 ) );
037 }
038
039 /**
040 * Creates a query id. Verify that we lead with the default if the system lead is junk.
041 */
042 public void testGetQueryId_SytemLeadNumber_Nan()
043 {
044 // SETUP
045 KeyGeneratorUtil.leadNumber = KeyGeneratorUtil.DEFAULT_LEAD_NUMBER;
046 String lead = "afdsafsadf";
047 System.setProperty( KeyGeneratorUtil.KEY_LEAD_NUMBER_PROPERTY_NAME, lead );
048 // have to force this since it might have already been loaded.
049 KeyGeneratorUtil.setLeadFromSystemProperty();
050 String expectedDate = DateFormatter.getDddHHmm( new Date() );
051
052 // DO WORK
053 String result = KeyGeneratorUtil.generateRequestId();
054
055 // VERIFY
056 assertNotNull( "We should have a query id.", result );
057 assertTrue( "Should have the input.", result.indexOf( String.valueOf( expectedDate ) ) != -1 );
058 assertEquals( "Wrong lead", String.valueOf( KeyGeneratorUtil.DEFAULT_LEAD_NUMBER ), result.substring( 0, 1 ) );
059 }
060
061 /**
062 * Creates a query id.
063 */
064 public void testGetQueryId()
065 {
066 // SETUP
067 String expectedDate = DateFormatter.getDddHHmm( new Date() );
068
069 // DO WORK
070 String result = KeyGeneratorUtil.generateRequestId();
071
072 // VERIFY
073 assertNotNull( "We should have a query id.", result );
074 assertTrue( "Should have the input.", result.indexOf( String.valueOf( expectedDate ) ) != -1 );
075 }
076
077 /**
078 * Verify that we get the right date out. This has just the leading 9 and the date.
079 */
080 public void testGetDateFromQueryId_exact()
081 {
082 Calendar cal = Calendar.getInstance();
083 cal.set( Calendar.HOUR_OF_DAY, 13 );
084 cal.set( Calendar.MINUTE, 59 );
085
086 String inputDate = DateFormatter.getDddHHmm( cal.getTime() );
087
088 // DO WORK
089 try
090 {
091 Date result = KeyGeneratorUtil.getDateOfShopFromRequestId( "9" + inputDate );
092
093 // VERIFY
094 Calendar resultCal = Calendar.getInstance();
095 resultCal.setTime( result );
096
097 assertEquals( "Wrong day of year.", cal.get( Calendar.DAY_OF_YEAR ), resultCal.get( Calendar.DAY_OF_YEAR ) );
098 assertEquals( "Wrong hour.", cal.get( Calendar.HOUR_OF_DAY ), resultCal.get( Calendar.HOUR_OF_DAY ) );
099 assertEquals( "Wrong minute.", cal.get( Calendar.MINUTE ), resultCal.get( Calendar.MINUTE ) );
100 }
101 catch ( ParseException e )
102 {
103 fail( e.getMessage() );
104 }
105 }
106
107 /**
108 * Verify that we get the right date out. This has the leading 9, the date, and more
109 */
110 public void testGetDateFromQueryId_over()
111 {
112 Calendar cal = Calendar.getInstance();
113 cal.set( Calendar.HOUR_OF_DAY, 13 );
114 cal.set( Calendar.MINUTE, 59 );
115
116 String inputDate = DateFormatter.getDddHHmm( cal.getTime() );
117
118 // DO WORK
119 try
120 {
121 Date result = KeyGeneratorUtil.getDateOfShopFromRequestId( "9" + inputDate + "542143211242134" );
122
123 // VERIFY
124 Calendar resultCal = Calendar.getInstance();
125 resultCal.setTime( result );
126
127 assertEquals( "Wrong day of year.", cal.get( Calendar.DAY_OF_YEAR ), resultCal.get( Calendar.DAY_OF_YEAR ) );
128 assertEquals( "Wrong hour.", cal.get( Calendar.HOUR_OF_DAY ), resultCal.get( Calendar.HOUR_OF_DAY ) );
129 assertEquals( "Wrong minute.", cal.get( Calendar.MINUTE ), resultCal.get( Calendar.MINUTE ) );
130 }
131 catch ( ParseException e )
132 {
133 fail( e.getMessage() );
134 }
135 }
136
137 /**
138 * Verify that we get an error if it is too small
139 */
140 public void testGetDateFromQueryId_tooSmall()
141 {
142 // DO WORK
143 try
144 {
145 KeyGeneratorUtil.getDateOfShopFromRequestId( "9876" );
146
147 fail( "We should have an error." );
148 }
149 catch ( ParseException e )
150 {
151 // expected
152 assertTrue( "Missing string from error message.", e.getMessage().indexOf( "9876" ) != -1 );
153 }
154 }
155
156 /**
157 * Verify that we get an error if it is null
158 */
159 public void testGetDateFromQueryId_null()
160 {
161 // DO WORK
162 try
163 {
164 KeyGeneratorUtil.getDateOfShopFromRequestId( null );
165
166 fail( "We should have an error." );
167 }
168 catch ( ParseException e )
169 {
170 // expected
171 assertTrue( "Missing string from error message.", e.getMessage().indexOf( "null" ) != -1 );
172 }
173 }
174
175 /**
176 * Reset and verify that we get 1;
177 */
178 public void testGetNextRequestCounter_simple()
179 {
180 // SETUP
181 KeyGeneratorUtil.resetCounter();
182
183 // DO WORK
184 int result = KeyGeneratorUtil.getNextRequestCounter();
185
186 // VERIFY
187 assertEquals( "Wrong counter value.", 1, result );
188 }
189
190 /**
191 * Reset, call twice, and verify that we get 2;
192 */
193 public void testGetNextRequestCounter_twice()
194 {
195 // SETUP
196 KeyGeneratorUtil.resetCounter();
197
198 // DO WORK
199 KeyGeneratorUtil.getNextRequestCounter();
200 int result = KeyGeneratorUtil.getNextRequestCounter();
201
202 // VERIFY
203 assertEquals( "Wrong counter value.", 2, result );
204 }
205
206 /**
207 * Verify that the counter is reset if we set the interval vey low.
208 */
209 public void testGetNextRequestCounter_delay()
210 {
211 // SETUP
212 long interval = 10;
213 KeyGeneratorUtil.counterResetIntervalMillis = interval;
214 KeyGeneratorUtil.resetCounter();
215
216 // DO WORK
217 KeyGeneratorUtil.getNextRequestCounter();
218
219 SleepUtil.sleepAtLeast( interval * 2 );
220
221 int result = KeyGeneratorUtil.getNextRequestCounter();
222
223 // VERIFY
224 assertEquals( "Wrong counter value.", 1, result );
225 }
226 }