Exemplo n.º 1
0
    def test_collects_classifiers(self):
        ivy_info = self.parse_ivy_report(
            "ivy_utils_resources/report_with_multiple_classifiers.xml")

        ref = IvyModuleRef("toplevel", "toplevelmodule", "latest")

        def collector(r):
            x = ivy_info.modules_by_ref.get(r)
            if x:
                return {x}
            else:
                return set()

        result = ivy_info.traverse_dependency_graph(ref, collector, dict())

        self.assertEqual(
            {
                IvyModule(
                    ref=IvyModuleRef(org="org1",
                                     name="name1",
                                     rev="0.0.1",
                                     classifier=None,
                                     ext="jar"),
                    artifact="ivy2cache_path/org1/name1.jar",
                    callers=(IvyModuleRef(
                        org="toplevel",
                        name="toplevelmodule",
                        rev="latest",
                        classifier=None,
                        ext="jar",
                    ), ),
                ),
                IvyModule(
                    ref=IvyModuleRef(org="org1",
                                     name="name1",
                                     rev="0.0.1",
                                     classifier="wut",
                                     ext="jar"),
                    artifact="ivy2cache_path/org1/name1-wut.jar",
                    callers=(IvyModuleRef(
                        org="toplevel",
                        name="toplevelmodule",
                        rev="latest",
                        classifier=None,
                        ext="jar",
                    ), ),
                ),
            },
            result,
        )
Exemplo n.º 2
0
        def mock_generate_ivy_jar_products(cache_key_ignored):
            ivy_products = defaultdict(list)
            ivy_info = IvyInfo()

            # Guava 16.0 would be evicted by Guava 16.0.1.  But in a real
            # resolve, it's possible that before it was evicted, it would
            # generate some resolution data.

            artifact_1 = artifact_path('bogus0')
            unused_artifact = artifact_path('unused')

            # Because guava 16.0 was evicted, it has no artifacts
            guava_0 = IvyModule(
                IvyModuleRef('com.google.guava', 'guava', '16.0'), None, [])
            guava_1 = IvyModule(
                IvyModuleRef('com.google.guava', 'guava', '16.0.1'),
                artifact_1, [])
            ivy_info.add_module(guava_0)
            ivy_info.add_module(guava_1)

            artifact_dep_1 = artifact_path('bogus1')

            # Because fake#dep 16.0 was evicted before it was resolved,
            # its deps are never examined, so we don't call add_module.
            guava_dep_0 = IvyModule(
                IvyModuleRef('com.google.fake', 'dep', '16.0.0'), None,
                [guava_0.ref])
            guava_dep_1 = IvyModule(
                IvyModuleRef('com.google.fake', 'dep', '16.0.1'),
                artifact_dep_1, [guava_1.ref])

            ivy_info.add_module(guava_dep_0)
            ivy_info.add_module(guava_dep_1)

            # Add an unrelated module to ensure that it's not returned
            unrelated_parent = IvyModuleRef('com.google.other', 'parent',
                                            '1.0')
            unrelated = IvyModule(
                IvyModuleRef('com.google.unrelated', 'unrelated', '1.0'),
                unused_artifact, [unrelated_parent])
            ivy_info.add_module(unrelated)

            ivy_products['default'] = [ivy_info]
            return ivy_products
Exemplo n.º 3
0
    def test_collects_classifiers(self):
        ivy_info = self.parse_ivy_report(
            'ivy_utils_resources/report_with_multiple_classifiers.xml')

        ref = IvyModuleRef("toplevel", "toplevelmodule", "latest")

        def collector(r):
            x = ivy_info.modules_by_ref.get(r)
            if x:
                return {x}
            else:
                return set()

        result = ivy_info.traverse_dependency_graph(ref, collector, dict())

        self.assertEqual(
            {
                IvyModule(ref=IvyModuleRef(org='org1',
                                           name='name1',
                                           rev='0.0.1',
                                           classifier=None,
                                           ext=u'jar'),
                          artifact='ivy2cache_path/org1/name1.jar',
                          callers=(IvyModuleRef(org='toplevel',
                                                name='toplevelmodule',
                                                rev='latest',
                                                classifier=None,
                                                ext=u'jar'), )),
                IvyModule(ref=IvyModuleRef(org='org1',
                                           name='name1',
                                           rev='0.0.1',
                                           classifier='wut',
                                           ext=u'jar'),
                          artifact='ivy2cache_path/org1/name1-wut.jar',
                          callers=(IvyModuleRef(org='toplevel',
                                                name='toplevelmodule',
                                                rev='latest',
                                                classifier=None,
                                                ext=u'jar'), ))
            }, result)
