1+ package feast .serving .service ;
2+
3+ import static org .hamcrest .Matchers .equalTo ;
4+ import static org .junit .Assert .assertNotNull ;
5+ import static org .junit .Assert .assertThat ;
6+ import static org .mockito .ArgumentMatchers .any ;
7+ import static org .mockito .Mockito .mock ;
8+ import static org .mockito .Mockito .times ;
9+ import static org .mockito .Mockito .verify ;
10+ import static org .mockito .Mockito .when ;
11+
12+ import com .google .common .testing .FakeTicker ;
13+ import feast .specs .EntitySpecProto .EntitySpec ;
14+ import feast .specs .FeatureSpecProto .FeatureSpec ;
15+ import feast .specs .StorageSpecProto .StorageSpec ;
16+ import java .util .Collections ;
17+ import java .util .HashMap ;
18+ import java .util .Map ;
19+ import java .util .concurrent .TimeUnit ;
20+ import org .junit .Before ;
21+ import org .junit .Test ;
22+
23+ public class CachedSpecStorageTest {
24+
25+ private CoreService coreService ;
26+ private CachedSpecStorage cachedSpecStorage ;
27+
28+ @ Before
29+ public void setUp () throws Exception {
30+ coreService = mock (CoreService .class );
31+ cachedSpecStorage = new CachedSpecStorage (coreService );
32+ }
33+
34+ @ Test
35+ public void testPopulateCache () {
36+ Map <String , FeatureSpec > featureSpecMap = new HashMap <>();
37+ featureSpecMap .put ("feature_1" , mock (FeatureSpec .class ));
38+
39+ Map <String , StorageSpec > storageSpecMap = new HashMap <>();
40+ storageSpecMap .put ("storage_1" , mock (StorageSpec .class ));
41+
42+ Map <String , EntitySpec > entitySpecMap = new HashMap <>();
43+ entitySpecMap .put ("entity_1" , mock (EntitySpec .class ));
44+
45+ when (coreService .getAllFeatureSpecs ()).thenReturn (featureSpecMap );
46+ when (coreService .getAllEntitySpecs ()).thenReturn (entitySpecMap );
47+ when (coreService .getAllStorageSpecs ()).thenReturn (storageSpecMap );
48+
49+ cachedSpecStorage .populateCache ();
50+ Map <String , FeatureSpec > result =
51+ cachedSpecStorage .getFeatureSpecs (Collections .singletonList ("feature_1" ));
52+ Map <String , StorageSpec > result1 =
53+ cachedSpecStorage .getStorageSpecs (Collections .singletonList ("storage_1" ));
54+ Map <String , EntitySpec > result2 =
55+ cachedSpecStorage .getEntitySpecs (Collections .singletonList ("entity_1" ));
56+
57+ assertThat (result .size (), equalTo (1 ));
58+ assertThat (result1 .size (), equalTo (1 ));
59+ assertThat (result2 .size (), equalTo (1 ));
60+
61+ verify (coreService , times (0 )).getFeatureSpecs (any (Iterable .class ));
62+ verify (coreService , times (0 )).getStorageSpecs (any (Iterable .class ));
63+ verify (coreService , times (0 )).getEntitySpecs (any (Iterable .class ));
64+ }
65+
66+ @ Test
67+ public void reloadFailureShouldReturnOldValue () {
68+ Map <String , FeatureSpec > featureSpecMap = new HashMap <>();
69+ featureSpecMap .put ("feature_1" , mock (FeatureSpec .class ));
70+
71+ Map <String , StorageSpec > storageSpecMap = new HashMap <>();
72+ storageSpecMap .put ("storage_1" , mock (StorageSpec .class ));
73+
74+ Map <String , EntitySpec > entitySpecMap = new HashMap <>();
75+ entitySpecMap .put ("entity_1" , mock (EntitySpec .class ));
76+
77+ when (coreService .getAllFeatureSpecs ()).thenReturn (featureSpecMap );
78+ when (coreService .getFeatureSpecs (any (Iterable .class ))).thenThrow (new RuntimeException ("error" ));
79+ when (coreService .getAllEntitySpecs ()).thenReturn (entitySpecMap );
80+ when (coreService .getEntitySpecs (any (Iterable .class ))).thenThrow (new RuntimeException ("error" ));
81+ when (coreService .getAllStorageSpecs ()).thenReturn (storageSpecMap );
82+ when (coreService .getStorageSpecs (any (Iterable .class ))).thenThrow (new RuntimeException ("error" ));
83+
84+ cachedSpecStorage .populateCache ();
85+ Map <String , FeatureSpec > result =
86+ cachedSpecStorage .getFeatureSpecs (Collections .singletonList ("feature_1" ));
87+ Map <String , StorageSpec > result1 =
88+ cachedSpecStorage .getStorageSpecs (Collections .singletonList ("storage_1" ));
89+ Map <String , EntitySpec > result2 =
90+ cachedSpecStorage .getEntitySpecs (Collections .singletonList ("entity_1" ));
91+
92+ assertThat (result .size (), equalTo (1 ));
93+ assertThat (result1 .size (), equalTo (1 ));
94+ assertThat (result2 .size (), equalTo (1 ));
95+ verify (coreService , times (0 )).getFeatureSpecs (any (Iterable .class ));
96+ verify (coreService , times (0 )).getStorageSpecs (any (Iterable .class ));
97+ verify (coreService , times (0 )).getEntitySpecs (any (Iterable .class ));
98+
99+ result = cachedSpecStorage .getFeatureSpecs (Collections .singletonList ("feature_1" ));
100+ result1 = cachedSpecStorage .getStorageSpecs (Collections .singletonList ("storage_1" ));
101+ result2 = cachedSpecStorage .getEntitySpecs (Collections .singletonList ("entity_1" ));
102+ assertThat (result .size (), equalTo (1 ));
103+ assertThat (result1 .size (), equalTo (1 ));
104+ assertThat (result2 .size (), equalTo (1 ));
105+ }
106+ }
0 commit comments