コード例 #1
0
def test_distributions(demo1_spec):

    provenance = Provenance.factory(demo1_spec)
    distributions = provenance.get_distributions()
    distributions = items_to_dict(distributions)
    assert set(distributions.keys()) == {'conda', 'debian'}
    # Test DebianDistribution class.
    debian_distribution = distributions['debian']
    environment = MagicMock()

    with swallow_logs(new_level=logging.DEBUG) as log:

        debian_distribution.initiate(environment)
        debian_distribution.install_packages(environment)

        calls = [
            call.execute_command(['apt-get', 'update']),
            call.execute_command([
                'apt-get', 'install', '-y', 'libc6-dev=2.19-18+deb8u4',
                'afni=16.2.07~dfsg.1-2~nd90+1'
            ]),
        ]
        environment.assert_has_calls(calls, any_order=True)
        assert_in("Adding Debian update to environment command list.",
                  log.lines)
    """
コード例 #2
0
def test_globbedpaths(path=None):
    dotdir = op.curdir + op.sep

    for patterns, expected in [
            (["1.txt", "2.dat"], {"1.txt", "2.dat"}),
            ([dotdir + "1.txt", "2.dat"], {dotdir + "1.txt", "2.dat"}),
            (["*.txt", "*.dat"], {"1.txt", "2.dat", u"bβ.dat", "3.txt"}),
            ([dotdir + "*.txt", "*.dat"],
             {dotdir + "1.txt", "2.dat", u"bβ.dat", dotdir + "3.txt"}),
            (["subdir/*.txt"], {"subdir/1.txt", "subdir/2.txt"}),
            ([dotdir + "subdir/*.txt"],
             {dotdir + p for p in ["subdir/1.txt", "subdir/2.txt"]}),
            (["*.txt"], {"1.txt", "3.txt"})]:
        gp = GlobbedPaths(patterns, pwd=path)
        eq_(set(gp.expand()), expected)
        eq_(set(gp.expand(full=True)),
            {op.join(path, p) for p in expected})

    pardir = op.pardir + op.sep
    subdir_path = op.join(path, "subdir")
    for patterns, expected in [
            (["*.txt"], {"1.txt", "2.txt"}),
            ([dotdir + "*.txt"], {dotdir + p for p in ["1.txt", "2.txt"]}),
            ([pardir + "*.txt"], {pardir + p for p in ["1.txt", "3.txt"]}),
            ([dotdir + pardir + "*.txt"],
             {dotdir + pardir + p for p in ["1.txt", "3.txt"]}),
            (["subdir/"], {"subdir/"})]:
        gp = GlobbedPaths(patterns, pwd=subdir_path)
        eq_(set(gp.expand()), expected)
        eq_(set(gp.expand(full=True)),
            {op.join(subdir_path, p) for p in expected})

    # Full patterns still get returned as relative to pwd.
    gp = GlobbedPaths([op.join(path, "*.dat")], pwd=path)
    eq_(gp.expand(), ["2.dat", u"bβ.dat"])

    # "." gets special treatment.
    gp = GlobbedPaths([".", "*.dat"], pwd=path)
    eq_(set(gp.expand()), {"2.dat", u"bβ.dat", "."})
    eq_(gp.expand(dot=False), ["2.dat", u"bβ.dat"])
    gp = GlobbedPaths(["."], pwd=path, expand=False)
    eq_(gp.expand(), ["."])
    eq_(gp.paths, ["."])

    # We can the glob outputs.
    glob_results = {"z": "z",
                    "a": ["x", "d", "b"]}
    with patch('glob.glob', glob_results.get):
        gp = GlobbedPaths(["z", "a"])
        eq_(gp.expand(), ["z", "b", "d", "x"])

    # glob expansion for paths property is determined by expand argument.
    for expand, expected in [(True, ["2.dat", u"bβ.dat"]),
                             (False, ["*.dat"])]:
        gp = GlobbedPaths(["*.dat"], pwd=path, expand=expand)
        eq_(gp.paths, expected)

    with swallow_logs(new_level=logging.DEBUG) as cml:
        GlobbedPaths(["not here"], pwd=path).expand()
        assert_in("No matching files found for 'not here'", cml.out)
コード例 #3
0
ファイル: test_retrace.py プロジェクト: yarikoptic/ReproNim
def test_retrace(reprozip_spec2):
    """
    Test installing packages on the localhost.
    """
    with swallow_logs(new_level=logging.DEBUG) as log:
        args = [
            'retrace',
            '--spec',
            reprozip_spec2,
        ]
        main(args)
        assert_in("reading spec file " + reprozip_spec2, log.lines)
コード例 #4
0
def test_delete_interface(niceman_cfg_path):
    """
    Test deleting a resource.
    """

    with patch('docker.Client') as client, \
        patch('niceman.resource.ResourceManager.set_inventory'), \
        patch('niceman.resource.ResourceManager.get_inventory') as get_inventory, \
        swallow_logs(new_level=logging.DEBUG) as log:

        client.return_value = MagicMock(
            containers=lambda all: [{
                'Id': '326b0fdfbf838',
                'Names': ['/my-resource'],
                'State': 'running'
            }])

        get_inventory.return_value = {
            "my-resource": {
                "status": "running",
                "engine_url": "tcp://127.0.0.1:2375",
                "type": "docker-container",
                "name": "my-resource",
                "id": "326b0fdfbf838"
            }
        }

        args = [
            'delete', '--name', 'my-resource', '--config', niceman_cfg_path,
            '--skip-confirmation'
        ]
        main(args)

        calls = [
            call(base_url='tcp://127.0.0.1:2375'),
            call().remove_container(
                {
                    'State': 'running',
                    'Id': '326b0fdfbf838',
                    'Names': ['/my-resource']
                },
                force=True)
        ]
        client.assert_has_calls(calls, any_order=True)

        assert_in('Deleted the environment my-resource', log.lines)
コード例 #5
0
def test_login_interface():
    """
    Test logging into an environment
    """

    with patch('docker.Client') as client, \
        patch('niceman.resource.ResourceManager._get_inventory') as get_inventory, \
        patch('dockerpty.start'), \
        swallow_logs(new_level=logging.DEBUG) as log:

        client.return_value = MagicMock(
            containers=lambda all: [{
                'Id': '18b31b30e3a5',
                'Names': ['/my-test-resource'],
                'State': 'running'
            }], )

        get_inventory.return_value = {
            "my-test-resource": {
                "status": "running",
                "engine_url": "tcp://127.0.0.1:2375",
                "type": "docker-container",
                "name": "my-test-resource",
                "id": "18b31b30e3a5"
            }
        }

        args = ['login', 'my-test-resource']

        with patch("niceman.interface.login.get_manager",
                   return_value=ResourceManager()):
            main(args)

        assert client.call_count == 1

        calls = [call(base_url='tcp://127.0.0.1:2375')]
        client.assert_has_calls(calls, any_order=True)

        assert_in("Opening TTY connection to docker container.", log.lines)
コード例 #6
0
def test_diff_files():
    with swallow_outputs() as outputs:
        args = ['diff', diff_1_yaml, diff_2_yaml]
        main(args)
        assert_equal(outputs.err, '')
        assert_in('Files:', outputs.out)
        assert_in('< /etc/a', outputs.out)
        assert_in('> /etc/c', outputs.out)
        assert_not_in('< /etc/b', outputs.out)
        assert_not_in('> /etc/b', outputs.out)
コード例 #7
0
def test_create_interface(niceman_cfg_path):
    """
    Test creating an environment
    """

    with patch('docker.Client') as client, \
        patch('niceman.resource.ResourceManager.set_inventory'), \
        patch('niceman.resource.ResourceManager.get_inventory') as get_inventory, \
        swallow_logs(new_level=logging.DEBUG) as log:

        client.return_value = MagicMock(
            containers=lambda all: [],
            pull=lambda repository, stream: [
                b'{ "status" : "status 1", "progress" : "progress 1" }',
                b'{ "status" : "status 2", "progress" : "progress 2" }'
            ],
            create_container=lambda name, image, stdin_open, tty, command:
            {'Id': '18b31b30e3a5'})

        get_inventory.return_value = {
            "my-test-resource": {
                "status": "running",
                "engine_url": "tcp://127.0.0.1:2375",
                "type": "docker-container",
                "name": "my-test-resource",
                "id": "18b31b30e3a5"
            }
        }

        args = [
            'create', '--name', 'my-test-resource', '--resource-type',
            'docker-container', '--config', niceman_cfg_path, '--backend',
            'engine_url=tcp://127.0.0.1:2376'
        ]
        main(args)

        calls = [
            call(base_url='tcp://127.0.0.1:2376'),
            call().start(container='18b31b30e3a5')
        ]
        client.assert_has_calls(calls, any_order=True)

        assert_in("status 1 progress 1", log.lines)
        assert_in("status 2 progress 2", log.lines)
        assert_in("Created the environment my-test-resource", log.lines)
コード例 #8
0
def test_distributions(demo1_spec):
    def mock_execute_command(command, env=None):
        if isinstance(command, list):
            if command == ['apt-cache', 'policy', 'libc6-dev:amd64']:
                return (b'libc6-dev: \
                        Installed: (none) \
                        Candidate: 2.19-18+deb8u4 \
                        Version table: \
                            2.19-18+deb8u4 500 \
                            500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages',
                        0)
            if command == ['apt-cache', 'policy', 'afni:amd64']:
                return (b'afni: \
                        Installed: 16.2.07~dfsg.1-2~nd90+1 \
                        Candidate: 16.2.07~dfsg.1-2~nd90+1 \
                        Version table: \
                            16.2.07~dfsg.1-2~nd90+1 500 \
                            500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages',
                        0)
            if command == ['apt-cache', 'policy', 'dcm2niix:amd64']:
                return (b'dcm2niix: \
                        Installed: (none) \
                        Candidate: 1:1.0.20171017+git3-g9ccc4c0-1~nd16.04+1 \
                        Version table: \
                            1:1.0.20171017+git3-g9ccc4c0-1~nd16.04+1 500 \
                            500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages',
                        0)
        if isinstance(command, str):
            if command.startswith('grep'):
                return (None, 1)

    provenance = Provenance.factory(demo1_spec)
    distributions = provenance.get_distributions()
    distributions = items_to_dict(distributions)
    assert set(distributions.keys()) == {'conda', 'debian'}
    # Test DebianDistribution class.
    debian_distribution = distributions['debian']
    environment = MagicMock()
    environment.execute_command = mock_execute_command
    environment.exists.return_value = False

    with patch('requests.get') as requests, \
        swallow_logs(new_level=logging.DEBUG) as log:

        requests.return_value = type("TestObject", (object, ), {})()
        requests.return_value.text = '<a href="/archive/debian/20171208T032012Z/dists/sid/">next change</a>'

        debian_distribution.initiate(environment)
        debian_distribution.install_packages(environment)

        assert_in("Adding Debian update to environment command list.",
                  log.lines)
        assert_in(
            "Adding line 'deb http://snapshot.debian.org/archive/debian/20170531T084046Z/ sid main \
contrib non-free' to /etc/apt/sources.list.d/niceman.sources.list", log.lines)
        assert_in(
            "Adding line 'deb http://snapshot-neuro.debian.net:5002/archive/neurodebian/20171208T032012Z/ \
xenial main contrib non-free' to /etc/apt/sources.list.d/niceman.sources.list",
            log.lines)
        assert_in(
            "Adding line 'deb http://snapshot-neuro.debian.net:5002/archive/neurodebian/20171208T032012Z/ \
xenial main contrib non-free' to /etc/apt/sources.list.d/niceman.sources.list",
            log.lines)
        assert_in(
            'Installing libc6-dev=2.19-18+deb8u4, afni=16.2.07~dfsg.1-5~nd16.04+1, \
dcm2niix=1:1.0.20171017+git3-g9ccc4c0-1~nd16.04+1', log.lines)
    """
