def test_manager_add_display_name(tests_manager, namespace_location): metadata_display_name = '1 teste "rápido"' metadata_name = 'a_1_teste_rpido' metadata = Metadata(**valid_display_name_json) instance = tests_manager.create(None, metadata) assert instance is not None assert instance.name == metadata_name assert instance.display_name == metadata_display_name # Ensure file was created using store_manager instance_list = tests_manager.metadata_store.fetch_instances(metadata_name) assert len(instance_list) == 1 instance = Metadata.from_dict(METADATA_TEST_NAMESPACE, instance_list[0]) metadata_location = _compose_instance_location( tests_manager.metadata_store, namespace_location, metadata_name) assert instance.resource == metadata_location assert instance.display_name == metadata_display_name # And finally, remove it. tests_manager.remove(metadata_name) # Verify removal using metadata_store with pytest.raises(MetadataNotFoundError): tests_manager.metadata_store.fetch_instances(metadata_name)
def test_remove_instance(script_runner, mock_data_dir): metadata_manager = MetadataManager(namespace=METADATA_TEST_NAMESPACE) valid = Metadata(**valid_metadata_json) resource = metadata_manager.create('valid', valid) assert resource is not None resource = metadata_manager.create('valid2', valid) assert resource is not None another = Metadata(**another_metadata_json) resource = metadata_manager.create('another', another) assert resource is not None resource = metadata_manager.create('another2', another) assert resource is not None ret = script_runner.run('elyra-metadata', 'remove', METADATA_TEST_NAMESPACE, '--name=valid') assert ret.success ret = script_runner.run('elyra-metadata', 'remove', METADATA_TEST_NAMESPACE, '--name=another') assert ret.success instances = metadata_manager.get_all() assert len(instances) == 2 assert instances[0].name.endswith('2') assert instances[1].name.endswith('2')
def test_manager_add_no_name(tests_manager, namespace_location): metadata_name = 'valid_metadata_instance' metadata = Metadata.from_dict(METADATA_TEST_NAMESPACE, {**valid_metadata_json}) instance = tests_manager.create(None, metadata) assert instance is not None assert instance.name == metadata_name # Ensure file was created using store_manager instance_list = tests_manager.metadata_store.fetch_instances(metadata_name) assert len(instance_list) == 1 instance = Metadata.from_dict(METADATA_TEST_NAMESPACE, instance_list[0]) metadata_location = _compose_instance_location( tests_manager.metadata_store, namespace_location, metadata_name) assert instance.resource == metadata_location assert instance.special_property == instance.metadata['required_test'] # And finally, remove it. tests_manager.remove(metadata_name) # Verify removal using metadata_store with pytest.raises(MetadataNotFoundError): tests_manager.metadata_store.fetch_instances(metadata_name)
def test_remove_instance(script_runner, mock_runtime_dir): metadata_manager = MetadataManager(namespace='elyra-metadata-tests') valid = Metadata(**valid_metadata_json) resource = metadata_manager.add('valid', valid) assert resource is not None resource = metadata_manager.add('valid2', valid) assert resource is not None another = Metadata(**another_metadata_json) resource = metadata_manager.add('another', another) assert resource is not None resource = metadata_manager.add('another2', another) assert resource is not None ret = script_runner.run('elyra-metadata', 'remove', 'elyra-metadata-tests', '--name=valid') assert ret.success ret = script_runner.run('elyra-metadata', 'remove', 'elyra-metadata-tests', '--name=another') assert ret.success instances = metadata_manager.get_all_metadata_summary() assert len(instances) == 2 assert instances[0].name.endswith('2') assert instances[1].name.endswith('2')
def test_manager_bad_update(tests_hierarchy_manager, namespace_location): # Create some metadata, then attempt to update it with a known schema violation # and ensure the previous copy still exists... # Create a user instance... metadata = Metadata(**byo_metadata_json) metadata.display_name = 'user1' instance = tests_hierarchy_manager.create('bad_update', metadata) assert instance is not None assert instance.resource.startswith(str(namespace_location)) # Now, attempt to update the user instance, but include a schema violation. # Verify the update failed, but also ensure the previous instance is still there. instance2 = tests_hierarchy_manager.get('bad_update') instance2.display_name = 'user2' instance2.metadata['number_range_test'] = 42 # number is out of range with pytest.raises(ValidationError): tests_hierarchy_manager.update('bad_update', instance2) _ensure_single_instance(tests_hierarchy_manager, namespace_location, "bad_update.json") instance2 = tests_hierarchy_manager.get('bad_update') assert instance2.display_name == instance.display_name assert 'number_range_test' not in instance2.metadata # Now try update without providing a name, ValueError expected instance2 = tests_hierarchy_manager.get('bad_update') instance2.display_name = 'user update with no name' with pytest.raises(ValueError): tests_hierarchy_manager.update(None, instance2) _ensure_single_instance(tests_hierarchy_manager, namespace_location, "bad_update.json")
def test_manager_add_empty_display_name(tests_manager, metadata_tests_dir): # Found that empty display_name values were passing validation, so minLength=1 was added metadata = Metadata(**valid_metadata_json) metadata.display_name = '' with pytest.raises(ValidationError): tests_manager.add('empty_display_name', metadata) # Ensure file was not created metadata_file = os.path.join(metadata_tests_dir, '{}.json'.format('empty_display_name')) assert not os.path.exists(metadata_file)
def test_manager_add_empty_display_name(tests_manager): # Found that empty display_name values were passing validation, so minLength=1 was added metadata_name = 'empty_display_name' metadata = Metadata(**valid_metadata_json) metadata.display_name = '' with pytest.raises(ValidationError): tests_manager.create(metadata_name, metadata) # Ensure file was not created using storage manager with pytest.raises(MetadataNotFoundError): tests_manager.metadata_store.fetch_instances(metadata_name)
def test_manager_hierarchy_remove(tests_hierarchy_manager, factory_location, shared_location, namespace_location): # Create additional instances in shared and user areas byo_2 = byo_metadata_json byo_2['display_name'] = 'shared' create_json_file(shared_location, 'byo_2.json', byo_2) metadata = Metadata(**byo_metadata_json) metadata.display_name = 'user' instance = tests_hierarchy_manager.update('byo_2', metadata) assert instance is not None assert instance.resource.startswith(str(namespace_location)) # Confirm on in user is found... metadata_list = tests_hierarchy_manager.get_all() assert len(metadata_list) == 3 # Ensure the proper instances exist for metadata in metadata_list: if metadata.name == 'byo_1': assert metadata.display_name == "factory" if metadata.name == 'byo_2': assert metadata.display_name == "user" if metadata.name == 'byo_3': assert metadata.display_name == "factory" byo_2 = tests_hierarchy_manager.get('byo_2') assert byo_2.resource.startswith(str(namespace_location)) # Now remove instance. Should be allowed since it resides in user area tests_hierarchy_manager.remove('byo_2') _ensure_single_instance(tests_hierarchy_manager, namespace_location, "byo_2.json", expected_count=0) # Attempt to remove instance from shared area and its protected with pytest.raises(PermissionError) as pe: tests_hierarchy_manager.remove('byo_2') assert "Removal of instance 'byo_2'" in str(pe.value) # Ensure the one that exists is the one in the shared area byo_2 = tests_hierarchy_manager.get('byo_2') assert byo_2.resource.startswith(str(shared_location)) # Attempt to remove instance from factory area and its protected as well with pytest.raises(PermissionError) as pe: tests_hierarchy_manager.remove('byo_1') assert "Removal of instance 'byo_1'" in str(pe.value) byo_1 = tests_hierarchy_manager.get('byo_1') assert byo_1.resource.startswith(str(factory_location))
def test_list_json_instances(script_runner, mock_data_dir): metadata_manager = MetadataManager(namespace=METADATA_TEST_NAMESPACE) ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE, '--json') assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 2 # always 2 more than the actual runtime count assert lines[0].startswith( "No metadata instances found for {}".format(METADATA_TEST_NAMESPACE)) valid = Metadata(**valid_metadata_json) resource = metadata_manager.create('valid', valid) assert resource is not None resource = metadata_manager.create('valid2', valid) assert resource is not None another = Metadata(**another_metadata_json) resource = metadata_manager.create('another', another) assert resource is not None resource = metadata_manager.create('another2', another) assert resource is not None ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE, '--json') assert ret.success assert ret.stderr == '' # Consume results results = json.loads(ret.stdout) assert len(results) == 4 # Remove the '2' runtimes and reconfirm smaller set metadata_manager.remove('valid2') metadata_manager.remove('another2') # Include two additional invalid files as well - one for uri failure, andother missing display_name metadata_dir = os.path.join(mock_data_dir, 'metadata', METADATA_TEST_NAMESPACE) create_json_file(metadata_dir, 'invalid.json', invalid_metadata_json) create_json_file(metadata_dir, 'no_display_name.json', invalid_no_display_name_json) ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE, '--json') assert ret.success results = json.loads(ret.stdout) assert len(results) == 4 ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE, '--json', '--valid-only') assert ret.success results = json.loads(ret.stdout) assert len(results) == 2
def test_manager_default_value(tests_hierarchy_manager, namespace_location): # Create some metadata, then attempt to update it with a known schema violation # and ensure the previous copy still exists... # Create a user instance... metadata = Metadata.from_dict(METADATA_TEST_NAMESPACE, {**byo_metadata_json}) metadata.display_name = 'user1' instance = tests_hierarchy_manager.create('default_value', metadata) assert instance.metadata[ 'number_default_test'] == 42 # Ensure default value was applied when not present instance2 = tests_hierarchy_manager.get('default_value') instance2.metadata['number_default_test'] = 37 tests_hierarchy_manager.update('default_value', instance2) instance3 = tests_hierarchy_manager.get('default_value') assert instance3.metadata['number_default_test'] == 37 # Now remove the updated value and ensure it comes back with the default instance3.metadata.pop('number_default_test') assert 'number_default_test' not in instance3.metadata tests_hierarchy_manager.update('default_value', instance3) instance4 = tests_hierarchy_manager.get('default_value') assert instance4.metadata['number_default_test'] == 42
def test_manager_update(tests_hierarchy_manager, namespace_location): # Create some metadata, then attempt to update it with a known schema violation # and ensure the previous copy still exists... # Create a user instance... metadata = Metadata.from_dict(METADATA_TEST_NAMESPACE, {**byo_metadata_json}) metadata.display_name = 'user1' instance = tests_hierarchy_manager.create('update', metadata) assert instance is not None assert instance.resource.startswith(str(namespace_location)) assert instance.for_update is False assert instance.special_property == instance.metadata['required_test'] # Now update the user instance - add a field - and ensure that the original renamed file is not present. instance2 = tests_hierarchy_manager.get('update') instance2.display_name = 'user2' instance2.metadata['number_range_test'] = 7 instance = tests_hierarchy_manager.update('update', instance2) assert instance.for_update is True assert instance.special_property == instance.metadata['required_test'] _ensure_single_instance(tests_hierarchy_manager, namespace_location, "update.json") instance2 = tests_hierarchy_manager.get('update') assert instance2.display_name == 'user2' assert instance2.metadata['number_range_test'] == 7
def test_manager_add_remove_valid(tests_manager, metadata_tests_dir): metadata_name = 'valid_add_remove' metadata = Metadata(**valid_metadata_json) resource = tests_manager.add(metadata_name, metadata) assert resource is not None # Ensure file was created metadata_file = os.path.join(metadata_tests_dir, 'valid_add_remove.json') assert os.path.exists(metadata_file) with open(metadata_file, 'r', encoding='utf-8') as f: valid_add = json.loads(f.read()) assert "resource" not in valid_add assert "name" not in valid_add assert "display_name" in valid_add assert valid_add['display_name'] == "valid metadata instance" assert "schema_name" in valid_add assert valid_add['schema_name'] == "test" # Attempt to create again w/o replace, then replace it. resource = tests_manager.add(metadata_name, metadata, replace=False) assert resource is None resource = tests_manager.add(metadata_name, metadata) assert resource is not None # And finally, remove it. resource = tests_manager.remove(metadata_name) assert not os.path.exists(metadata_file) assert resource == metadata_file
def test_manager_add_invalid(data_dir): # Use a local metadata mgr because we want to reference a bad namespace to ensure # directory metadata/invalid is not created. metadata_manager = MetadataManager(namespace='invalid') # Attempt with non Metadata instance with pytest.raises(TypeError): metadata_manager.add(invalid_metadata_json) # and invalid parameters with pytest.raises(ValueError): metadata_manager.add(None, invalid_metadata_json) with pytest.raises(ValueError): metadata_manager.add("foo", None) metadata = Metadata(**invalid_metadata_json) capture = io.StringIO() handler = StreamHandler(capture) metadata_manager.log.addHandler(handler) # Ensure save produces result of None and logging indicates validation error and file removal metadata_name = 'save_invalid' resource = metadata_manager.add(metadata_name, metadata) assert resource is None captured = capture.getvalue() assert "Schema validation failed" in captured assert "Removing metadata resource" in captured # Ensure file was not created. Since this was the first instance of 'invalid', then # also ensure that directory 'metadata/invalid' was not created. invalid_metadata_dir = os.path.join(data_dir, 'metadata', 'invalid') assert not os.path.exists(invalid_metadata_dir) metadata_file = os.path.join(invalid_metadata_dir, 'save_invalid.json') assert not os.path.exists(metadata_file)
def test_store_namespace(store_manager, namespace_location): # Delete the metadata dir contents and attempt listing metadata _remove_namespace(store_manager, namespace_location) assert store_manager.namespace_exists() is False # create some metadata store_manager.store_instance('ensure_namespace_exists', Metadata(**valid_metadata_json).prepare_write()) assert store_manager.namespace_exists()
def test_manager_add_short_name(tests_manager, namespace_location): # Found that single character names were failing validation metadata_name = 'a' metadata = Metadata(**valid_metadata_json) instance = tests_manager.create(metadata_name, metadata) assert instance is not None assert instance.name == metadata_name # Ensure file was created using store_manager instance_list = tests_manager.metadata_store.fetch_instances(metadata_name) assert len(instance_list) == 1 instance = Metadata.from_dict(METADATA_TEST_NAMESPACE, instance_list[0]) metadata_location = _compose_instance_location(tests_manager.metadata_store, namespace_location, metadata_name) assert instance.resource == metadata_location # And finally, remove it. tests_manager.remove(metadata_name) # Verify removal using metadata_store with pytest.raises(MetadataNotFoundError): tests_manager.metadata_store.fetch_instances(metadata_name)
def test_remove_missing(script_runner): # Create an instance so that the namespace exists. metadata_manager = MetadataManager(namespace=METADATA_TEST_NAMESPACE) valid = Metadata(**valid_metadata_json) metadata_manager.add('valid', valid) ret = script_runner.run('elyra-metadata', 'remove', METADATA_TEST_NAMESPACE, '--name=missing') assert ret.success is False assert ret.stdout == '"Metadata \'missing\' in namespace \'{}\' was not found!"\n'.format(METADATA_TEST_NAMESPACE) assert ret.stderr == '' # Now cleanup original instance. ret = script_runner.run('elyra-metadata', 'remove', METADATA_TEST_NAMESPACE, '--name=valid') assert ret.success
def test_remove_missing(script_runner): # Create an instance so that the namespace exists. metadata_manager = MetadataManager(namespace=METADATA_TEST_NAMESPACE) valid = Metadata(**valid_metadata_json) metadata_manager.update('valid', valid) ret = script_runner.run('elyra-metadata', 'remove', METADATA_TEST_NAMESPACE, '--name=missing') assert ret.success is False assert ret.stderr == '' assert "No such instance named 'missing' was found in the metadata-tests namespace." in ret.stdout # Now cleanup original instance. ret = script_runner.run('elyra-metadata', 'remove', METADATA_TEST_NAMESPACE, '--name=valid') assert ret.success
def test_manager_update(tests_hierarchy_manager, metadata_tests_dir): # Create some metadata, then attempt to update it with a known schema violation # and ensure the previous copy still exists... # Create a user instance... metadata = Metadata(**byo_metadata_json) metadata.display_name = 'user1' instance = tests_hierarchy_manager.add('update', metadata) assert instance is not None assert instance.resource.startswith(str(metadata_tests_dir)) # Now update the user instance - add a field - and ensure that the original renamed file is not present. instance2 = tests_hierarchy_manager.get('update') instance2.display_name = 'user2' instance2.metadata['number_range_test'] = 7 tests_hierarchy_manager.add('update', instance2, replace=True) _ensure_single_file(metadata_tests_dir, "update.json") instance2 = tests_hierarchy_manager.get('update') assert instance2.display_name == 'user2' assert instance2.metadata['number_range_test'] == 7
def test_manager_add_short_name(tests_manager, metadata_tests_dir): # Found that single character names were failing validation name = 'a' metadata = Metadata(**valid_metadata_json) instance = tests_manager.add(name, metadata) assert instance is not None assert instance.name == name # Ensure file was created metadata_file = os.path.join(metadata_tests_dir, '{}.json'.format(name)) assert os.path.exists(metadata_file) # And finally, remove it. tests_manager.remove(name) assert not os.path.exists(metadata_file)
def test_manager_add_no_name(tests_manager, metadata_tests_dir): metadata_name = 'valid_metadata_instance' metadata = Metadata(**valid_metadata_json) instance = tests_manager.add(None, metadata) assert instance is not None assert instance.name == metadata_name # Ensure file was created metadata_file = os.path.join(metadata_tests_dir, '{}.json'.format(metadata_name)) assert os.path.exists(metadata_file) # And finally, remove it. tests_manager.remove(metadata_name) assert not os.path.exists(metadata_file)
def test_manager_add_remove_valid(tests_manager, metadata_tests_dir): metadata_name = 'valid_add_remove' # Remove metadata_tests_dir and ensure it gets created with appropriate perms. shutil.rmtree(metadata_tests_dir) metadata = Metadata(**valid_metadata_json) instance = tests_manager.add(metadata_name, metadata) assert instance is not None dir_mode = oct(os.stat(metadata_tests_dir).st_mode & 0o777777) # Be sure to include other attributes assert dir_mode == "0o40700" # and ensure this is a directory with only rwx by owner enabled # Ensure file was created metadata_file = os.path.join(metadata_tests_dir, 'valid_add_remove.json') assert os.path.exists(metadata_file) file_mode = oct(os.stat(metadata_file).st_mode & 0o777777) # Be sure to include other attributes assert file_mode == "0o100600" # and ensure this is a regular file with only rw by owner enabled with open(metadata_file, 'r', encoding='utf-8') as f: valid_add = json.loads(f.read()) assert "resource" not in valid_add assert "name" not in valid_add assert "display_name" in valid_add assert valid_add['display_name'] == "valid metadata instance" assert "schema_name" in valid_add assert valid_add['schema_name'] == "metadata-test" # Attempt to create again w/o replace, then replace it. with pytest.raises(FileExistsError): tests_manager.add(metadata_name, metadata) instance = tests_manager.add(metadata_name, metadata, replace=True) assert instance is not None # And finally, remove it. tests_manager.remove(metadata_name) assert not os.path.exists(metadata_file)
def test_manager_hierarchy_create(tests_hierarchy_manager, namespace_location): # Note, this is really more of an update test (replace = True), since you cannot "create" an # instance if it already exists - which, in this case, it exists in the factory area metadata = Metadata(**byo_metadata_json) metadata.display_name = 'user' with pytest.raises(MetadataExistsError): tests_hierarchy_manager.create('byo_2', metadata) instance = tests_hierarchy_manager.update('byo_2', metadata) assert instance is not None assert instance.resource.startswith(str(namespace_location)) metadata_list = tests_hierarchy_manager.get_all() assert len(metadata_list) == 3 # Ensure the proper instances exist for metadata in metadata_list: if metadata.name == 'byo_1': assert metadata.display_name == "factory" if metadata.name == 'byo_2': assert metadata.display_name == "user" if metadata.name == 'byo_3': assert metadata.display_name == "factory" byo_2 = tests_hierarchy_manager.get('byo_2') assert byo_2.resource.startswith(str(namespace_location)) metadata = Metadata(**byo_metadata_json) metadata.display_name = 'user' instance = tests_hierarchy_manager.update('byo_3', metadata) assert instance is not None assert instance.resource.startswith(str(namespace_location)) metadata_list = tests_hierarchy_manager.get_all() assert len(metadata_list) == 3 # Ensure the proper instances exist for metadata in metadata_list: if metadata.name == 'byo_1': assert metadata.display_name == "factory" if metadata.name == 'byo_2': assert metadata.display_name == "user" if metadata.name == 'byo_3': assert metadata.display_name == "user" byo_2 = tests_hierarchy_manager.get('byo_2') assert byo_2.resource.startswith(str(namespace_location))
def test_store_store_instance(store_manager, namespace_location): _remove_namespace( store_manager, namespace_location ) # Remove namespace to test raw creation and confirm perms metadata_name = 'persist' metadata = Metadata(**valid_metadata_json) metadata_dict = metadata.prepare_write() instance = store_manager.store_instance(metadata_name, metadata_dict) assert instance is not None if isinstance(store_manager, FileMetadataStore): dir_mode = oct(os.stat(namespace_location).st_mode & 0o777777) # Be sure to include other attributes assert dir_mode == "0o40700" # and ensure this is a directory with only rwx by owner enabled # Ensure file was created metadata_file = os.path.join(namespace_location, 'persist.json') assert os.path.exists(metadata_file) file_mode = oct(os.stat(metadata_file).st_mode & 0o777777) # Be sure to include other attributes assert file_mode == "0o100600" # and ensure this is a regular file with only rw by owner enabled with open(metadata_file, 'r', encoding='utf-8') as f: valid_add = json.loads(f.read()) assert "resource" not in valid_add assert "name" not in valid_add assert "display_name" in valid_add assert valid_add['display_name'] == "valid metadata instance" assert "schema_name" in valid_add assert valid_add['schema_name'] == "metadata-test" # Attempt to create again w/o replace, then replace it. with pytest.raises(MetadataExistsError): store_manager.store_instance(metadata_name, metadata.prepare_write()) metadata.metadata['number_range_test'] = 10 instance = store_manager.store_instance(metadata_name, metadata.prepare_write(), for_update=True) assert instance is not None assert instance.get('metadata')['number_range_test'] == 10
def test_manager_add_remove_valid(tests_manager, namespace_location): metadata_name = 'valid_add_remove' # Remove namespace_location and ensure it gets created _remove_namespace(tests_manager.metadata_store, namespace_location) metadata = Metadata(**valid_metadata_json) instance = tests_manager.create(metadata_name, metadata) assert instance is not None # Attempt to create again w/o replace, then replace it. with pytest.raises(MetadataExistsError): tests_manager.create(metadata_name, metadata) instance = tests_manager.update(metadata_name, metadata) assert instance is not None # And finally, remove it. tests_manager.remove(metadata_name) # Verify removal using metadata_store with pytest.raises(MetadataNotFoundError): tests_manager.metadata_store.fetch_instances(metadata_name)
def test_manager_add_display_name(tests_manager, metadata_tests_dir): metadata_display_name = '1 teste "rápido"' metadata_name = 'a_1_teste_rpido' metadata = Metadata(**valid_display_name_json) instance = tests_manager.add(None, metadata) assert instance is not None assert instance.name == metadata_name assert instance.display_name == metadata_display_name # Ensure file was created metadata_file = os.path.join(metadata_tests_dir, '{}.json'.format(metadata_name)) assert os.path.exists(metadata_file) with open(metadata_file, 'r', encoding='utf-8') as f: valid_add = json.loads(f.read()) assert "display_name" in valid_add assert valid_add['display_name'] == metadata_display_name # And finally, remove it. tests_manager.remove(metadata_name) assert not os.path.exists(metadata_file)
def test_list_instances(script_runner, mock_data_dir): metadata_manager = MetadataManager(namespace=METADATA_TEST_NAMESPACE) ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE) assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 2 # always 2 more than the actual runtime count assert lines[0].startswith( "No metadata instances found for {}".format(METADATA_TEST_NAMESPACE)) valid = Metadata(**valid_metadata_json) resource = metadata_manager.create('valid', valid) assert resource is not None resource = metadata_manager.create('valid2', valid) assert resource is not None another = Metadata(**another_metadata_json) resource = metadata_manager.create('another', another) assert resource is not None resource = metadata_manager.create('another2', another) assert resource is not None ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE) assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 9 # always 5 more than the actual runtime count assert lines[ 0] == "Available metadata instances for {} (includes invalid):".format( METADATA_TEST_NAMESPACE) line_elements = [line.split() for line in lines[4:8]] assert line_elements[0][0] == "metadata-test" assert line_elements[0][1] == "another" assert line_elements[1][0] == "metadata-test" assert line_elements[1][1] == "another2" assert line_elements[2][0] == "metadata-test" assert line_elements[2][1] == "valid" assert line_elements[3][0] == "metadata-test" assert line_elements[3][1] == "valid2" assert ret.stderr == '' # Remove the '2' runtimes and reconfirm smaller set metadata_manager.remove('valid2') metadata_manager.remove('another2') # Include two additional invalid files as well - one for uri failure, andother missing display_name metadata_dir = os.path.join(mock_data_dir, 'metadata', METADATA_TEST_NAMESPACE) create_json_file(metadata_dir, 'invalid.json', invalid_metadata_json) create_json_file(metadata_dir, 'no_display_name.json', invalid_no_display_name_json) create_json_file(metadata_dir, 'invalid_schema_name.json', invalid_schema_name_json) ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE) assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 10 # always 5 more than the actual runtime count assert lines[ 0] == "Available metadata instances for {} (includes invalid):".format( METADATA_TEST_NAMESPACE) line_elements = [line.split() for line in lines[4:9]] assert line_elements[0][1] == "another" assert line_elements[1][1] == "invalid" assert line_elements[1][3] == "**INVALID**" assert line_elements[1][4] == "(ValidationError)" assert line_elements[2][3] == "**INVALID**" assert line_elements[2][4] == "(ValidationError)" assert line_elements[3][1] == "valid" assert line_elements[4][3] == "**INVALID**" assert line_elements[4][4] == "(SchemaNotFoundError)" ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE, '--valid-only') assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 7 # always 5 more than the actual runtime count assert lines[ 0] == "Available metadata instances for {} (valid only):".format( METADATA_TEST_NAMESPACE) line_elements = [line.split() for line in lines[4:6]] assert line_elements[0][1] == "another" assert line_elements[1][1] == "valid"
def test_list_instances(script_runner, mock_runtime_dir): metadata_manager = MetadataManager(namespace='elyra-metadata-tests') ret = script_runner.run('elyra-metadata', 'list', 'elyra-metadata-tests') assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 2 # always 2 more than the actual runtime count assert lines[0].startswith( "No metadata instances available for elyra-metadata-tests at:") valid = Metadata(**valid_metadata_json) resource = metadata_manager.add('valid', valid) assert resource is not None resource = metadata_manager.add('valid2', valid) assert resource is not None another = Metadata(**another_metadata_json) resource = metadata_manager.add('another', another) assert resource is not None resource = metadata_manager.add('another2', another) assert resource is not None ret = script_runner.run('elyra-metadata', 'list', 'elyra-metadata-tests') assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 9 # always 5 more than the actual runtime count assert lines[ 0] == "Available metadata instances for elyra-metadata-tests (includes invalid):" line_elements = [line.split() for line in lines[4:8]] assert line_elements[0][0] == "test" assert line_elements[0][1] == "another" assert line_elements[1][0] == "test" assert line_elements[1][1] == "another2" assert line_elements[2][0] == "test" assert line_elements[2][1] == "valid" assert line_elements[3][0] == "test" assert line_elements[3][1] == "valid2" assert ret.stderr == '' # Remove the '2' runtimes and reconfirm smaller set metadata_manager.remove('valid2') metadata_manager.remove('another2') # Include an invalid file as well metadata_dir = os.path.join(mock_runtime_dir, 'metadata', 'elyra-metadata-tests') create_json_file(metadata_dir, 'invalid.json', invalid_metadata_json) ret = script_runner.run('elyra-metadata', 'list', 'elyra-metadata-tests') assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 8 # always 5 more than the actual runtime count assert lines[ 0] == "Available metadata instances for elyra-metadata-tests (includes invalid):" line_elements = [line.split() for line in lines[4:7]] assert line_elements[0][1] == "another" assert line_elements[1][1] == "invalid" assert line_elements[1][3] == "**INVALID**" assert line_elements[1][4] == "(ValidationError)" assert line_elements[2][1] == "valid" ret = script_runner.run('elyra-metadata', 'list', 'elyra-metadata-tests', '--valid-only') assert ret.success lines = ret.stdout.split('\n') assert len(lines) == 7 # always 5 more than the actual runtime count assert lines[ 0] == "Available metadata instances for elyra-metadata-tests (valid only):" line_elements = [line.split() for line in lines[4:6]] assert line_elements[0][1] == "another" assert line_elements[1][1] == "valid"