Пример #1
0
def test_affinity_linux_any():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["linux-any"],
        valid_arches
    )
    assert arch.name == 'amd64'
Пример #2
0
def test_affinity_any_arm():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["any-arm"],
        valid_arches
    )
    assert arch.name == 'armhf'
Пример #3
0
def test_affinity_out_of_order():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["ppc64", "sparc", "amd64"],
        valid_arches
    )
    assert arch.name == 'amd64'
Пример #4
0
def test_affinity_secondary():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["ppc64", "sparc"],
        valid_arches
    )
    assert arch.name == 'sparc'
Пример #5
0
def test_affinity_linux_any():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["linux-any"],
        valid_arches
    )
    assert arch.name == 'amd64'
Пример #6
0
def test_affinity_any_arm():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["any-arm"],
        valid_arches
    )
    assert arch.name == 'armhf'
Пример #7
0
def test_affinity_out_of_order():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["ppc64", "sparc", "amd64"],
        valid_arches
    )
    assert arch.name == 'amd64'
Пример #8
0
def test_affinity_secondary():
    arch = get_preferred_affinity(
        ['amd64', 'sparc', 'armhf'],
        ["ppc64", "sparc"],
        valid_arches
    )
    assert arch.name == 'sparc'
Пример #9
0
    def test_get_preferred_affinity(self, mock):
        affinity = ['amd64']
        valid = ['i386']

        arch = get_preferred_affinity(affinity, valid, self.arches)

        self.assertEquals(arch.name, 'amd64')
Пример #10
0
def test_affinity_fail():
    try:
        arch = get_preferred_affinity(['amd64', 'sparc', 'armhf'],
                                      ["ppc64", "armel"], valid_arches)
        assert False == True, "Didn't bomb out as expected."
    except ValueError:
        pass
Пример #11
0
def test_affinity_fail():
    try:
        arch = get_preferred_affinity(
            ['amd64', 'sparc', 'armhf'],
            ["ppc64", "armel"],
            valid_arches
        )
        assert False == True, "Didn't bomb out as expected."
    except ValueError:
        pass
Пример #12
0
def create_source(dsc, group_suite, component, uploader,
                  affinity_preference, valid_affinities):
    source = Source(
        name=dsc['Source'],
        version=dsc['Version'],
        group_suite=group_suite,
        component=component,
        uploader=uploader,
        uploaded_at=datetime.utcnow()
    )

    source.arches = get_source_arches(dsc['Architecture'].split(),
                                      group_suite.arches)

    # Sources building arch-dependent packages should build any
    # arch-independent packages on an architecture it is building
    # arch-dependent packages on.
    source.affinity = get_preferred_affinity(
        affinity_preference,
        valid_affinities.split(),
        [x for x in source.arches if x.name not in ["source", "all"]] or
        [x for x in source.group_suite.arches if x.name not in ["source", "all"]]
    )

    MAINTAINER = re.compile("(?P<name>.*) \<(?P<email>.*)\>")

    source.maintainers.append(Maintainer(
        comaintainer=False,
        original_maintainer=False,
        **MAINTAINER.match(dsc.get('Maintainer')).groupdict()
    ))

    if dsc.get('XSBC-Original-Maintainer', None):
        source.maintainers.append(Maintainer(
            comaintainer=False,
            original_maintainer=True,
            **MAINTAINER.match(dsc.get('XSBC-Original-Maintainer')).groupdict()
        ))

    whos = re.findall(r'(?:[^,"]|"(?:\\.|[^"])*")+', dsc.get("Uploaders", ""))
    for who in [x.strip() for x in whos if x.strip() != ""]:
        source.maintainers.append(Maintainer(
            comaintainer=True,
            original_maintainer=False,
            **MAINTAINER.match(who).groupdict()
        ))

    return source
