22
33import org .junit .Test ;
44
5- import java .util . Calendar ;
6- import java .util . GregorianCalendar ;
5+ import java .time . ZoneId ;
6+ import java .time . ZonedDateTime ;
77import java .util .HashMap ;
88import java .util .Map ;
99
1313
1414public class ImpressionCounterTest {
1515
16+ private long makeTimestamp (int year , int month , int day , int hour , int minute , int second ) {
17+ return ZonedDateTime .of (year , month , day , hour , minute , second , 0 , ZoneId .of ("UTC" )).toInstant ().toEpochMilli ();
18+ }
19+
1620 @ Test
1721 public void testTruncateTimeFrame () {
18- assertThat (ImpressionCounter .truncateTimeframe (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 53 , 12 ). getTimeInMillis ( )),
19- is (equalTo (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 0 , 0 ). getTimeInMillis ( ))));
20- assertThat (ImpressionCounter .truncateTimeframe (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 0 , 0 ). getTimeInMillis ( )),
21- is (equalTo (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 0 , 0 ). getTimeInMillis ( ))));
22- assertThat (ImpressionCounter .truncateTimeframe (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 53 , 0 ). getTimeInMillis ( )),
23- is (equalTo (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 0 , 0 ). getTimeInMillis ( ))));
24- assertThat (ImpressionCounter .truncateTimeframe (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 0 , 12 ). getTimeInMillis ( )),
25- is (equalTo (new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 0 , 0 ). getTimeInMillis ( ))));
26- assertThat (ImpressionCounter .truncateTimeframe (new GregorianCalendar (1970 , Calendar . JANUARY , 0 , 0 , 0 , 0 ). getTimeInMillis ( )),
27- is (equalTo (new GregorianCalendar (1970 , Calendar . JANUARY , 0 , 0 , 0 , 0 ). getTimeInMillis ( ))));
22+ assertThat (ImpressionCounter .truncateTimeframe (makeTimestamp (2020 , 9 , 2 , 10 , 53 , 12 )),
23+ is (equalTo (makeTimestamp (2020 , 9 , 2 , 10 , 0 , 0 ))));
24+ assertThat (ImpressionCounter .truncateTimeframe (makeTimestamp (2020 , 9 , 2 , 10 , 0 , 0 )),
25+ is (equalTo (makeTimestamp (2020 , 9 , 2 , 10 , 0 , 0 ))));
26+ assertThat (ImpressionCounter .truncateTimeframe (makeTimestamp (2020 , 9 , 2 , 10 , 53 , 0 )),
27+ is (equalTo (makeTimestamp (2020 , 9 , 2 , 10 , 0 , 0 ))));
28+ assertThat (ImpressionCounter .truncateTimeframe (makeTimestamp (2020 , 9 , 2 , 10 , 0 , 12 )),
29+ is (equalTo (makeTimestamp (2020 , 9 , 2 , 10 , 0 , 0 ))));
30+ assertThat (ImpressionCounter .truncateTimeframe (makeTimestamp (1970 , 1 , 1 , 0 , 0 , 0 )),
31+ is (equalTo (makeTimestamp (1970 , 1 , 1 , 0 , 0 , 0 ))));
2832 }
2933
3034 @ Test
3135 public void testMakeKey () {
32- assertThat (ImpressionCounter .makeKey ("someFeature" , new GregorianCalendar (2020 , Calendar .SEPTEMBER , 2 , 10 , 5 , 23 ).getTimeInMillis ()),
33- is (equalTo ("someFeature::1599051600000" )));
34- assertThat (ImpressionCounter .makeKey ("" , new GregorianCalendar (2020 , Calendar .SEPTEMBER , 2 , 10 , 5 , 23 ).getTimeInMillis ()),
35- is (equalTo ("::1599051600000" )));
36- assertThat (ImpressionCounter .makeKey (null , new GregorianCalendar (2020 , Calendar .SEPTEMBER , 2 , 10 , 5 , 23 ).getTimeInMillis ()),
37- is (equalTo ("null::1599051600000" )));
36+ long targetTZ = makeTimestamp (2020 , 9 , 2 , 10 , 0 , 0 );
37+ assertThat (ImpressionCounter .makeKey ("someFeature" , makeTimestamp (2020 , 9 , 2 , 10 , 5 , 23 )),
38+ is (equalTo ("someFeature::" + targetTZ )));
39+ assertThat (ImpressionCounter .makeKey ("" , makeTimestamp (2020 , 9 , 2 , 10 , 5 , 23 )),
40+ is (equalTo ("::" + targetTZ )));
41+ assertThat (ImpressionCounter .makeKey (null , makeTimestamp (2020 , 9 , 2 , 10 , 5 , 23 )),
42+ is (equalTo ("null::" + targetTZ )));
3843 assertThat (ImpressionCounter .makeKey (null , 0L ), is (equalTo ("null::0" )));
3944 }
4045
4146 @ Test
4247 public void testBasicUsage () {
4348 final ImpressionCounter counter = new ImpressionCounter ();
44- final long timestamp = new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 10 , 12 ). getTimeInMillis ( );
49+ final long timestamp = makeTimestamp (2020 , 9 , 2 , 10 , 10 , 12 );
4550 counter .inc ("feature1" , timestamp , 1 );
4651 counter .inc ("feature1" , timestamp + 1 , 1 );
4752 counter .inc ("feature1" , timestamp + 2 , 1 );
@@ -53,7 +58,7 @@ public void testBasicUsage() {
5358 assertThat (counted .get (ImpressionCounter .makeKey ("feature2" , timestamp )), is (equalTo (4 )));
5459 assertThat (counter .popAll ().size (), is (equalTo (0 )));
5560
56- final long nextHourTimestamp = new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 11 , 10 , 12 ). getTimeInMillis ( );
61+ final long nextHourTimestamp = makeTimestamp (2020 , 9 , 2 , 11 , 10 , 12 );
5762 counter .inc ("feature1" , timestamp , 1 );
5863 counter .inc ("feature1" , timestamp + 1 , 1 );
5964 counter .inc ("feature1" , timestamp + 2 , 1 );
@@ -76,8 +81,8 @@ public void testBasicUsage() {
7681 @ Test
7782 public void manyConcurrentCalls () throws InterruptedException {
7883 final int iterations = 10000000 ;
79- final long timestamp = new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 10 , 10 , 12 ). getTimeInMillis ( );
80- final long nextHourTimestamp = new GregorianCalendar (2020 , Calendar . SEPTEMBER , 2 , 11 , 10 , 12 ). getTimeInMillis ( );
84+ final long timestamp = makeTimestamp (2020 , 9 , 2 , 10 , 10 , 12 );
85+ final long nextHourTimestamp = makeTimestamp (2020 , 9 , 2 , 11 , 10 , 12 );
8186 ImpressionCounter counter = new ImpressionCounter ();
8287 Thread t1 = new Thread (() -> {
8388 int times = iterations ;
0 commit comments