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_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_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_list_instances(script_runner, mock_runtime_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 available for {} at:".format(METADATA_TEST_NAMESPACE)) 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', 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 an invalid file as well metadata_dir = os.path.join(mock_runtime_dir, 'metadata', METADATA_TEST_NAMESPACE) create_json_file(metadata_dir, 'invalid.json', invalid_metadata_json) ret = script_runner.run('elyra-metadata', 'list', METADATA_TEST_NAMESPACE) 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 {} (includes invalid):".format(METADATA_TEST_NAMESPACE) 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', 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"