コード例 #9
0
def test_diff_no_distributions():
    with swallow_outputs() as outputs:
        args = ['diff', diff_1_yaml, empty_yaml]
        main(args)
        assert_equal(outputs.err, '')
        assert_in('Debian packages:', outputs.out)
        assert_in('< lib1only x86 2:1.6.4-3', outputs.out)
        assert_in('< libsame x86 2.4.6', outputs.out)
        assert_in('< libarchdiff x86 2.4.6', outputs.out)
        assert_in('< libversdiff x86 2.4.6', outputs.out)
        assert_in('Conda packages:', outputs.out)
        assert_in('< c_lib1only py36_0 2:1.6.4-3', outputs.out)
        assert_in('< c_libsame py36_0 2.4.6', outputs.out)
        assert_in('< c_libbuilddiff py36_0 2.4.6', outputs.out)
        assert_in('< c_libversdiff py36_0 2.4.6', outputs.out)
        assert_in('Files:', outputs.out)
        assert_in('< /etc/a', outputs.out)
        assert_in('< /etc/b', outputs.out)
コード例 #10
0
def test_diff_conda_packages():
    with swallow_outputs() as outputs:
        args = ['diff', diff_1_yaml, diff_2_yaml]
        main(args)
        assert_equal(outputs.err, '')
        assert_in('Conda packages:', outputs.out)
        assert_in('< c_lib1only py36_0 2:1.6.4-3', outputs.out)
        assert_in('> c_lib2only py36_0 2:1.6.4-3', outputs.out)
        assert_in('< c_libbuilddiff py36_0 2.4.6', outputs.out)
        assert_in('> c_libbuilddiff hdf63c60_3 2.4.6', outputs.out)
        # TO DO: ensure the version strings (second and third lines below) 
        # come from the conda report -- these could just match the debian 
        # output checked in test_diff_debian_packages()
        assert_in('Conda package c_libversdiff py36_0:', outputs.out)
        assert_in('< 2.4.6', outputs.out)
        assert_in('> 2.4.7', outputs.out)
        assert_not_in('c_libsame', outputs.out)