Exemplo n.º 4
0
        def mock_ivy_info_for(conf):
            ivy_info = IvyInfo(conf)

            # Guava 16.0 would be evicted by Guava 16.0.1.  But in a real
            # resolve, it's possible that before it was evicted, it would
            # generate some resolution data.

            artifact_1 = artifact_path("bogus0")
            unused_artifact = artifact_path("unused")

            # Because guava 16.0 was evicted, it has no artifacts.
            guava_0 = IvyModule(IvyModuleRef("com.google.guava", "guava", "16.0"), None, [])
            guava_1 = IvyModule(IvyModuleRef("com.google.guava", "guava", "16.0.1"), artifact_1, [])
            ivy_info.add_module(guava_0)
            ivy_info.add_module(guava_1)

            artifact_dep_1 = artifact_path("bogus1")

            # Because fake#dep 16.0 was evicted before it was resolved,
            # its deps are never examined, so we don't call add_module.
            guava_dep_0 = IvyModule(
                IvyModuleRef("com.google.fake", "dep", "16.0.0"), None, [guava_0.ref]
            )
            guava_dep_1 = IvyModule(
                IvyModuleRef("com.google.fake", "dep", "16.0.1"), artifact_dep_1, [guava_1.ref]
            )

            ivy_info.add_module(guava_dep_0)
            ivy_info.add_module(guava_dep_1)

            # Add an unrelated module to ensure that it's not returned.
            unrelated_parent = IvyModuleRef("com.google.other", "parent", "1.0")
            unrelated = IvyModule(
                IvyModuleRef("com.google.unrelated", "unrelated", "1.0"),
                unused_artifact,
                [unrelated_parent],
            )
            ivy_info.add_module(unrelated)

            return ivy_info
Exemplo n.º 5
0
    def test_traverse_dep_graph_sorted(self):
        """Make sure the modules are returned in a deterministic order by name"""
        def make_ref(org, name):
            return IvyModuleRef(org=org, name=name, rev='1.0')

        ref1 = make_ref('foo', '1')
        ref2 = make_ref('foo', 'child1')
        ref3 = make_ref('foo', 'child2')
        ref4 = make_ref('foo', 'child3')
        ref5 = make_ref('foo', 'grandchild1')
        ref6 = make_ref('foo', 'grandchild2')

        module1 = IvyModule(ref1, '/foo', [])
        module2 = IvyModule(ref2, '/foo', [ref1])
        module3 = IvyModule(ref3, '/foo', [ref1])
        module4 = IvyModule(ref4, '/foo', [ref1])
        module5 = IvyModule(ref5, '/foo', [ref3])
        module6 = IvyModule(ref6, '/foo', [ref3])

        def assert_order(inputs):
            info = IvyInfo('default')
            for module in inputs:
                info.add_module(module)

            def collector(dep):
                return OrderedSet([dep])

            result = [
                ref for ref in info.traverse_dependency_graph(ref1, collector)
            ]
            self.assertEquals([ref1, ref2, ref3, ref5, ref6, ref4], result)

        # Make sure the order remains unchanged no matter what order we insert the into the structure
        assert_order([module1, module2, module3, module4, module5, module6])
        assert_order([module6, module5, module4, module3, module2, module1])
        assert_order([module5, module1, module2, module6, module3, module4])
        assert_order([module6, module4, module3, module1, module2, module5])
        assert_order([module4, module2, module1, module3, module6, module5])
        assert_order([module4, module2, module5, module6, module1, module3])