示例#1
0
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')
示例#2
0
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
示例#3
0
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)
示例#4
0
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"