@@ -510,6 +510,100 @@ public void shouldRegisterCompoundEntityAndGetOnlineFeatures() {
510510 assertEquals (expectedFieldValuesList , featureResponse .getFieldValuesList ());
511511 }
512512
513+ @ Test
514+ public void shouldReturnCorrectRowCount () {
515+ // getOnlineFeatures Information
516+ String projectName = "default" ;
517+ String entityName = "driver_id" ;
518+ ValueProto .Value entityValue1 = ValueProto .Value .newBuilder ().setInt64Val (1 ).build ();
519+ ValueProto .Value entityValue2 = ValueProto .Value .newBuilder ().setInt64Val (2 ).build ();
520+
521+ // Instantiate EntityRows
522+ ServingAPIProto .GetOnlineFeaturesRequestV2 .EntityRow entityRow1 =
523+ DataGenerator .createEntityRow (entityName , entityValue1 , 100 );
524+ ServingAPIProto .GetOnlineFeaturesRequestV2 .EntityRow entityRow2 =
525+ DataGenerator .createEntityRow (entityName , entityValue2 , 100 );
526+ ImmutableList <ServingAPIProto .GetOnlineFeaturesRequestV2 .EntityRow > entityRows =
527+ ImmutableList .of (entityRow1 , entityRow2 );
528+
529+ // Instantiate FeatureReferences
530+ ServingAPIProto .FeatureReferenceV2 featureReference =
531+ DataGenerator .createFeatureReference ("rides" , "trip_cost" );
532+ ServingAPIProto .FeatureReferenceV2 notFoundFeatureReference =
533+ DataGenerator .createFeatureReference ("rides" , "trip_transaction" );
534+ ServingAPIProto .FeatureReferenceV2 emptyFeatureReference =
535+ DataGenerator .createFeatureReference ("rides" , "trip_empty" );
536+
537+ ImmutableList <ServingAPIProto .FeatureReferenceV2 > featureReferences =
538+ ImmutableList .of (featureReference , notFoundFeatureReference , emptyFeatureReference );
539+
540+ // Build GetOnlineFeaturesRequestV2
541+ ServingAPIProto .GetOnlineFeaturesRequestV2 onlineFeatureRequest =
542+ TestUtils .createOnlineFeatureRequest (projectName , featureReferences , entityRows );
543+ ServingAPIProto .GetOnlineFeaturesResponse featureResponse =
544+ servingStub .getOnlineFeaturesV2 (onlineFeatureRequest );
545+
546+ ImmutableMap <String , ValueProto .Value > expectedValueMap =
547+ ImmutableMap .of (
548+ entityName ,
549+ entityValue1 ,
550+ FeatureV2 .getFeatureStringRef (featureReference ),
551+ DataGenerator .createInt64Value (5 ),
552+ FeatureV2 .getFeatureStringRef (notFoundFeatureReference ),
553+ DataGenerator .createEmptyValue (),
554+ FeatureV2 .getFeatureStringRef (emptyFeatureReference ),
555+ DataGenerator .createEmptyValue ());
556+
557+ ImmutableMap <String , ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus > expectedStatusMap =
558+ ImmutableMap .of (
559+ entityName ,
560+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .PRESENT ,
561+ FeatureV2 .getFeatureStringRef (featureReference ),
562+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .PRESENT ,
563+ FeatureV2 .getFeatureStringRef (notFoundFeatureReference ),
564+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .NOT_FOUND ,
565+ FeatureV2 .getFeatureStringRef (emptyFeatureReference ),
566+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .NOT_FOUND );
567+
568+ ServingAPIProto .GetOnlineFeaturesResponse .FieldValues expectedFieldValues =
569+ ServingAPIProto .GetOnlineFeaturesResponse .FieldValues .newBuilder ()
570+ .putAllFields (expectedValueMap )
571+ .putAllStatuses (expectedStatusMap )
572+ .build ();
573+
574+ ImmutableMap <String , ValueProto .Value > expectedValueMap2 =
575+ ImmutableMap .of (
576+ entityName ,
577+ entityValue2 ,
578+ FeatureV2 .getFeatureStringRef (featureReference ),
579+ DataGenerator .createEmptyValue (),
580+ FeatureV2 .getFeatureStringRef (notFoundFeatureReference ),
581+ DataGenerator .createEmptyValue (),
582+ FeatureV2 .getFeatureStringRef (emptyFeatureReference ),
583+ DataGenerator .createEmptyValue ());
584+
585+ ImmutableMap <String , ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus > expectedStatusMap2 =
586+ ImmutableMap .of (
587+ entityName ,
588+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .PRESENT ,
589+ FeatureV2 .getFeatureStringRef (featureReference ),
590+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .NOT_FOUND ,
591+ FeatureV2 .getFeatureStringRef (notFoundFeatureReference ),
592+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .NOT_FOUND ,
593+ FeatureV2 .getFeatureStringRef (emptyFeatureReference ),
594+ ServingAPIProto .GetOnlineFeaturesResponse .FieldStatus .NOT_FOUND );
595+
596+ ServingAPIProto .GetOnlineFeaturesResponse .FieldValues expectedFieldValues2 =
597+ ServingAPIProto .GetOnlineFeaturesResponse .FieldValues .newBuilder ()
598+ .putAllFields (expectedValueMap2 )
599+ .putAllStatuses (expectedStatusMap2 )
600+ .build ();
601+ ImmutableList <ServingAPIProto .GetOnlineFeaturesResponse .FieldValues > expectedFieldValuesList =
602+ ImmutableList .of (expectedFieldValues , expectedFieldValues2 );
603+
604+ assertEquals (expectedFieldValuesList , featureResponse .getFieldValuesList ());
605+ }
606+
513607 @ TestConfiguration
514608 public static class TestConfig {
515609 @ Bean
0 commit comments