예제 #1
0
def test_is_obsolete():
    examinee = create_upgrade_pr(
        from_ref=cm.ComponentReference(
            name='c1',
            componentName='c1',
            version='1.2.3',
        ),
        to_ref=cm.ComponentReference(
            name='c1',
            componentName='c1',
            version='2.0.0',
        ),
    )

    cref = cm.ComponentReference(
        name='c1',
        componentName='c1',
        version='6.0.0',
    )

    reference_component = cm.Component(name='c1',
                                       version='6.6.6',
                                       repositoryContexts=(),
                                       provider=None,
                                       sources=(),
                                       resources=(),
                                       componentReferences=())

    # test with reference component not declaring this dependency
    assert not examinee.is_obsolete(reference_component=reference_component)

    # add differently-named dependency with greater version
    reference_component.componentReferences = (dataclasses.replace(
        cref, name='other-name'), )
    assert not examinee.is_obsolete(reference_component=reference_component)

    # add same-named web dependency with lesser version
    reference_component.componentReferences = (dataclasses.replace(
        cref, version='0.0.1'), )
    assert not examinee.is_obsolete(reference_component=reference_component)

    # add same-named resource of greater version but different type
    # todo: we should actually also test dependencies towards resources of two different types
    reference_component.resources = (cm.Resource(
        name='c1',
        version='6.0.0',
        type=cm.ResourceType.GENERIC,
        access=None,
    ), )
    assert not examinee.is_obsolete(reference_component=reference_component)

    # finally, add greater dependency of matching type and name
    reference_component.componentReferences = (dataclasses.replace(
        cref, version='9.9.9'), )
    assert examinee.is_obsolete(reference_component=reference_component)
예제 #2
0
def test_ctor():
    # upgrade component
    create_upgrade_pr(
        from_ref=cm.ComponentReference(name='abcd',
                                       componentName='a.b/c1',
                                       version='1.2.3'),
        to_ref=cm.ComponentReference(name='abcd',
                                     componentName='a.b/c1',
                                     version='2.0.0'),
    )
    # upgrade web dependency
    create_upgrade_pr(
        from_ref=cm.Resource(
            name='dep_red',
            version='1.2.3',
            type=cm.ResourceType.GENERIC,
            access=None,
        ),
        to_ref=cm.Resource(
            name='dep_red',
            version='2.0.0',
            type=cm.ResourceType.GENERIC,
            access=None,
        ),
    )
    # error: mismatch in dependency name
    with pytest.raises(ValueError, match='reference name mismatch'):
        create_upgrade_pr(
            from_ref=cm.ComponentReference(name='foo',
                                           componentName='a.b/c1',
                                           version='1.2.3'),
            to_ref=cm.ComponentReference(name='bar',
                                         componentName='a.b/c1',
                                         version='2.0.0'),
        )
    # error: mismatch in dependency types
    with pytest.raises(ValueError, match='reference types do not match'):
        create_upgrade_pr(
            from_ref=cm.ComponentReference(name='dep_red',
                                           componentName='a.b/c1',
                                           version='1.2.3'),
            to_ref=cm.Resource(
                name='dep_red',
                version='2.0.0',
                type=cm.ResourceType.GENERIC,
                access=None,
            ),
        )
예제 #3
0
 def cref(component: cm.Component):
     return cm.ComponentReference(
         name='dont-care',
         componentName=component.name,
         version=component.version,
         extraIdentity={},
     )
예제 #4
0
def _raw_component_dep_to_v2(raw: dict):
    name = raw['name']

    return cm.ComponentReference(
        componentName=name,
        name=name,
        version=raw['version'],
    )
예제 #5
0
def _raw_component_dep_to_v2(raw: dict):
    name = raw['name']

    return cm.ComponentReference(
        componentName=name,
        name=product.v2.mangle_name(name),
        version=raw['version'],
    )
예제 #6
0
def _raw_component_dep_to_v2(raw: dict):
    name = raw['name']
    args = {
        'componentName': name,
        'name': product.v2.mangle_name(name),
        'version': raw['version'],
    }

    if 'labels' in raw:
        args['labels'] = raw['labels']

    return cm.ComponentReference(**args)
예제 #7
0
파일: util.py 프로젝트: gardener/cc-utils
    def _pr_to_upgrade_pull_request(self, pull_request):
        ci.util.not_none(pull_request)

        match = self.PR_TITLE_PATTERN.fullmatch(pull_request.title)
        if match is None:
            raise ValueError(
                "PR-title '{t}' did not match title-schema".format(
                    t=pull_request.title))

        reference_type_name = match.group(1)
        if not reference_type_name:
            # backwards compatibility hack
            reference_type_name = 'component'

        if not reference_type_name == 'component':
            raise NotImplementedError(
                reference_type_name)  # todo: support all resources

        ref_name = match.group(2)
        from_version = match.group(3)
        to_version = match.group(4)

        from_ref = cm.ComponentReference(
            name=ref_name,
            componentName=ref_name,
            version=from_version,
        )
        to_ref = cm.ComponentReference(
            name=ref_name,
            componentName=ref_name,
            version=to_version,
        )

        return UpgradePullRequest(
            pull_request=pull_request,
            from_ref=from_ref,
            to_ref=to_ref,
        )