def test_multi_rename():
    """Test rename for loop."""
    jobs_artifacts = [
        ('1pfx2im3cj6faq57', 'R.rst', 1270), ('1pfx2im3cj6faq58', 'R.rst', 1271), ('1pfx2im3cj6faq59', 'R.rst', 1272),
        ('1pfx2im3cj6faq57', '.cov1', 2270), ('1pfx2im3cj6faq58', '.cov1', 2271), ('1pfx2im3cj6faq59', '.cov1', 2272),
        ('1pfx2im3cj6faq57', '1cov1', 3270), ('1pfx2im3cj6faq58', '1cov1', 3271), ('1pfx2im3cj6faq59', '1cov1', 3272),
        ('1pfx2im3cj6faq57', '1cov.', 4270), ('1pfx2im3cj6faq58', '1cov.', 4271), ('1pfx2im3cj6faq59', '1cov.', 4272),
    ]
    config = dict(always_job_dirs=False, no_job_dirs='rename', dir=None)
    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict([
        (py.path.local('R.rst'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/R.rst', 1270)),
        (py.path.local('R_.rst'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/R.rst', 1271)),
        (py.path.local('R__.rst'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/R.rst', 1272)),
        (py.path.local('.cov1'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/.cov1', 2270)),
        (py.path.local('.cov1_'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/.cov1', 2271)),
        (py.path.local('.cov1__'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/.cov1', 2272)),
        (py.path.local('1cov1'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/1cov1', 3270)),
        (py.path.local('1cov1_'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/1cov1', 3271)),
        (py.path.local('1cov1__'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/1cov1', 3272)),
        (py.path.local('1cov.'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/1cov.', 4270)),
        (py.path.local('1cov_.'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/1cov.', 4271)),
        (py.path.local('1cov__.'), (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/1cov.', 4272)),
    ])
    assert actual == expected
Пример #2
0
def test_two(caplog, no_job_dirs):
    """Test with two artifacts in one job.

    :param caplog: pytest extension fixture.
    :param str no_job_dirs: Test with --no-job-dirs.
    """
    jobs_artifacts = [('spfxkimxcj6faq57', 'artifacts.py', 12479),
                      ('spfxkimxcj6faq57', 'README.rst', 1270)]
    config = dict(always_job_dirs=False, no_job_dirs=no_job_dirs, dir=None)
    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict([
        (py.path.local('artifacts.py'),
         (API_PREFIX + '/buildjobs/spfxkimxcj6faq57/artifacts/artifacts.py',
          12479)),
        (py.path.local('README.rst'),
         (API_PREFIX + '/buildjobs/spfxkimxcj6faq57/artifacts/README.rst',
          1270)),
    ])
    assert actual == expected

    messages = [r.message for r in caplog.records]
    if no_job_dirs:
        assert 'Only one job ID, automatically setting job_dirs = False.' not in messages
    else:
        assert 'Only one job ID, automatically setting job_dirs = False.' in messages
Пример #3
0
def test_one(caplog, always_job_dirs, dir_):
    """Test with one artifact.

    :param caplog: pytest extension fixture.
    :param bool always_job_dirs: Test with --always-job-dirs.
    :param py.path dir_: Test with --dir.
    """
    jobs_artifacts = [('spfxkimxcj6faq57', '.coverage', 1692)]
    config = dict(always_job_dirs=always_job_dirs,
                  no_job_dirs=None,
                  dir=str(dir_) if dir_ else None)
    actual = artifacts_urls(config, jobs_artifacts)

    expected_local_path = dir_.join('.coverage') if dir_ else py.path.local(
        '.coverage')
    if always_job_dirs:
        expected_local_path = expected_local_path.dirpath().join(
            'spfxkimxcj6faq57', '.coverage')
    expected = {
        expected_local_path:
        (API_PREFIX + '/buildjobs/spfxkimxcj6faq57/artifacts/.coverage', 1692)
    }
    assert actual == expected

    messages = [r.message for r in caplog.records]
    if always_job_dirs:
        assert 'Only one job ID, automatically setting job_dirs = False.' not in messages
    else:
        assert 'Only one job ID, automatically setting job_dirs = False.' in messages
def test_two(caplog, no_job_dirs):
    """Test with two artifacts in one job."""
    jobs_artifacts = [('spfxkimxcj6faq57', 'artifacts.py', 12479), ('spfxkimxcj6faq57', 'README.rst', 1270)]
    config = dict(always_job_dirs=False, no_job_dirs=no_job_dirs, dir=None)
    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict([
        (py.path.local('artifacts.py'), (API_PREFIX + '/buildjobs/spfxkimxcj6faq57/artifacts/artifacts.py', 12479)),
        (py.path.local('README.rst'), (API_PREFIX + '/buildjobs/spfxkimxcj6faq57/artifacts/README.rst', 1270)),
    ])
    assert actual == expected

    messages = [r.message for r in caplog.records()]
    if no_job_dirs:
        assert 'Only one job ID, automatically setting job_dirs = False.' not in messages
    else:
        assert 'Only one job ID, automatically setting job_dirs = False.' in messages
def test_one(caplog, always_job_dirs, dir_):
    """Test with one artifact."""
    jobs_artifacts = [('spfxkimxcj6faq57', '.coverage', 1692)]
    config = dict(always_job_dirs=always_job_dirs, no_job_dirs=None, dir=str(dir_) if dir_ else None)
    actual = artifacts_urls(config, jobs_artifacts)

    expected_local_path = dir_.join('.coverage') if dir_ else py.path.local('.coverage')
    if always_job_dirs:
        expected_local_path = expected_local_path.dirpath().join('spfxkimxcj6faq57', '.coverage')
    expected = {expected_local_path: (API_PREFIX + '/buildjobs/spfxkimxcj6faq57/artifacts/.coverage', 1692)}
    assert actual == expected

    messages = [r.message for r in caplog.records()]
    if always_job_dirs:
        assert 'Only one job ID, automatically setting job_dirs = False.' not in messages
    else:
        assert 'Only one job ID, automatically setting job_dirs = False.' in messages
Пример #6
0
def test_multi_rename():
    """Test rename for loop."""
    jobs_artifacts = [
        ('1pfx2im3cj6faq57', 'R.rst', 1270),
        ('1pfx2im3cj6faq58', 'R.rst', 1271),
        ('1pfx2im3cj6faq59', 'R.rst', 1272),
        ('1pfx2im3cj6faq57', '.cov1', 2270),
        ('1pfx2im3cj6faq58', '.cov1', 2271),
        ('1pfx2im3cj6faq59', '.cov1', 2272),
        ('1pfx2im3cj6faq57', '1cov1', 3270),
        ('1pfx2im3cj6faq58', '1cov1', 3271),
        ('1pfx2im3cj6faq59', '1cov1', 3272),
        ('1pfx2im3cj6faq57', '1cov.', 4270),
        ('1pfx2im3cj6faq58', '1cov.', 4271),
        ('1pfx2im3cj6faq59', '1cov.', 4272),
    ]
    config = dict(always_job_dirs=False, no_job_dirs='rename', dir=None)
    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict([
        (py.path.local('R.rst'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/R.rst', 1270)),
        (py.path.local('R_.rst'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/R.rst', 1271)),
        (py.path.local('R__.rst'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/R.rst', 1272)),
        (py.path.local('.cov1'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/.cov1', 2270)),
        (py.path.local('.cov1_'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/.cov1', 2271)),
        (py.path.local('.cov1__'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/.cov1', 2272)),
        (py.path.local('1cov1'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/1cov1', 3270)),
        (py.path.local('1cov1_'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/1cov1', 3271)),
        (py.path.local('1cov1__'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/1cov1', 3272)),
        (py.path.local('1cov.'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq57/artifacts/1cov.', 4270)),
        (py.path.local('1cov_.'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq58/artifacts/1cov.', 4271)),
        (py.path.local('1cov__.'),
         (API_PREFIX + '/buildjobs/1pfx2im3cj6faq59/artifacts/1cov.', 4272)),
    ])
    assert actual == expected
def test_subdirectory():
    """Test with artifact "file names" being file paths with subdirectories.

    From: https://ci.appveyor.com/project/sayedihashimi/package-web
    """
    jobs_artifacts = [
        ('r97evl3jva2ejs6b', 'src/OutputRoot/PackageWeb.1.1.17.nupkg', 60301),
        ('s97evl3jva2ejs6b', 'src/OutputRoot/PackageWeb.1.1.10.nupkg', 50301),
    ]
    config = dict(always_job_dirs=False, no_job_dirs=None, dir=None)
    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict([
        (py.path.local('src/OutputRoot/PackageWeb.1.1.17.nupkg'),
         (API_PREFIX + '/buildjobs/r97evl3jva2ejs6b/artifacts/src/OutputRoot/PackageWeb.1.1.17.nupkg', 60301)),
        (py.path.local('src/OutputRoot/PackageWeb.1.1.10.nupkg'),
         (API_PREFIX + '/buildjobs/s97evl3jva2ejs6b/artifacts/src/OutputRoot/PackageWeb.1.1.10.nupkg', 50301)),
    ])
    assert actual == expected
Пример #8
0
def test_subdirectory():
    """Test with artifact "file names" being file paths with subdirectories.

    From: https://ci.appveyor.com/project/sayedihashimi/package-web
    """
    jobs_artifacts = [
        ('r97evl3jva2ejs6b', 'src/OutputRoot/PackageWeb.1.1.17.nupkg', 60301),
        ('s97evl3jva2ejs6b', 'src/OutputRoot/PackageWeb.1.1.10.nupkg', 50301),
    ]
    config = dict(always_job_dirs=False, no_job_dirs=None, dir=None)
    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict([
        (py.path.local('src/OutputRoot/PackageWeb.1.1.17.nupkg'),
         (API_PREFIX +
          '/buildjobs/r97evl3jva2ejs6b/artifacts/src/OutputRoot/PackageWeb.1.1.17.nupkg',
          60301)),
        (py.path.local('src/OutputRoot/PackageWeb.1.1.10.nupkg'),
         (API_PREFIX +
          '/buildjobs/s97evl3jva2ejs6b/artifacts/src/OutputRoot/PackageWeb.1.1.10.nupkg',
          50301)),
    ])
    assert actual == expected
def test_multiple_jobs(caplog, no_job_dirs):
    """Test with multiple jobs.

    From: https://ci.appveyor.com/project/racker-buildbot/luv
    """
    jobs_artifacts = [
        ('v5wnn9k8auqcqovw', 'luajit.exe', 675840), ('v5wnn9k8auqcqovw', 'luv.dll', 891392),
        ('v5wnn9k8auqcqovw', '.coverage', 123), ('v5wnn9k8auqcqovw', 'no_ext', 456),
        ('bpgcbvqmawv1jw06', 'luajit.exe', 539136), ('bpgcbvqmawv1jw06', 'luv.dll', 718336),
        ('bpgcbvqmawv1jw06', '.coverage', 789), ('bpgcbvqmawv1jw06', 'no_ext', 101),
    ]
    config = dict(always_job_dirs=False, no_job_dirs=no_job_dirs, dir=None)

    # Handle collision.
    if no_job_dirs == 'unknown':
        with pytest.raises(HandledError):
            artifacts_urls(config, jobs_artifacts)
        assert caplog.records()[-2].message.startswith('Collision:')
        return

    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict()
    messages = [r.message for r in caplog.records()]

    # Test-specific API URL.
    url = API_PREFIX + '/buildjobs/%s/artifacts/%s'

    if not no_job_dirs:
        assert 'Multiple job IDs with file conflicts, automatically setting job_dirs = True' in messages
        expected[py.path.local('v5wnn9k8auqcqovw/luajit.exe')] = (url % ('v5wnn9k8auqcqovw', 'luajit.exe'), 675840)
        expected[py.path.local('v5wnn9k8auqcqovw/luv.dll')] = (url % ('v5wnn9k8auqcqovw', 'luv.dll'), 891392)
        expected[py.path.local('v5wnn9k8auqcqovw/.coverage')] = (url % ('v5wnn9k8auqcqovw', '.coverage'), 123)
        expected[py.path.local('v5wnn9k8auqcqovw/no_ext')] = (url % ('v5wnn9k8auqcqovw', 'no_ext'), 456)
        expected[py.path.local('bpgcbvqmawv1jw06/luajit.exe')] = (url % ('bpgcbvqmawv1jw06', 'luajit.exe'), 539136)
        expected[py.path.local('bpgcbvqmawv1jw06/luv.dll')] = (url % ('bpgcbvqmawv1jw06', 'luv.dll'), 718336)
        expected[py.path.local('bpgcbvqmawv1jw06/.coverage')] = (url % ('bpgcbvqmawv1jw06', '.coverage'), 789)
        expected[py.path.local('bpgcbvqmawv1jw06/no_ext')] = (url % ('bpgcbvqmawv1jw06', 'no_ext'), 101)
    else:
        assert 'Multiple job IDs with file conflicts, automatically setting job_dirs = True' not in messages

    if no_job_dirs == 'skip':
        assert any(re.match(r'Skipping.*luajit\.exe.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Skipping.*luv\.dll.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Skipping.*\.coverage.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Skipping.*no_ext.*bpgcbvqmawv1jw06', m) for m in messages)
        expected[py.path.local('luajit.exe')] = (url % ('v5wnn9k8auqcqovw', 'luajit.exe'), 675840)
        expected[py.path.local('luv.dll')] = (url % ('v5wnn9k8auqcqovw', 'luv.dll'), 891392)
        expected[py.path.local('.coverage')] = (url % ('v5wnn9k8auqcqovw', '.coverage'), 123)
        expected[py.path.local('no_ext')] = (url % ('v5wnn9k8auqcqovw', 'no_ext'), 456)
    else:
        assert not any(re.match(r'Skipping.*luajit\.exe.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Skipping.*luv\.dll.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Skipping.*\.coverage.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Skipping.*no_ext.*bpgcbvqmawv1jw06', m) for m in messages)

    if no_job_dirs == 'overwrite':
        assert any(re.match(r'Overwriting.*luajit\.exe.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Overwriting.*luv\.dll.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Overwriting.*\.coverage.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Overwriting.*no_ext.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)
        expected[py.path.local('luajit.exe')] = (url % ('bpgcbvqmawv1jw06', 'luajit.exe'), 539136)
        expected[py.path.local('luv.dll')] = (url % ('bpgcbvqmawv1jw06', 'luv.dll'), 718336)
        expected[py.path.local('.coverage')] = (url % ('bpgcbvqmawv1jw06', '.coverage'), 789)
        expected[py.path.local('no_ext')] = (url % ('bpgcbvqmawv1jw06', 'no_ext'), 101)
    else:
        assert not any(re.match(r'Overwriting.*luajit\.exe.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Overwriting.*luv\.dll.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Overwriting.*\.coverage.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Overwriting.*no_ext.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m) for m in messages)

    if no_job_dirs == 'rename':
        assert any(re.match(r'Renaming.*luajit\.exe.*luajit_\.exe.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Renaming.*luv\.dll.*luv_\.dll.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Renaming.*\.coverage.*\.coverage_.*bpgcbvqmawv1jw06', m) for m in messages)
        assert any(re.match(r'Renaming.*no_ext.*no_ext_.*bpgcbvqmawv1jw06', m) for m in messages)
        expected[py.path.local('luajit.exe')] = (url % ('v5wnn9k8auqcqovw', 'luajit.exe'), 675840)
        expected[py.path.local('luv.dll')] = (url % ('v5wnn9k8auqcqovw', 'luv.dll'), 891392)
        expected[py.path.local('.coverage')] = (url % ('v5wnn9k8auqcqovw', '.coverage'), 123)
        expected[py.path.local('no_ext')] = (url % ('v5wnn9k8auqcqovw', 'no_ext'), 456)
        expected[py.path.local('luajit_.exe')] = (url % ('bpgcbvqmawv1jw06', 'luajit.exe'), 539136)
        expected[py.path.local('luv_.dll')] = (url % ('bpgcbvqmawv1jw06', 'luv.dll'), 718336)
        expected[py.path.local('.coverage_')] = (url % ('bpgcbvqmawv1jw06', '.coverage'), 789)
        expected[py.path.local('no_ext_')] = (url % ('bpgcbvqmawv1jw06', 'no_ext'), 101)
    else:
        assert not any(re.match(r'Renaming.*luajit\.exe.*luajit_\.exe.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Renaming.*luv\.dll.*luv_\.dll.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Renaming.*\.coverage.*\.coverage_.*bpgcbvqmawv1jw06', m) for m in messages)
        assert not any(re.match(r'Renaming.*no_ext.*no_ext_.*bpgcbvqmawv1jw06', m) for m in messages)

    assert actual == expected
Пример #10
0
def test_multiple_jobs(caplog, no_job_dirs):
    """Test with multiple jobs.

    From: https://ci.appveyor.com/project/racker-buildbot/luv

    :param caplog: pytest extension fixture.
    :param str no_job_dirs: Test with --no-job-dirs.
    """
    jobs_artifacts = [
        ('v5wnn9k8auqcqovw', 'luajit.exe', 675840),
        ('v5wnn9k8auqcqovw', 'luv.dll', 891392),
        ('v5wnn9k8auqcqovw', '.coverage', 123),
        ('v5wnn9k8auqcqovw', 'no_ext', 456),
        ('bpgcbvqmawv1jw06', 'luajit.exe', 539136),
        ('bpgcbvqmawv1jw06', 'luv.dll', 718336),
        ('bpgcbvqmawv1jw06', '.coverage', 789),
        ('bpgcbvqmawv1jw06', 'no_ext', 101),
    ]
    config = dict(always_job_dirs=False, no_job_dirs=no_job_dirs, dir=None)

    # Handle collision.
    if no_job_dirs == 'unknown':
        with pytest.raises(HandledError):
            artifacts_urls(config, jobs_artifacts)
        assert caplog.records[-2].message.startswith('Collision:')
        return

    actual = artifacts_urls(config, jobs_artifacts)
    expected = dict()
    messages = [r.message for r in caplog.records]

    # Test-specific API URL.
    url = API_PREFIX + '/buildjobs/%s/artifacts/%s'

    if not no_job_dirs:
        assert 'Multiple job IDs with file conflicts, automatically setting job_dirs = True' in messages
        expected[py.path.local('v5wnn9k8auqcqovw/luajit.exe')] = (
            url % ('v5wnn9k8auqcqovw', 'luajit.exe'), 675840)
        expected[py.path.local('v5wnn9k8auqcqovw/luv.dll')] = (
            url % ('v5wnn9k8auqcqovw', 'luv.dll'), 891392)
        expected[py.path.local('v5wnn9k8auqcqovw/.coverage')] = (
            url % ('v5wnn9k8auqcqovw', '.coverage'), 123)
        expected[py.path.local('v5wnn9k8auqcqovw/no_ext')] = (
            url % ('v5wnn9k8auqcqovw', 'no_ext'), 456)
        expected[py.path.local('bpgcbvqmawv1jw06/luajit.exe')] = (
            url % ('bpgcbvqmawv1jw06', 'luajit.exe'), 539136)
        expected[py.path.local('bpgcbvqmawv1jw06/luv.dll')] = (
            url % ('bpgcbvqmawv1jw06', 'luv.dll'), 718336)
        expected[py.path.local('bpgcbvqmawv1jw06/.coverage')] = (
            url % ('bpgcbvqmawv1jw06', '.coverage'), 789)
        expected[py.path.local('bpgcbvqmawv1jw06/no_ext')] = (
            url % ('bpgcbvqmawv1jw06', 'no_ext'), 101)
    else:
        assert 'Multiple job IDs with file conflicts, automatically setting job_dirs = True' not in messages

    if no_job_dirs == 'skip':
        assert any(
            re.match(r'Skipping.*luajit\.exe.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert any(
            re.match(r'Skipping.*luv\.dll.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert any(
            re.match(r'Skipping.*\.coverage.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert any(
            re.match(r'Skipping.*no_ext.*bpgcbvqmawv1jw06', m)
            for m in messages)
        expected[py.path.local('luajit.exe')] = (
            url % ('v5wnn9k8auqcqovw', 'luajit.exe'), 675840)
        expected[py.path.local('luv.dll')] = (url %
                                              ('v5wnn9k8auqcqovw', 'luv.dll'),
                                              891392)
        expected[py.path.local('.coverage')] = (
            url % ('v5wnn9k8auqcqovw', '.coverage'), 123)
        expected[py.path.local('no_ext')] = (url %
                                             ('v5wnn9k8auqcqovw', 'no_ext'),
                                             456)
    else:
        assert not any(
            re.match(r'Skipping.*luajit\.exe.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert not any(
            re.match(r'Skipping.*luv\.dll.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert not any(
            re.match(r'Skipping.*\.coverage.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert not any(
            re.match(r'Skipping.*no_ext.*bpgcbvqmawv1jw06', m)
            for m in messages)

    if no_job_dirs == 'overwrite':
        assert any(
            re.match(
                r'Overwriting.*luajit\.exe.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06',
                m) for m in messages)
        assert any(
            re.match(
                r'Overwriting.*luv\.dll.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06',
                m) for m in messages)
        assert any(
            re.match(
                r'Overwriting.*\.coverage.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06',
                m) for m in messages)
        assert any(
            re.match(
                r'Overwriting.*no_ext.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m)
            for m in messages)
        expected[py.path.local('luajit.exe')] = (
            url % ('bpgcbvqmawv1jw06', 'luajit.exe'), 539136)
        expected[py.path.local('luv.dll')] = (url %
                                              ('bpgcbvqmawv1jw06', 'luv.dll'),
                                              718336)
        expected[py.path.local('.coverage')] = (
            url % ('bpgcbvqmawv1jw06', '.coverage'), 789)
        expected[py.path.local('no_ext')] = (url %
                                             ('bpgcbvqmawv1jw06', 'no_ext'),
                                             101)
    else:
        assert not any(
            re.match(
                r'Overwriting.*luajit\.exe.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06',
                m) for m in messages)
        assert not any(
            re.match(
                r'Overwriting.*luv\.dll.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06',
                m) for m in messages)
        assert not any(
            re.match(
                r'Overwriting.*\.coverage.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06',
                m) for m in messages)
        assert not any(
            re.match(
                r'Overwriting.*no_ext.*v5wnn9k8auqcqovw.*bpgcbvqmawv1jw06', m)
            for m in messages)

    if no_job_dirs == 'rename':
        assert any(
            re.match(r'Renaming.*luajit\.exe.*luajit_\.exe.*bpgcbvqmawv1jw06',
                     m) for m in messages)
        assert any(
            re.match(r'Renaming.*luv\.dll.*luv_\.dll.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert any(
            re.match(r'Renaming.*\.coverage.*\.coverage_.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert any(
            re.match(r'Renaming.*no_ext.*no_ext_.*bpgcbvqmawv1jw06', m)
            for m in messages)
        expected[py.path.local('luajit.exe')] = (
            url % ('v5wnn9k8auqcqovw', 'luajit.exe'), 675840)
        expected[py.path.local('luv.dll')] = (url %
                                              ('v5wnn9k8auqcqovw', 'luv.dll'),
                                              891392)
        expected[py.path.local('.coverage')] = (
            url % ('v5wnn9k8auqcqovw', '.coverage'), 123)
        expected[py.path.local('no_ext')] = (url %
                                             ('v5wnn9k8auqcqovw', 'no_ext'),
                                             456)
        expected[py.path.local('luajit_.exe')] = (
            url % ('bpgcbvqmawv1jw06', 'luajit.exe'), 539136)
        expected[py.path.local('luv_.dll')] = (url %
                                               ('bpgcbvqmawv1jw06', 'luv.dll'),
                                               718336)
        expected[py.path.local('.coverage_')] = (
            url % ('bpgcbvqmawv1jw06', '.coverage'), 789)
        expected[py.path.local('no_ext_')] = (url %
                                              ('bpgcbvqmawv1jw06', 'no_ext'),
                                              101)
    else:
        assert not any(
            re.match(r'Renaming.*luajit\.exe.*luajit_\.exe.*bpgcbvqmawv1jw06',
                     m) for m in messages)
        assert not any(
            re.match(r'Renaming.*luv\.dll.*luv_\.dll.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert not any(
            re.match(r'Renaming.*\.coverage.*\.coverage_.*bpgcbvqmawv1jw06', m)
            for m in messages)
        assert not any(
            re.match(r'Renaming.*no_ext.*no_ext_.*bpgcbvqmawv1jw06', m)
            for m in messages)

    assert actual == expected