Пример #1
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)
Пример #2
0
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
Пример #3
0
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
Пример #4
0
 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
Пример #5
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.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
Пример #6
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
Пример #7
0
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')
Пример #8
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')
Пример #9
0
 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
Пример #10
0
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
Пример #11
0
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)
Пример #12
0
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"
Пример #13
0
def tests_hierarchy_manager(
        setup_hierarchy):  # Only uses FileMetadataStore for storage right now.
    return MetadataManager(namespace=METADATA_TEST_NAMESPACE)
Пример #14
0
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"
Пример #15
0
def tests_hierarchy_manager(setup_hierarchy):
    return MetadataManager(namespace=METADATA_TEST_NAMESPACE)
Пример #16
0
def tests_manager(setup_namespace):
    return MetadataManager(namespace=METADATA_TEST_NAMESPACE)