コード例 #11
0
def test_diff_debian_packages():
    with swallow_outputs() as outputs:
        args = ['diff', diff_1_yaml, diff_2_yaml]
        main(args)
        assert_equal(outputs.err, '')
        assert_in('Debian packages:', outputs.out)
        assert_in('< lib1only x86 2:1.6.4-3', outputs.out)
        assert_in('> lib2only x86 2:1.6.4-3', outputs.out)
        assert_in('< libarchdiff x86 2.4.6', outputs.out)
        assert_in('> libarchdiff amd64 2.4.6', outputs.out)
        assert_in('Debian package libversdiff x86:', outputs.out)
        assert_in('< 2.4.6', outputs.out)
        assert_in('> 2.4.7', outputs.out)
        assert_not_in('libsame', outputs.out)
コード例 #12
0
def test_diff_svn():
    with swallow_outputs() as outputs:
        args = ['diff', diff_1_yaml, diff_2_yaml]
        main(args)
        assert_equal(outputs.err, '')
        assert_in('SVN repositories:', outputs.out)
        assert_in('< c8ed47ab-45c9-818d-5d62-549dcc6d97d4 (/path/to/svn/repo/1/only)', outputs.out)
        assert_in('> d7192e3a-60de-5caa-ccdc9525dea75aabf (/path/to/svn/repo/2/only)', outputs.out)
        assert_in('SVN repository 95e4b738-84c7-154c-f082-34d40e21fdd4', outputs.out)
        assert_in('< 12 (/path/1/to/different/svn/commit)', outputs.out)
        assert_in('> 14 (/path/2/to/different/svn/commit)', outputs.out)
        assert_not_in('/path/1/to/common/svn/repo', outputs.out)
        assert_not_in('/path/2/to/common/svn/repo', outputs.out)
