def test_node_client_get_state_metadata(tempfile_path): # Add some node data node_storage = CrawlerNodeStorage(storage_filepath=tempfile_path) state_1 = create_random_mock_state(seed=1) state_2 = create_random_mock_state(seed=2) state_3 = create_random_mock_state(seed=3) state_list = [state_1, state_2, state_3] for state in state_list: state_dict = FleetSensor.abridged_state_details(state) node_storage.store_state_metadata(state=state_dict) node_db_client = CrawlerStorageClient(db_filepath=tempfile_path) result = node_db_client.get_previous_states_metadata(limit=len(state_list)) state_list.sort(key=lambda x: x.updated.epoch, reverse=True) # sorted by timestamp in descending order assert len(result) == len(state_list) # verify result # "result" of form of a list of state_info dictionaries for idx, value in enumerate(result): expected_row = convert_state_to_display_values(state_list[idx]) for info_idx, column in enumerate(CrawlerNodeStorage.STATE_DB_SCHEMA): assert value[ column[0]] == expected_row[info_idx], f"{column[0]} matches"
def test_storage_store_state_metadata(sqlite_connection): node_storage = CrawlerNodeStorage(storage_filepath=IN_MEMORY_FILEPATH) state = create_specific_mock_state() # Store state data node_storage.store_state_metadata(state=FleetSensor.abridged_state_details(state)) result = sqlite_connection.execute(f"SELECT * FROM {CrawlerNodeStorage.STATE_DB_NAME}").fetchall() assert len(result) == 1 for row in result: verify_mock_state_matches_row(state, row) # update state new_now = state.updated.add(minutes=5) updated_state = create_specific_mock_state(updated=new_now) node_storage.store_state_metadata(state=FleetSensor.abridged_state_details(updated_state)) # ensure same item gets updated result = sqlite_connection.execute(f"SELECT * FROM {CrawlerNodeStorage.STATE_DB_NAME}").fetchall() assert len(result) == 1 # state data is updated not added for row in result: verify_mock_state_matches_row(updated_state, row)
def test_storage_db_clear_not_metadata(sqlite_connection): node_storage = CrawlerNodeStorage(storage_filepath=IN_MEMORY_FILEPATH) # store some data node = create_random_mock_node() node_storage.store_node_metadata(node=node) state = create_specific_mock_state() node_storage.store_state_metadata(state=FleetSensor.abridged_state_details(state)) teacher_checksum = '0x123456789' node_storage.store_current_teacher(teacher_checksum) verify_all_db_tables(sqlite_connection, expect_empty=False) # only clear certificates data node_storage.clear(metadata=False, certificates=True) # db tables should not have been cleared verify_all_db_tables(sqlite_connection, expect_empty=False)