1717package feast .core .service ;
1818
1919import static org .hamcrest .MatcherAssert .assertThat ;
20+ import static org .hamcrest .Matchers .containsInAnyOrder ;
2021import static org .hamcrest .Matchers .hasSize ;
2122import static org .hamcrest .beans .HasPropertyWithValue .hasProperty ;
2223import static org .hamcrest .core .Is .isA ;
@@ -73,7 +74,21 @@ public void setUp() {
7374 feastProperties = new FeastProperties ();
7475 JobProperties jobProperties = new JobProperties ();
7576 jobProperties .setJobUpdateTimeoutSeconds (5 );
77+
78+ JobProperties .CoordinatorProperties .FeatureSetSelector selector =
79+ new JobProperties .CoordinatorProperties .FeatureSetSelector ();
80+ selector .setName ("fs*" );
81+ selector .setProject ("*" );
82+
83+ JobProperties .CoordinatorProperties coordinatorProperties =
84+ new JobProperties .CoordinatorProperties ();
85+ coordinatorProperties .setFeatureSetSelector (ImmutableList .of (selector ));
86+ coordinatorProperties .setWhitelistedStores (
87+ ImmutableList .of ("test-store" , "test" , "test-1" , "test-2" , "normal-store" ));
88+
89+ jobProperties .setCoordinator (coordinatorProperties );
7690 feastProperties .setJobs (jobProperties );
91+
7792 TestUtil .setupAuditLogger ();
7893
7994 JobManager jobManager = mock (JobManager .class );
@@ -136,8 +151,8 @@ public void shouldGroupJobsBySource() {
136151 Source source1 = DataGenerator .createSource ("servers:9092" , "topic" );
137152 Source source2 = DataGenerator .createSource ("others.servers:9092" , "topic" );
138153
139- FeatureSet featureSet1 = DataGenerator .createFeatureSet (source1 , "project1" , "features1 " );
140- FeatureSet featureSet2 = DataGenerator .createFeatureSet (source2 , "project1" , "features2 " );
154+ FeatureSet featureSet1 = DataGenerator .createFeatureSet (source1 , "project1" , "fs1 " );
155+ FeatureSet featureSet2 = DataGenerator .createFeatureSet (source2 , "project1" , "fs2 " );
141156
142157 when (specService .listFeatureSets (
143158 Filter .newBuilder ().setFeatureSetName ("*" ).setProject ("project1" ).build ()))
@@ -170,8 +185,8 @@ public void shouldUseStoreSubscriptionToMapStore() {
170185 Source source1 = DataGenerator .createSource ("servers:9092" , "topic" );
171186 Source source2 = DataGenerator .createSource ("other.servers:9092" , "topic" );
172187
173- FeatureSet featureSet1 = DataGenerator .createFeatureSet (source1 , "default" , "feature1 " );
174- FeatureSet featureSet2 = DataGenerator .createFeatureSet (source2 , "default" , "feature2 " );
188+ FeatureSet featureSet1 = DataGenerator .createFeatureSet (source1 , "default" , "fs1 " );
189+ FeatureSet featureSet2 = DataGenerator .createFeatureSet (source2 , "default" , "fs2 " );
175190
176191 when (specService .listFeatureSets (
177192 Filter .newBuilder ().setFeatureSetName ("features1" ).setProject ("*" ).build ()))
@@ -268,7 +283,7 @@ public void shouldCreateJobPerStore() throws InvalidProtocolBufferException {
268283
269284 Source source = DataGenerator .createSource ("servers:9092" , "topic" );
270285
271- FeatureSet featureSet = DataGenerator .createFeatureSet (source , "default" , "features1 " );
286+ FeatureSet featureSet = DataGenerator .createFeatureSet (source , "default" , "fs1 " );
272287
273288 when (specService .listFeatureSets (
274289 Filter .newBuilder ().setFeatureSetName ("*" ).setProject ("*" ).build ()))
@@ -310,7 +325,6 @@ public void shouldCloneRunningJobOnUpgrade() throws InvalidProtocolBufferExcepti
310325 Store store2 =
311326 DataGenerator .createStore (
312327 "test-2" , Store .StoreType .REDIS , ImmutableList .of (Triple .of ("*" , "*" , false )));
313- ;
314328
315329 Source source = DataGenerator .createSource ("servers:9092" , "topic" );
316330
@@ -333,4 +347,62 @@ public void shouldCloneRunningJobOnUpgrade() throws InvalidProtocolBufferExcepti
333347 assertThat (jobTasks , hasSize (1 ));
334348 assertThat (jobTasks , hasItem (isA (CreateJobTask .class )));
335349 }
350+
351+ @ Test
352+ @ SneakyThrows
353+ public void shouldSelectOnlyFeatureSetsThatJobManagerSubscribedTo () {
354+ Store store = DataGenerator .getDefaultStore ();
355+ Source source = DataGenerator .getDefaultSource ();
356+
357+ FeatureSet featureSet1 = DataGenerator .createFeatureSet (source , "default" , "fs1" );
358+ FeatureSet featureSet2 = DataGenerator .createFeatureSet (source , "project" , "fs3" );
359+ FeatureSet featureSet3 = DataGenerator .createFeatureSet (source , "default" , "not-fs" );
360+
361+ when (specService .listFeatureSets (
362+ Filter .newBuilder ().setFeatureSetName ("*" ).setProject ("*" ).build ()))
363+ .thenReturn (
364+ ListFeatureSetsResponse .newBuilder ()
365+ .addAllFeatureSets (Lists .newArrayList (featureSet1 , featureSet2 , featureSet3 ))
366+ .build ());
367+
368+ List <FeatureSet > featureSetsForStore = jcsWithConsolidation .getFeatureSetsForStore (store );
369+ assertThat (featureSetsForStore , containsInAnyOrder (featureSet1 , featureSet2 ));
370+ }
371+
372+ @ Test
373+ @ SneakyThrows
374+ public void shouldSelectOnlyStoresThatNotBlacklisted () {
375+ Store store1 =
376+ DataGenerator .createStore (
377+ "normal-store" ,
378+ Store .StoreType .REDIS ,
379+ ImmutableList .of (Triple .of ("project1" , "*" , false )));
380+ Store store2 =
381+ DataGenerator .createStore (
382+ "blacklisted-store" ,
383+ Store .StoreType .REDIS ,
384+ ImmutableList .of (Triple .of ("project2" , "*" , false )));
385+
386+ Source source1 = DataGenerator .createSource ("source-1" , "topic" );
387+ Source source2 = DataGenerator .createSource ("source-2" , "topic" );
388+
389+ FeatureSet featureSet1 = DataGenerator .createFeatureSet (source1 , "default" , "fs1" );
390+ FeatureSet featureSet2 = DataGenerator .createFeatureSet (source2 , "project" , "fs3" );
391+
392+ when (specService .listStores (any ()))
393+ .thenReturn (ListStoresResponse .newBuilder ().addStore (store1 ).addStore (store2 ).build ());
394+
395+ when (specService .listFeatureSets (
396+ Filter .newBuilder ().setProject ("project1" ).setFeatureSetName ("*" ).build ()))
397+ .thenReturn (ListFeatureSetsResponse .newBuilder ().addFeatureSets (featureSet1 ).build ());
398+
399+ when (specService .listFeatureSets (
400+ Filter .newBuilder ().setProject ("project2" ).setFeatureSetName ("*" ).build ()))
401+ .thenReturn (ListFeatureSetsResponse .newBuilder ().addFeatureSets (featureSet2 ).build ());
402+
403+ ArrayList <Pair <Source , Set <Store >>> pairs =
404+ Lists .newArrayList (jcsWithConsolidation .getSourceToStoreMappings ());
405+
406+ assertThat (pairs , containsInAnyOrder (Pair .of (source1 , ImmutableSet .of (store1 ))));
407+ }
336408}
0 commit comments