1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.regionserver.compactions;
19
20 import static org.junit.Assert.assertEquals;
21
22 import com.google.common.collect.Lists;
23 import java.util.Date;
24 import java.util.List;
25 import java.util.TimeZone;
26 import org.apache.hadoop.hbase.testclassification.RegionServerTests;
27 import org.apache.hadoop.hbase.testclassification.SmallTests;
28 import org.apache.hadoop.hbase.util.EnvironmentEdge;
29 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
30 import org.junit.Test;
31 import org.junit.experimental.categories.Category;
32
33 @Category({RegionServerTests.class, SmallTests.class})
34 public class TestCurrentHourProvider {
35
36 private static final List<String> ZONE_IDS = Lists.newArrayList("UTC", "US/Pacific", "Etc/GMT+8");
37
38
39
40
41
42
43
44
45
46 @Test
47 public void testWithEnvironmentEdge() {
48
49 for (String zoneID : ZONE_IDS) {
50 TimeZone timezone = TimeZone.getTimeZone(zoneID);
51 TimeZone.setDefault(timezone);
52
53
54 long deltaFor11 = TimeZone.getDefault().getRawOffset() - 28800000;
55 final long timeFor11 = 1597895561000L - deltaFor11;
56 EnvironmentEdgeManager.injectEdge(new EnvironmentEdge() {
57 @Override
58 public long currentTime() {
59 return timeFor11;
60 }
61 });
62 CurrentHourProvider.advanceTick();
63 int hour11 = CurrentHourProvider.getCurrentHour();
64 if (TimeZone.getDefault().inDaylightTime(new Date(timeFor11))) {
65 hour11 = CurrentHourProvider.getCurrentHour() - 1;
66 }
67 assertEquals(11, hour11);
68
69
70 long deltaFor15 = TimeZone.getDefault().getRawOffset() - 28800000;
71 final long timeFor15 = 1597907081000L - deltaFor15;
72 EnvironmentEdgeManager.injectEdge(new EnvironmentEdge() {
73 @Override
74 public long currentTime() {
75 return timeFor15;
76 }
77 });
78 CurrentHourProvider.advanceTick();
79 int hour15 = CurrentHourProvider.getCurrentHour();
80 if (TimeZone.getDefault().inDaylightTime(new Date(timeFor15))) {
81 hour15 = CurrentHourProvider.getCurrentHour() - 1;
82 }
83 assertEquals(15, hour15);
84 }
85 }
86 }