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_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_install_only_display_name(script_runner, mock_data_dir): metadata_display_name = "1 teste 'rápido'" metadata_name = 'a_1_teste_rpido' ret = script_runner.run('elyra-metadata', 'install', METADATA_TEST_NAMESPACE, '--schema_name=metadata-test', f'--display_name={metadata_display_name}', '--required_test=required_value') assert ret.success is True assert ret.stdout.startswith(f"Metadata instance '{metadata_name}' for schema 'metadata-test' has been written to:") # Ensure it can be fetched by name... metadata_manager = MetadataManager(namespace=METADATA_TEST_NAMESPACE) resource = metadata_manager.get(metadata_name) assert resource.display_name == metadata_display_name
def _get_metadata_configuration(self, namespace, name=None): """ Retrieve associated metadata configuration based on namespace provided and optional instance name :return: metadata in json format """ try: if not name: return MetadataManager(namespace=namespace).get_all() else: return MetadataManager(namespace=namespace).get(name) except BaseException as err: self.log.error('Error retrieving metadata configuration for {}'.format(name), exc_info=True) raise RuntimeError('Error retrieving metadata configuration for {}', err) from err
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_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_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_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 _get_runtime_configuration(self, name): """ Retrieve associated runtime configuration based on processor type :return: metadata in json format """ try: runtime_configuration = MetadataManager(namespace=MetadataManager.NAMESPACE_RUNTIMES).get(name) return runtime_configuration except BaseException as err: self.log.error('Error retrieving runtime configuration for {}'.format(name), exc_info=True) raise RuntimeError('Error retrieving runtime configuration for {}', err) from err
def tests_manager(environ, namespace_location, request): metadata_mgr = MetadataManager(namespace=METADATA_TEST_NAMESPACE, metadata_store_class=request.param) store_mgr = metadata_mgr.metadata_store create_instance(store_mgr, namespace_location, 'valid', valid_metadata_json) create_instance(store_mgr, namespace_location, 'another', another_metadata_json) create_instance(store_mgr, namespace_location, 'invalid', invalid_metadata_json) create_instance(store_mgr, namespace_location, 'bad', invalid_json) return metadata_mgr
def test_manager_add_invalid(tests_manager): with pytest.raises(ValueError): MetadataManager(namespace='invalid') # Attempt with non Metadata instance with pytest.raises(TypeError): tests_manager.create(valid_metadata_json) # and invalid parameters with pytest.raises(TypeError): tests_manager.create(None, invalid_no_display_name_json) with pytest.raises(ValueError): tests_manager.create("foo", None)
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 tests_hierarchy_manager( setup_hierarchy): # Only uses FileMetadataStore for storage right now. return MetadataManager(namespace=METADATA_TEST_NAMESPACE)
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"
def tests_hierarchy_manager(setup_hierarchy): return MetadataManager(namespace=METADATA_TEST_NAMESPACE)
def tests_manager(setup_namespace): return MetadataManager(namespace=METADATA_TEST_NAMESPACE)