Exemple #1
0
def test_packager_sign_all(patches, listdir, utils):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "PackageSigningRunner.sign",
        ("PackageSigningRunner.signing_utils", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")
    path = MagicMock()

    with patched as (m_sign, m_utils):
        _glob = {}

        for _path in listdir:
            _mock = MagicMock()
            _mock.name = _path
            _glob[_path] = _mock
        path.glob.return_value = _glob.values()
        m_utils.return_value = utils
        assert not packager.sign_all(path)

    assert (
        list(path.glob.call_args)
        == [('*',), {}])
    expected = [x for x in listdir if x in utils]
    assert (
        list(list(c) for c in m_sign.call_args_list)
        == [[(_glob[k], ), {}] for k in expected])
Exemple #2
0
def test_packager_run(patches, extract):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "PackageSigningRunner.sign_tarball",
        "PackageSigningRunner.sign_directory",
        ("PackageSigningRunner.extract", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.log", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    assert (
        packager.run.__wrapped__.__catches__
        == (identity.GPGError, sign.SigningError))

    with patched as (m_tarb, m_dir, m_extract, m_log):
        m_extract.return_value = extract
        assert not packager.run()

    assert (
        list(m_log.return_value.success.call_args)
        == [('Successfully signed packages',), {}])

    if extract:
        assert (
            list(m_tarb.call_args)
            == [(), {}])
        assert not m_dir.called
        return
    assert not m_tarb.called
    assert (
        list(m_dir.call_args)
        == [(), {}])
Exemple #3
0
def test_util_pkg_files(patches, files):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    util = sign.DirectorySigningUtil("PATH", maintainer, "LOG")
    patched = patches(
        ("DirectorySigningUtil.ext", dict(new_callable=PropertyMock)),
        ("DirectorySigningUtil.path", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")
    with patched as (m_ext, m_path):
        _glob = {}

        for _path in files:
            _mock = MagicMock()
            _mock.name = _path
            _glob[_path] = _mock
        m_path.return_value.glob.return_value = _glob.values()

        m_ext.return_value = "EXT"
        result = util.pkg_files

    expected = [fname for fname in files if fname.endswith(".EXT")]

    assert (
        list(m_path.return_value.glob.call_args)
        == [("*",), {}])
    assert "pkg_files" not in util.__dict__
    assert (
        result
        == tuple(_glob[k] for k in expected))
Exemple #4
0
def test_util_pkg_files(patches, files):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    util = sign.DirectorySigningUtil("PATH", maintainer, "LOG")
    patched = patches(
        "os", ("DirectorySigningUtil.ext", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")
    with patched as (m_os, m_ext):
        m_ext.return_value = "EXT"
        m_os.listdir.return_value = files
        result = util.pkg_files

    expected = [fname for fname in files if fname.endswith(".EXT")]

    assert (list(m_os.listdir.call_args) == [("PATH", ), {}])
    if not expected:
        assert not m_os.path.join.called
        assert not result
    else:
        assert (result == tuple(m_os.path.join.return_value
                                for fname in expected))
        assert (list(list(c) for c in m_os.path.join.call_args_list) == [[
            ("PATH", fname), {}
        ] for fname in expected])

    assert "pkg_files" not in util.__dict__
Exemple #5
0
def test_packager_add_arguments():
    packager = sign.PackageSigningRunner("x", "y", "z")
    parser = MagicMock()
    packager.add_arguments(parser)
    assert (
        list(list(c) for c in parser.add_argument.call_args_list)
        == [[('--log-level', '-l'),
             {'choices': ['debug', 'info', 'warn', 'error'],
              'default': 'info',
              'help': 'Log level to display'}],
            [('path',),
             {'default': '',
              'help': 'Path to the directory containing packages to sign'}],
            [('--extract',),
             {'action': 'store_true',
              'help': 'If set, treat the path as a tarball containing directories '
              'according to package_type'}],
            [('--tar',),
             {'help': 'Path to save the signed packages as tar file'}],
            [('--type',),
             {'choices': ['util1', 'util2', ''],
              'default': '',
              'help': 'Package type to sign'}],
            [('--maintainer-name',),
             {'default': '', 'help': 'Maintainer name to match when searching for a GPG key to match with'}],
            [('--maintainer-email',),
             {'default': '',
              'help': 'Maintainer email to match when searching for a GPG key to match with'}]])
Exemple #6
0
def test_packager_sign_tarball(patches, tar):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "utils",
        "PackageSigningRunner.archive",
        "PackageSigningRunner.sign_all",
        ("PackageSigningRunner.path", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.tar", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_utils, m_archive, m_sign, m_path, m_tar):
        m_tar.return_value = tar
        if not tar:
            with pytest.raises(sign.SigningError) as e:
                packager.sign_tarball()
        else:
            assert not packager.sign_tarball()

    if not tar:
        assert (
            e.value.args[0] ==
            'You must set a `--tar` file to save to when `--extract` is set')
        assert not m_utils.untar.called
        assert not m_sign.called
        assert not m_archive.called
        return

    assert (list(m_utils.untar.call_args) == [(m_path.return_value, ), {}])
    assert (list(m_sign.call_args) == [
        (m_utils.untar.return_value.__enter__.return_value, ), {}
    ])
    assert (list(m_archive.call_args) == [
        (m_utils.untar.return_value.__enter__.return_value, ), {}
    ])
Exemple #7
0
def test_util_package_type(ext, package_type):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    util = sign.DirectorySigningUtil("PATH", maintainer, "LOG")
    util.ext = ext
    util._package_type = package_type
    assert util.package_type == package_type or ext
Exemple #8
0
def test_packager_tar(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        ("PackageSigningRunner.args", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_args, ):
        assert packager.tar == m_args.return_value.tar

    assert "tar" not in packager.__dict__
Exemple #9
0
def test_debsign_command_args(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    patched = patches(
        ("identity.GPGIdentity.fingerprint", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_fingerprint, ):
        debsign = sign.DebSigningUtil("PATH", maintainer, "LOG")
        assert (debsign.command_args == ("-k", m_fingerprint.return_value))

    assert "command_args" in debsign.__dict__
Exemple #10
0
def test_util_constructor(command):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    args = ("PATH", maintainer, "LOG")
    if command is not None:
        args += (command, )
    util = sign.DirectorySigningUtil(*args)
    assert util.path == "PATH"
    assert util.maintainer == maintainer
    assert util.log == "LOG"
    assert util._command == (command or "")
    assert util.command_args == ()
Exemple #11
0
def test_rpmsign_sign_pkg(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    rpmsign = DummyRPMSigningUtil("PATH", maintainer)
    patched = patches("os",
                      "DirectorySigningUtil.sign_pkg",
                      prefix="tools.distribution.sign")

    with patched as (m_os, m_sign):
        assert not rpmsign.sign_pkg("FILE")

    assert (list(m_os.chmod.call_args) == [('FILE', 0o755), {}])
    assert (list(m_sign.call_args) == [('FILE', ), {}])
Exemple #12
0
def test_util_sign_command(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    util = sign.DirectorySigningUtil("PATH", maintainer, "LOG")
    patched = patches(
        ("DirectorySigningUtil.command", dict(new_callable=PropertyMock)),
        ("DirectorySigningUtil.command_args", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_command, m_args):
        m_args.return_value = ("ARG1", "ARG2", "ARG3")
        assert (util.sign_command("PACKAGE") == (m_command.return_value, ) +
                m_args.return_value + ("PACKAGE", ))
Exemple #13
0
def test_util_path(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    util = sign.DirectorySigningUtil("PATH", maintainer, "LOG")
    patched = patches(
        "pathlib",
        prefix="tools.distribution.sign")
    with patched as (m_plib, ):
        assert util.path == m_plib.Path.return_value

    assert (
        list(m_plib.Path.call_args)
        == [(util._path,), {}])
Exemple #14
0
def test_debsign_constructor(patches, args):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    debsign = sign.DebSigningUtil("PATH", maintainer, "LOG", *args)

    assert isinstance(debsign, sign.DirectorySigningUtil)
    assert debsign.ext == "changes"
    assert debsign.command_name == "debsign"
    assert debsign._package_type == "deb"
    assert debsign.changes_files == sign.DebChangesFiles
    assert debsign.path == "PATH"
    assert debsign.maintainer == maintainer
    assert debsign.log == "LOG"
Exemple #15
0
def test_packager_path(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "pathlib",
        ("PackageSigningRunner.args", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_plib, m_args):
        assert packager.path == m_plib.Path.return_value

    assert (
        list(m_plib.Path.call_args)
        == [(m_args.return_value.path, ), {}])
    assert "path" not in packager.__dict__
Exemple #16
0
def test_rpmsign_command_args(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    patched = patches(
        "RPMSigningUtil.setup",
        ("identity.GPGIdentity.fingerprint", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_setup, m_fingerprint):
        rpmsign = sign.RPMSigningUtil("PATH", maintainer, "LOG")
        assert (rpmsign.command_args == ("--key-id",
                                         m_fingerprint.return_value,
                                         "--addsign"))

    assert "command_args" in rpmsign.__dict__
Exemple #17
0
def test_util_sign(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    util = sign.DirectorySigningUtil("PATH", maintainer, "LOG")
    patched = patches(
        "DirectorySigningUtil.sign_pkg",
        ("DirectorySigningUtil.pkg_files", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_sign, m_pkgs):
        m_pkgs.return_value = ("PKG1", "PKG2", "PKG3")
        assert not util.sign()

    assert (list(list(c) for c in m_sign.call_args_list) == [[('PKG1', ), {}],
                                                             [('PKG2', ), {}],
                                                             [('PKG3', ), {}]])
Exemple #18
0
def test_rpmsign_constructor(patches, args, kwargs):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    patched = patches("RPMSigningUtil.setup",
                      "DirectorySigningUtil.__init__",
                      prefix="tools.distribution.sign")

    with patched as (m_setup, m_super):
        rpmsign = sign.RPMSigningUtil("PATH", maintainer, *args, **kwargs)

    assert isinstance(rpmsign, sign.DirectorySigningUtil)
    assert rpmsign.ext == "rpm"
    assert rpmsign.command_name == "rpmsign"
    assert (list(m_setup.call_args) == [(), {}])
    assert (list(m_super.call_args) == [('PATH', maintainer) + args, kwargs])
    assert rpmsign.rpmmacro == sign.RPMMacro
Exemple #19
0
def test_packager_sign(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "PackageSigningRunner.get_signing_util",
        ("PackageSigningRunner.log", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.maintainer", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_util, m_log, m_maintainer):
        assert not packager.sign("PACKAGE_TYPE", "PATH")

    assert (list(m_log.return_value.notice.call_args) == [
        (f"Signing PACKAGE_TYPEs ({m_maintainer.return_value}) PATH", ), {}
    ])
    assert (list(m_util.call_args) == [('PACKAGE_TYPE', 'PATH'), {}])
    assert (list(m_util.return_value.sign.call_args) == [(), {}])
Exemple #20
0
def test_packager_archive(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "tarfile",
        ("PackageSigningRunner.tar", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_tarfile, m_tar):
        assert not packager.archive("PATH")

    assert (
        list(m_tarfile.open.call_args)
        == [(m_tar.return_value, 'w'), {}])
    assert (
        list(m_tarfile.open.return_value.__enter__.return_value.add.call_args)
        == [('PATH',), {'arcname': '.'}])
Exemple #21
0
def test_packager_maintainer(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        ("PackageSigningRunner.log", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.maintainer_class", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.maintainer_email", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.maintainer_name", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_log, m_class, m_email, m_name):
        assert packager.maintainer == m_class.return_value.return_value

    assert (
        list(m_class.return_value.call_args)
        == [(m_name.return_value, m_email.return_value, m_log.return_value), {}])

    assert "maintainer" in packager.__dict__
Exemple #22
0
def test_packager_get_signing_util(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        ("PackageSigningRunner.log", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.maintainer", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.signing_utils", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")
    path = MagicMock()

    with patched as (m_log, m_maintainer, m_utils):
        assert packager.get_signing_util(path) == m_utils.return_value.__getitem__.return_value.return_value

    assert (
        list(m_utils.return_value.__getitem__.call_args)
        == [(path.name,), {}])
    assert (
        list(m_utils.return_value.__getitem__.return_value.call_args)
        == [(path, m_maintainer.return_value, m_log.return_value), {}])
Exemple #23
0
def test_rpmsign_sign_pkg(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    rpmsign = DummyRPMSigningUtil("PATH", maintainer)
    patched = patches(
        "DirectorySigningUtil.sign_pkg",
        prefix="tools.distribution.sign")
    file = MagicMock()

    with patched as (m_sign, ):
        assert not rpmsign.sign_pkg(file)

    assert (
        list(file.chmod.call_args)
        == [(0o755, ), {}])
    assert (
        list(m_sign.call_args)
        == [(file,), {}])
Exemple #24
0
def test_rpmsign_setup(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = MagicMock()

    rpmsign = DummyRPMSigningUtil("PATH", maintainer)

    patched = patches(
        ("RPMSigningUtil.rpmmacro", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_macro, ):
        assert not rpmsign.setup()

    assert (
        list(m_macro.return_value.call_args)
        == [(maintainer.home,),
            {'maintainer': maintainer.name,
             'gpg_bin': maintainer.gpg_bin,
             'gpg_config': maintainer.gnupg_home}])
Exemple #25
0
def test_packager_run(patches, extract, raises):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "PackageSigningRunner.sign_tarball",
        "PackageSigningRunner.sign_directory",
        ("PackageSigningRunner.extract", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.log", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_tarb, m_dir, m_extract, m_log):
        m_extract.return_value = extract
        if raises:
            _error = raises("AN ERROR OCCURRED")
            m_extract.side_effect = _error

        if raises == Exception:
            with pytest.raises(raises):
                packager.run()
        else:
            assert packager.run() == (1 if raises else None)

    if raises:
        assert not m_tarb.called
        assert not m_dir.called
        assert not m_log.return_value.success.called

        if raises == Exception:
            return
        assert (list(m_log.return_value.error.call_args) == [(str(_error), ),
                                                             {}])
        return

    assert (list(m_log.return_value.success.call_args) == [
        ('Successfully signed packages', ), {}
    ])

    if extract:
        assert (list(m_tarb.call_args) == [(), {}])
        assert not m_dir.called
        return
    assert not m_tarb.called
    assert (list(m_dir.call_args) == [(), {}])
Exemple #26
0
def test_packager_sign_all(patches, listdir, utils):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches("os",
                      "PackageSigningRunner.sign",
                      ("PackageSigningRunner.signing_utils",
                       dict(new_callable=PropertyMock)),
                      prefix="tools.distribution.sign")

    with patched as (m_os, m_sign, m_utils):
        m_os.listdir.return_value = listdir
        m_utils.return_value = utils
        assert not packager.sign_all("PATH")
    assert (list(m_os.listdir.call_args) == [('PATH', ), {}])
    expected = [x for x in listdir if x in utils]
    assert (list(list(c) for c in m_os.path.join.call_args_list) == [[
        ('PATH', k), {}
    ] for k in expected])
    assert (list(list(c) for c in m_sign.call_args_list) == [[
        (k, m_os.path.join.return_value), {}
    ] for k in expected])
Exemple #27
0
def test_debsign_pkg_files(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    debsign = sign.DebSigningUtil("PATH", maintainer, "LOG")
    patched = patches(
        "chain",
        ("DirectorySigningUtil.pkg_files", dict(new_callable=PropertyMock)),
        ("DebSigningUtil.changes_files", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_chain, m_pkg, m_changes):
        m_pkg.return_value = ("FILE1", "FILE2", "FILE3")
        m_chain.from_iterable.side_effect = lambda _iter: list(_iter)
        assert (debsign.pkg_files == (m_changes.return_value.return_value, ) *
                3)

    assert m_chain.from_iterable.called
    assert (list(list(c) for c in m_changes.return_value.call_args_list) == [[
        ('FILE1', ), {}
    ], [('FILE2', ), {}], [('FILE3', ), {}]])
Exemple #28
0
def test_packager_sign(patches):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "PackageSigningRunner.get_signing_util",
        ("PackageSigningRunner.log", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.maintainer", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")
    path = MagicMock()

    with patched as (m_util, m_log, m_maintainer):
        assert not packager.sign(path)

    assert (
        list(m_log.return_value.notice.call_args)
        == [(f"Signing {path.name}s ({m_maintainer.return_value}) {path}",), {}])
    assert (
        list(m_util.call_args)
        == [(path, ), {}])
    assert (
        list(m_util.return_value.sign.call_args)
        == [(), {}])
Exemple #29
0
def test_packager_sign_directory(patches, tar):
    packager = sign.PackageSigningRunner("x", "y", "z")
    patched = patches(
        "PackageSigningRunner.archive",
        "PackageSigningRunner.sign",
        ("PackageSigningRunner.package_type", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.path", dict(new_callable=PropertyMock)),
        ("PackageSigningRunner.tar", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")

    with patched as (m_archive, m_sign, m_type, m_path, m_tar):
        m_tar.return_value = tar
        assert not packager.sign_directory()

    assert (list(m_sign.call_args) == [(m_type.return_value,
                                        m_path.return_value), {}])
    if not tar:
        assert not m_archive.called
        return

    assert (list(m_archive.call_args) == [(m_path.return_value, ), {}])
Exemple #30
0
def test_util_command(patches, command_name, command, which):
    packager = sign.PackageSigningRunner("x", "y", "z")
    maintainer = identity.GPGIdentity(packager)
    util = sign.DirectorySigningUtil("PATH",
                                     maintainer,
                                     "LOG",
                                     command=command)
    patched = patches(
        "shutil",
        ("DirectorySigningUtil.package_type", dict(new_callable=PropertyMock)),
        prefix="tools.distribution.sign")
    if command_name is not None:
        util.command_name = command_name

    with patched as (m_shutil, m_type):
        m_shutil.which.return_value = which

        if not which and not command:
            with pytest.raises(sign.SigningError) as e:
                util.command

            assert (list(m_shutil.which.call_args) == [(command_name, ), {}])
            assert (
                e.value.args[0] ==
                f"Signing software missing ({m_type.return_value}): {command_name}"
            )
            return

        result = util.command

    assert "command" in util.__dict__
    assert not m_type.called

    if command:
        assert not m_shutil.which.called
        assert result == command
        return

    assert (list(m_shutil.which.call_args) == [(command_name, ), {}])
    assert result == m_shutil.which.return_value