This is a provider-independent test suite for reading and writing from the online store, to be used by provider-specific tests. The specified feature view must have exactly two features: one named 'lat' with type Float32 and one with name 'lon' with type String.
(
store: FeatureStore, view_name: str, feature_service_name: Optional[str] = None
)
| 8 | |
| 9 | |
| 10 | def basic_rw_test( |
| 11 | store: FeatureStore, view_name: str, feature_service_name: Optional[str] = None |
| 12 | ) -> None: |
| 13 | """ |
| 14 | This is a provider-independent test suite for reading and writing from the online store, to |
| 15 | be used by provider-specific tests. |
| 16 | |
| 17 | The specified feature view must have exactly two features: one named 'lat' with type Float32 |
| 18 | and one with name 'lon' with type String. |
| 19 | """ |
| 20 | table = store.get_feature_view(name=view_name) |
| 21 | |
| 22 | provider = store._get_provider() |
| 23 | |
| 24 | entity_key = EntityKeyProto( |
| 25 | join_keys=["driver_id"], entity_values=[ValueProto(int64_val=1)] |
| 26 | ) |
| 27 | |
| 28 | def _driver_rw_test(event_ts, created_ts, write, expect_read): |
| 29 | """A helper function to write values and read them back""" |
| 30 | write_lat, write_lon = write |
| 31 | expect_lat, expect_lon = expect_read |
| 32 | provider.online_write_batch( |
| 33 | config=store.config, |
| 34 | table=table, |
| 35 | data=[ |
| 36 | ( |
| 37 | entity_key, |
| 38 | { |
| 39 | "lat": ValueProto(double_val=write_lat), |
| 40 | "lon": ValueProto(string_val=write_lon), |
| 41 | }, |
| 42 | event_ts, |
| 43 | created_ts, |
| 44 | ) |
| 45 | ], |
| 46 | progress=None, |
| 47 | ) |
| 48 | |
| 49 | if feature_service_name: |
| 50 | entity_dict = {"driver_id": 1} |
| 51 | feature_service = store.get_feature_service(feature_service_name) |
| 52 | features = store.get_online_features( |
| 53 | features=feature_service, entity_rows=[entity_dict] |
| 54 | ).to_dict() |
| 55 | assert len(features["driver_id"]) == 1 |
| 56 | assert features["lon"][0] == expect_lon |
| 57 | assert abs(features["lat"][0] - expect_lat) < 1e-6 |
| 58 | else: |
| 59 | read_rows = provider.online_read( |
| 60 | config=store.config, table=table, entity_keys=[entity_key] |
| 61 | ) |
| 62 | assert len(read_rows) == 1 |
| 63 | _, val = read_rows[0] |
| 64 | assert val["lon"].string_val == expect_lon |
| 65 | assert abs(val["lat"].double_val - expect_lat) < 1e-6 |
| 66 | |
| 67 | """ 1. Basic test: write value, read it back """ |
no test coverage detected