Example #1
0
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)
Example #2
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')
Example #3
0
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)
Example #4
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')
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")
Example #6
0
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)
Example #7
0
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)
Example #8
0
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))
Example #9
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
Example #10
0
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
Example #11
0
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
Example #12
0
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
Example #13
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)
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)
Example #16
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
Example #17
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
Example #18
0
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
Example #19
0
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)
Example #20
0
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)
Example #21
0
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)
Example #22
0
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))
Example #23
0
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
Example #24
0
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)
Example #25
0
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)
Example #26
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"
Example #27
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"