@@ -391,7 +391,7 @@ private static byte[] recordToAvro(GenericRecord datum, Schema schema) throws IO
391391 }
392392
393393 @ Test
394- public void shouldRegisterAndGetOnlineFeaturesWithNotFound () {
394+ public void shouldGetOnlineFeaturesForSingleEntity () {
395395 // getOnlineFeatures Information
396396 String projectName = "default" ;
397397 String entityName = "driver_id" ;
@@ -447,7 +447,7 @@ public void shouldRegisterAndGetOnlineFeaturesWithNotFound() {
447447 }
448448
449449 @ Test
450- public void shouldRegisterCompoundEntityAndGetOnlineFeatures () {
450+ public void shouldGetOnlineFeaturesForCompoundEntity () {
451451 String projectName = "default" ;
452452 String driverEntityName = "driver_id" ;
453453 String merchantEntityName = "merchant_id" ;
@@ -511,6 +511,76 @@ public void shouldRegisterCompoundEntityAndGetOnlineFeatures() {
511511 assertEquals (expectedFieldValuesList , featureResponse .getFieldValuesList ());
512512 }
513513
514+ @ Test
515+ public void shouldReturnNotFoundForUpdatedType () {
516+ String projectName = "default" ;
517+ String entityName = "driver_id" ;
518+ String featureTableName = "rides" ;
519+
520+ ImmutableList <String > entities = ImmutableList .of (entityName );
521+ ImmutableMap <String , ValueProto .ValueType .Enum > features =
522+ ImmutableMap .of (
523+ feature1Reference .getName (),
524+ ValueProto .ValueType .Enum .INT64 ,
525+ feature2Reference .getName (),
526+ ValueProto .ValueType .Enum .STRING ,
527+ feature3Reference .getName (),
528+ ValueProto .ValueType .Enum .DOUBLE ,
529+ feature4Reference .getName (),
530+ ValueProto .ValueType .Enum .STRING );
531+
532+ TestUtils .applyFeatureTable (
533+ coreClient , projectName , featureTableName , entities , features , 7200 );
534+
535+ // Sleep is necessary to ensure caching (every 1s) of updated FeatureTable is done
536+ try {
537+ Thread .sleep (2000 );
538+ } catch (InterruptedException e ) {
539+ }
540+
541+ ValueProto .Value entityValue = ValueProto .Value .newBuilder ().setInt64Val (1 ).build ();
542+ // Instantiate EntityRows
543+ GetOnlineFeaturesRequestV2 .EntityRow entityRow1 =
544+ DataGenerator .createEntityRow (entityName , DataGenerator .createInt64Value (1 ), 100 );
545+ ImmutableList <GetOnlineFeaturesRequestV2 .EntityRow > entityRows = ImmutableList .of (entityRow1 );
546+
547+ // Instantiate FeatureReferences
548+ FeatureReferenceV2 featureReference =
549+ DataGenerator .createFeatureReference ("rides" , "trip_distance" );
550+
551+ ImmutableList <FeatureReferenceV2 > featureReferences = ImmutableList .of (featureReference );
552+
553+ // Build GetOnlineFeaturesRequestV2
554+ GetOnlineFeaturesRequestV2 onlineFeatureRequest =
555+ TestUtils .createOnlineFeatureRequest (projectName , featureReferences , entityRows );
556+ GetOnlineFeaturesResponse featureResponse =
557+ servingStub .getOnlineFeaturesV2 (onlineFeatureRequest );
558+
559+ ImmutableMap <String , ValueProto .Value > expectedValueMap =
560+ ImmutableMap .of (
561+ entityName ,
562+ entityValue ,
563+ FeatureV2 .getFeatureStringRef (featureReference ),
564+ DataGenerator .createEmptyValue ());
565+
566+ ImmutableMap <String , GetOnlineFeaturesResponse .FieldStatus > expectedStatusMap =
567+ ImmutableMap .of (
568+ entityName ,
569+ GetOnlineFeaturesResponse .FieldStatus .PRESENT ,
570+ FeatureV2 .getFeatureStringRef (featureReference ),
571+ GetOnlineFeaturesResponse .FieldStatus .NOT_FOUND );
572+
573+ GetOnlineFeaturesResponse .FieldValues expectedFieldValues =
574+ GetOnlineFeaturesResponse .FieldValues .newBuilder ()
575+ .putAllFields (expectedValueMap )
576+ .putAllStatuses (expectedStatusMap )
577+ .build ();
578+ ImmutableList <GetOnlineFeaturesResponse .FieldValues > expectedFieldValuesList =
579+ ImmutableList .of (expectedFieldValues );
580+
581+ assertEquals (expectedFieldValuesList , featureResponse .getFieldValuesList ());
582+ }
583+
514584 @ TestConfiguration
515585 public static class TestConfig {
516586 @ Bean
0 commit comments