Пример #13
0
def create_source(dsc, group_suite, component, uploader, affinity_preference,
                  valid_affinities):
    source = Source(name=dsc['Source'],
                    version=dsc['Version'],
                    group_suite=group_suite,
                    component=component,
                    uploader=uploader,
                    uploaded_at=datetime.utcnow())

    source.arches = get_source_arches(dsc['Architecture'].split(),
                                      group_suite.arches)

    # Sources building arch-dependent packages should build any
    # arch-independent packages on an architecture it is building
    # arch-dependent packages on.
    source.affinity = get_preferred_affinity(
        affinity_preference, valid_affinities.split(),
        [x for x in source.arches if x.name not in ["source", "all"]] or [
            x for x in source.group_suite.arches
            if x.name not in ["source", "all"]
        ])

    MAINTAINER = re.compile("(?P<name>.*) \<(?P<email>.*)\>")

    source.maintainers.append(
        Maintainer(comaintainer=False,
                   original_maintainer=False,
                   **MAINTAINER.match(dsc.get('Maintainer')).groupdict()))

    if dsc.get('XSBC-Original-Maintainer', None):
        source.maintainers.append(
            Maintainer(comaintainer=False,
                       original_maintainer=True,
                       **MAINTAINER.match(
                           dsc.get('XSBC-Original-Maintainer')).groupdict()))

    whos = re.findall(r'(?:[^,"]|"(?:\\.|[^"])*")+', dsc.get("Uploaders", ""))
    for who in [x.strip() for x in whos if x.strip() != ""]:
        source.maintainers.append(
            Maintainer(comaintainer=True,
                       original_maintainer=False,
                       **MAINTAINER.match(who).groupdict()))

    return source
Пример #14
0
def create_jobs(source, valid_affinities, externally_blocked=False):
    """
    Create jobs for Source `source`, using the an architecture matching
    `valid_affinities` for any arch "all" jobs.
    """

    aall = None
    for arch in source.group_suite.arches:
        if arch.name == "all":
            aall = arch
            break
    else:
        raise ValueError("Can't find arch:all in the suite arches.")

    # Sources building arch-dependent packages should build any
    # arch-independent packages on an architecture it is building
    # arch-dependent packages on.
    valid_arches = [x for x in source.arches if x.name != "all"] or \
                   [x for x in source.group_suite.arches if x.name != "all"]

    affinity = get_preferred_affinity(
        debile.master.core.config["affinity_preference"],
        valid_affinities.split(),
        valid_arches
    )

    for check in source.group_suite.get_source_checks():
        j = Job(name="%s [%s]" % (check.name, "source"),
                check=check, arch=aall, affinity=affinity,
                source=source, binary=None,
                externally_blocked=externally_blocked,
                builder=None, assigned_at=None,
                finished_at=None, failed=None)
        source.jobs.append(j)

    builds = {}

    for check in source.group_suite.get_build_checks():
        for arch in source.arches:
            jobaffinity = affinity if arch == aall else arch

            j = Job(name="%s [%s]" % (check.name, arch.name),
                    check=check, arch=arch, affinity=jobaffinity,
                    source=source, binary=None,
                    externally_blocked=externally_blocked,
                    builder=None, assigned_at=None,
                    finished_at=None, failed=None)
            builds[arch] = j
            source.jobs.append(j)

    for check in source.group_suite.get_binary_checks():
        for arch in source.arches:
            jobaffinity = affinity if arch == aall else arch

            deps = []
            deps.append(builds[arch])
            if aall in builds and aall != arch:
                deps.append(builds[aall])

            j = Job(name="%s [%s]" % (check.name, arch.name),
                    check=check, arch=arch, affinity=jobaffinity,
                    source=source, binary=None,
                    externally_blocked=externally_blocked,
                    builder=None, assigned_at=None,
                    finished_at=None, failed=None)
            source.jobs.append(j)

            jds = [JobDependencies(blocked_job=j, blocking_job=x)
                   for x in deps]
            for dep in jds:
                j.depedencies.append(dep)