コード例 #13
0
def test_diff_git():
    with swallow_outputs() as outputs:
        args = ['diff', diff_1_yaml, diff_2_yaml]
        main(args)
        assert_equal(outputs.err, '')
        assert_in('Git repositories:', outputs.out)
        assert_in('< 43e8e6577c7bf493ddb01ea7d49bef7dc7a6643b (/path/to/git/repo/1/only)', outputs.out)
        assert_in('> 64b1865267891fdd1a45251ca6f32df213dc546e (/path/to/git/repo/2/only)', outputs.out)
        assert_in('Git repository 5b8267181f6cae8dc37aeef21ea54171bd932522', outputs.out)
        assert_in('< 3e3aaa73a9c0ca061c7679af5fa7318e70f528ac (/path/1/to/different/git/commit)', outputs.out)
        assert_in('> 9d199f7fa7e6f691719e0860c5cf81193e815ad5 (/path/2/to/different/git/commit)', outputs.out)
        assert_not_in('/path/1/to/common/git/repo', outputs.out)
        assert_not_in('/path/2/to/common/git/repo', outputs.out)
        assert_not_in('99ac7f69a070077038a9eb9eca61c028db97181d', outputs.out)
        assert_not_in('d057b128759d80a47500adba0c4d3e95092bb87f', outputs.out)