def test_manager_remove_invalid(tests_manager, schemaspace_location): # Ensure invalid metadata file isn't validated and is removed. create_instance(tests_manager.metadata_store, schemaspace_location, "remove_invalid", invalid_metadata_json) metadata_name = "remove_invalid" tests_manager.remove(metadata_name) # Verify removal using metadata_store with pytest.raises(MetadataNotFoundError): tests_manager.metadata_store.fetch_instances(metadata_name)
def tests_manager(jp_environ, schemaspace_location, request): metadata_mgr = MetadataManager(schemaspace=METADATA_TEST_SCHEMASPACE, metadata_store_class=request.param) store_mgr = metadata_mgr.metadata_store create_instance(store_mgr, schemaspace_location, "valid", valid_metadata_json) create_instance(store_mgr, schemaspace_location, "another", another_metadata_json) create_instance(store_mgr, schemaspace_location, "invalid", invalid_metadata_json) create_instance(store_mgr, schemaspace_location, "bad", invalid_json) create_instance(store_mgr, schemaspace_location, "invalid_schema_name", invalid_schema_name_json) return metadata_mgr
def test_cache_disabled(tests_manager, schemaspace_location): FileMetadataCache.clear_instance() test_items = OrderedDict({"a": 3, "b": 4, "c": 5, "d": 6, "e": 7}) test_resources = {} test_content = {} # Setup test data for name, number in test_items.items(): content = copy.deepcopy(valid_metadata_json) content["display_name"] = name content["metadata"]["number_range_test"] = number resource = create_instance(tests_manager.metadata_store, schemaspace_location, name, content) test_resources[name] = resource test_content[name] = content # Add initial entries cache = FileMetadataCache.instance(max_size=3, enabled=False) assert hasattr(cache, "observer") is False assert hasattr(cache, "observed_dirs") is False for name in test_items: # Add the items to the cache cache.add_item(test_resources[name], test_content[name]) assert len(cache) == 0 assert cache.trims == 0 assert cache.get_item(test_resources.get("a")) is None assert cache.get_item(test_resources.get("b")) is None assert cache.get_item(test_resources.get("c")) is None assert cache.get_item(test_resources.get("d")) is None assert cache.get_item(test_resources.get("e")) is None assert cache.misses == 0 assert cache.hits == 0
def test_cache_ops(tests_manager, schemaspace_location): FileMetadataCache.clear_instance() test_items = OrderedDict({"a": 3, "b": 4, "c": 5, "d": 6, "e": 7}) test_resources = {} test_content = {} # Setup test data for name, number in test_items.items(): content = copy.deepcopy(valid_metadata_json) content["display_name"] = name content["metadata"]["number_range_test"] = number resource = create_instance(tests_manager.metadata_store, schemaspace_location, name, content) test_resources[name] = resource test_content[name] = content # Add initial entries cache = FileMetadataCache.instance(max_size=3) for name in test_items: # Add the items to the cache cache.add_item(test_resources[name], test_content[name]) assert len(cache) == 3 assert cache.trims == 2 assert cache.get_item(test_resources.get("a")) is None assert cache.get_item(test_resources.get("b")) is None assert cache.get_item(test_resources.get("c")) is not None assert cache.get_item(test_resources.get("d")) is not None assert cache.get_item(test_resources.get("e")) is not None assert cache.misses == 2 assert cache.hits == 3 cache.add_item(test_resources.get("a"), test_content.get("a")) assert len(cache) == 3 assert cache.trims == 3 assert cache.get_item(test_resources.get("c")) is None # since 'c' was aged out assert cache.get_item(test_resources.get("a")) is not None assert cache.misses == 3 assert cache.hits == 4 e_val = cache.remove_item(test_resources.get("e")) assert len(cache) == 2 assert e_val["metadata"]["number_range_test"] == test_items.get("e") assert cache.get_item(test_resources.get("e")) is None assert cache.misses == 4 assert cache.hits == 4 assert cache.trims == 3 a_val = cache.remove_item(test_resources.get("a")) assert len(cache) == 1 assert a_val["metadata"]["number_range_test"] == test_items.get("a") assert cache.get_item(test_resources.get("a")) is None assert cache.misses == 5 assert cache.hits == 4 assert cache.trims == 3 d_val = cache.get_item(test_resources.get("d")) assert len(cache) == 1 assert d_val["metadata"]["number_range_test"] == test_items.get("d") assert cache.misses == 5 assert cache.hits == 5 assert cache.trims == 3 if isinstance(tests_manager.metadata_store, FileMetadataStore): # Exercise delete from filesystem and ensure cached item is removed assert os.path.exists(test_resources.get("d")) os.remove(test_resources.get("d")) recorded = 0.0 for i in range(1, 6): # allow up to a second for delete to record in cache time.sleep(0.2) # initial tests are showing only one sub-second delay is necessary recorded += 0.2 if len(cache) == 0: break assert len(cache) == 0 print(f"\ntest_cache_ops: Delete recorded after {recorded} seconds") assert cache.get_item(test_resources.get("d")) is None assert cache.misses == 6 assert cache.hits == 5 assert cache.trims == 3