Esempio n. 1
0
def test_build_code_optional_bogus(tmp_path, monkeypatch):
    """Check that CHARM_OPTIONAL controls what gets copied."""
    monkeypatch.setattr(build, 'CHARM_OPTIONAL', ['foo.yaml'])

    build_dir = tmp_path / BUILD_DIRNAME
    build_dir.mkdir()
    entrypoint = tmp_path / 'charm.py'

    config = tmp_path / 'config.yaml'
    config.touch()
    foo = tmp_path / 'foo.yaml'
    foo.touch()

    builder = Builder({
        'from': tmp_path,
        'entrypoint': entrypoint,
        'requirement': [],
    })
    builder.handle_code()

    built_config = build_dir / 'config.yaml'
    built_foo = build_dir / 'foo.yaml'

    # config.yaml is not in the build
    assert not built_config.exists()
    # but foo.yaml is
    assert built_foo.is_symlink()
    assert built_foo.resolve() == foo
Esempio n. 2
0
def test_build_code_optional(tmp_path, optional):
    """Check transferred 'optional' files."""
    build_dir = tmp_path / BUILD_DIRNAME
    build_dir.mkdir()
    entrypoint = tmp_path / 'charm.py'

    config = tmp_path / 'config.yaml'
    actions = tmp_path / 'actions.yaml'
    if 'config' in optional:
        config.touch()
    if 'actions' in optional:
        actions.touch()

    builder = Builder({
        'from': tmp_path,
        'entrypoint': entrypoint,
        'requirement': [],
    })
    builder.handle_code()

    built_config = build_dir / 'config.yaml'
    built_actions = build_dir / 'actions.yaml'

    if 'config' in optional:
        assert built_config.is_symlink()
        assert built_config.resolve() == config
    else:
        assert not built_config.exists()
    if 'actions' in optional:
        assert built_actions.is_symlink()
        assert built_actions.resolve() == actions
    else:
        assert not built_actions.exists()
Esempio n. 3
0
def test_build_code_simple(tmp_path):
    """Check transferred metadata and simple entrypoint."""
    build_dir = tmp_path / BUILD_DIRNAME
    build_dir.mkdir()

    metadata = tmp_path / CHARM_METADATA
    metadata.touch()
    entrypoint = tmp_path / 'crazycharm.py'
    entrypoint.touch()

    builder = Builder({
        'from': tmp_path,
        'entrypoint': entrypoint,
        'requirement': [],
    })
    linked_entrypoint = builder.handle_code()

    built_metadata = build_dir / CHARM_METADATA
    assert built_metadata.is_symlink()
    assert built_metadata.resolve() == metadata

    built_entrypoint = build_dir / 'crazycharm.py'
    assert built_entrypoint.is_symlink()
    assert built_entrypoint.resolve() == entrypoint

    assert linked_entrypoint == built_entrypoint
Esempio n. 4
0
def test_build_code_includes_templates(tmp_path):
    """If 'templates' exists, it is included in the build tree."""
    build_dir = tmp_path / BUILD_DIRNAME
    build_dir.mkdir()

    source_dir = tmp_path / "templates"
    entrypoint = tmp_path / 'charm.py'
    source_dir.mkdir()
    builder = Builder({
        'from': tmp_path,
        'entrypoint': entrypoint,
        'requirement': [],
    })
    builder.handle_code()
    built_dir = build_dir / 'templates'
    assert built_dir.is_symlink()
    assert built_dir.resolve() == source_dir
Esempio n. 5
0
def test_build_code_tree(tmp_path):
    """The whole source code tree is built if entrypoint not at root."""
    build_dir = tmp_path / BUILD_DIRNAME
    build_dir.mkdir()

    src_dir = tmp_path / 'code_source'
    entrypoint = src_dir / 'crazycharm.py'

    builder = Builder({
        'from': tmp_path,
        'entrypoint': entrypoint,
        'requirement': [],
    })
    linked_entrypoint = builder.handle_code()

    built_src = build_dir / 'code_source'
    assert built_src.is_symlink()
    assert built_src.resolve() == src_dir

    assert linked_entrypoint == build_dir / 'code_source' / 'crazycharm.py'