Ejemplo n.º 1
0
    def test_sort_order(self):
        """
        Verifies that sorting Dependency instances produces the desired 
        ordering: alphanumeric, monorepo artifacts first.
        """
        dep1 = dependency.new_dep_from_maven_art_str(
            "com.google.guava:guava:20.0", "name")
        dep2 = dependency.new_dep_from_maven_art_str(
            "com.google.guava:zoouava:20.0", "name")
        art_def = buildpom.maven_artifact("com.zoogle.guava", "art1", "1.0")
        art_def = buildpom._augment_art_def_values(art_def, None, "pack1",
                                                   None, None,
                                                   pomgenmode.DYNAMIC)
        dep3 = dependency.new_dep_from_maven_artifact_def(art_def, None)
        art_def = buildpom.maven_artifact("com.google.guava", "art1", "1.0")
        art_def = buildpom._augment_art_def_values(art_def, None, "pack1",
                                                   None, None,
                                                   pomgenmode.DYNAMIC)
        dep4 = dependency.new_dep_from_maven_artifact_def(art_def, None)

        l = [dep3, dep2, dep1, dep4]
        l.sort()
        self.assertIs(dep4, l[0])
        self.assertIs(dep3, l[1])
        self.assertIs(dep1, l[2])
        self.assertIs(dep2, l[3])
Ejemplo n.º 2
0
    def _parse_dep_label(self, dep_label):
        if dep_label.startswith("@"):
            # external maven jar:
            ext_dep_name = dep_label[1:].split("//jar", 1)[0].strip()
            if self._is_special_case_excluded_ext_dep(ext_dep_name):
                return None
            else:
                return self._name_to_ext_deps[ext_dep_name]
        elif dep_label.startswith("//"):
            # monorepo src ref:
            package_path = dep_label[2:]  # remove leading "//"
            target_name = None
            i = package_path.rfind(":")
            if i != -1:
                target_name = package_path[i + 1:]
                package_path = package_path[:i]

            for excluded_dependency_path in self.excluded_dependency_paths:
                if package_path.startswith(excluded_dependency_path):
                    return None
            maven_artifact_def = self.parse_maven_artifact_def(package_path)
            if maven_artifact_def is None:
                raise Exception("no BUILD.pom file in package [%s]" %
                                package_path)
            else:
                return dependency.new_dep_from_maven_artifact_def(
                    maven_artifact_def, target_name)
        else:
            raise Exception("bad label [%s]" % dep_label)
Ejemplo n.º 3
0
    def test_depman_pom__sanity(self):
        """
        Ensures that dependency management pom generation isn't totally broken.
        """
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 maveninstallinfo.NOOP, pomcontent.NOOP)
        artifact_def = buildpom.MavenArtifactDef(
            "g1", "a2", "1.2.3", gen_dependency_management_pom=True)
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        pomgen = pom.DependencyManagementPomGen(ws, artifact_def, dep,
                                                TEST_POM_TEMPLATE)
        guava = dependency.new_dep_from_maven_art_str("google:guava:1", "guav")
        force = dependency.new_dep_from_maven_art_str("force:commons:1",
                                                      "forc")

        pomgen.register_dependencies_transitive_closure__artifact((
            guava,
            force,
        ))
        generated_pom = pomgen.gen(pom.PomContentType.RELEASE)

        self.assertIn("<packaging>pom</packaging>", generated_pom)
        self.assertIn("<dependencyManagement>", generated_pom)
        self.assertIn("<artifactId>guava</artifactId>", generated_pom)
        self.assertIn("<artifactId>commons</artifactId>", generated_pom)
Ejemplo n.º 4
0
    def test_template__deps_config_setion_is_removed(self):
        """
        Verifies that the special dependency config section is removed
        from the pom template when it is processed.
        """
        pom_template = """
<project>
    <dependencyManagement>
        <dependencies>
__pomgen.start_dependency_customization__
__pomgen.end_dependency_customization__
        </dependencies>
    </dependencyManagement>
</project>
"""

        expected_pom = """
<project>
    <dependencyManagement>
        <dependencies>
        </dependencies>
    </dependencyManagement>
</project>
"""
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 maveninstallinfo.NOOP, pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        artifact_def.custom_pom_template_content = pom_template
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)

        generated_pom = pomgen.gen(pom.PomContentType.RELEASE)

        self.assertEqual(expected_pom, generated_pom)
Ejemplo n.º 5
0
    def test_source_dependency__from_artifact_definition__no_changes(self):
        """
        Ensures the Dependency instance for a source dependency looks right.

        Here we explicitly declare that the source has *NOT* changed since it 
        was last released.
        """
        group_id = "g1"
        artifact_id = "a1"
        version = "1.1.0"
        released_version = "1.2.3"
        package = "pack1"
        art_def = buildpom.MavenArtifactDef(group_id,
                                            artifact_id,
                                            version,
                                            bazel_package=package,
                                            requires_release=False,
                                            released_version=released_version,
                                            released_artifact_hash="123456789")

        dep = dependency.new_dep_from_maven_artifact_def(art_def, None)

        self.assertEqual(group_id, dep.group_id)
        self.assertEqual(artifact_id, dep.artifact_id)
        self.assertEqual(released_version, dep.version)
        self.assertEqual(package, dep.bazel_package)
        self.assertTrue(dep.external)
Ejemplo n.º 6
0
    def test_template_genmode__goldfile(self):
        """
        Verifies version omissions when genmode is GOLDFILE.
        """
        ws = workspace.Workspace(
            "some/path", """
            native.maven_jar(
                name = "ch_qos_logback_logback_classic",
                artifact = "ch.qos.logback:logback-classic:1.4.4",
            )""", [], exclusions.src_exclusions())
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        srpc_artifact_def = buildpom.maven_artifact("com.grail.srpc",
                                                    "srpc-api", "5.6.7")
        srpc_artifact_def = buildpom._augment_art_def_values(
            srpc_artifact_def, None, "pack1", None, None, pomgenmode.DYNAMIC)
        dep = dependency.new_dep_from_maven_artifact_def(srpc_artifact_def)
        pomgen = pom.TemplatePomGen(ws,
                                    artifact_def,
                                    dep,
                                    template_content="""
            this artifact version #{version}
            logback #{ch.qos.logback:logback-classic:version}
            srpc #{com.grail.srpc:srpc-api:version}""")
        pomgen.register_dependencies_globally(
            set([
                dependency.MonorepoDependency(srpc_artifact_def,
                                              bazel_target=None)
            ]), set())

        generated_pom = pomgen.gen(pomcontenttype=pom.PomContentType.GOLDFILE)

        self.assertIn("this artifact version ***", generated_pom)
        self.assertIn("logback 1.4.4", generated_pom)
        self.assertIn("srpc ***", generated_pom)
Ejemplo n.º 7
0
    def test_template_var_sub__multiple_ext_deps_with_same_gav(self):
        """
        Verifies that pomgen is ok with multiple external deps with the same
        gav. This is an edge case, where the WORKSPACE file defines 2 (or more)
        differnently named maven_jars, that all point back to the same artifact.
        """
        ws = workspace.Workspace(
            "some/path", """
            native.maven_jar(
                name = "name1",
                artifact = "g:a:20",
            )

            native.maven_jar(
                name = "name2",
                artifact = "g:a:20",
            )

        """, [], exclusions.src_exclusions())
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        pomgen = pom.TemplatePomGen(ws,
                                    artifact_def,
                                    dep,
                                    template_content="""
            srpc #{g:a:version}""")

        pomgen.gen()
Ejemplo n.º 8
0
    def test_template_var_sub__multiple_ext_deps_with_same_ga_diff_vers(self):
        """
        Verifies that pomgen is NOT OK with multiple external deps with the same
        groupId/artifactId but with a different version (as this would break
        the #{<groupId>:<artifactId>:version} syntax).
        """
        ws = workspace.Workspace(
            "some/path", """
            native.maven_jar(
                name = "name1",
                artifact = "g:a:20",
            )

            native.maven_jar(
                name = "name2",
                artifact = "g:a:21",
            )

        """, [], exclusions.src_exclusions())
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        pomgen = pom.TemplatePomGen(ws,
                                    artifact_def,
                                    dep,
                                    template_content="""
            srpc #{g:a:version}""")

        with self.assertRaises(Exception) as ctx:
            pomgen.gen()

        self.assertIn(
            "Found multiple artifacts with the same groupId:artifactId",
            str(ctx.exception))
        self.assertIn("g:a", str(ctx.exception))
Ejemplo n.º 9
0
    def test_template_var_sub__conflicting_gav__ext_and_BUILDpom(self):
        """
        Verifies error handling when gavs are conflicting between external deps
        and what is set in BUILD.pom files.
        """
        ws = workspace.Workspace(
            "some/path", """
            native.maven_jar(
                name = "name",
                artifact = "g:a:20",
            )""", [], exclusions.src_exclusions())
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        pomgen = pom.TemplatePomGen(ws,
                                    artifact_def,
                                    dep,
                                    template_content="""
            srpc #{g:a:version}""")
        art = buildpom.MavenArtifactDef("g", "a", "1", bazel_package="a/b/c")
        d = dependency.MonorepoDependency(art, bazel_target=None)
        pomgen.register_dependencies_globally(set([d]), set())

        with self.assertRaises(Exception) as ctx:
            pomgen.gen()

        self.assertIn(
            "Found multiple artifacts with the same groupId:artifactId",
            str(ctx.exception))
        self.assertIn("g:a", str(ctx.exception))
Ejemplo n.º 10
0
    def test_template_var_sub__monorepo_deps(self):
        """
        Verifies references to monorepo versions in a pom template.
        """
        ws = workspace.Workspace("some/path", "", [],
                                 exclusions.src_exclusions())
        artifact_def = buildpom.MavenArtifactDef("groupId", "artifactId",
                                                 "1.2.3")
        srpc_artifact_def = buildpom.MavenArtifactDef("com.grail.srpc",
                                                      "srpc-api", "5.6.7")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        pomgen = pom.TemplatePomGen(ws,
                                    artifact_def,
                                    dep,
                                    template_content="""
            srpc #{com.grail.srpc:srpc-api:version}""")
        pomgen.register_dependencies_globally(
            set([
                dependency.MonorepoDependency(srpc_artifact_def,
                                              bazel_target=None)
            ]), set())

        generated_pom = pomgen.gen()

        self.assertIn("srpc 5.6.7", generated_pom)
Ejemplo n.º 11
0
    def test_template_var_sub(self):
        """
        Verifies variable substitution in a pom template.
        """
        ws = workspace.Workspace(
            "some/path", """
            native.maven_jar(
                name = "ch_qos_logback_logback_classic",
                artifact = "ch.qos.logback:logback-classic:1.4.4",
            )""", [], exclusions.src_exclusions())
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        pomgen = pom.TemplatePomGen(ws,
                                    artifact_def,
                                    dep,
                                    template_content="""
            logback_old_syntax #{ch_qos_logback_logback_classic.version}
            logback_new_syntax #{ch.qos.logback:logback-classic:version}
            monorepo artifact version #{version}""")

        generated_pom = pomgen.gen()

        self.assertIn("logback_old_syntax 1.4.4", generated_pom)
        self.assertIn("logback_new_syntax 1.4.4", generated_pom)
        self.assertIn("monorepo artifact version 1.2.3", generated_pom)
Ejemplo n.º 12
0
    def test_template_var_sub__conflicting_gav__ext_and_BUILDpom(self):
        """
        Verifies error handling when gavs are conflicting between external deps
        and what is set in BUILD.pom files.
        """
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 self._mocked_mvn_install_info("maven"),
                                 pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        artifact_def.custom_pom_template_content = "srpc #{g:a:version}"
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)
        art = buildpom.MavenArtifactDef("com.google.guava",
                                        "guava",
                                        "26.0",
                                        bazel_package="a/b/c")
        d = dependency.MonorepoDependency(art, bazel_target=None)
        pomgen.register_dependencies_transitive_closure__library(set([d]))

        with self.assertRaises(Exception) as ctx:
            pomgen.gen(pom.PomContentType.RELEASE)

        self.assertIn(
            "Found multiple artifacts with the same groupId:artifactId",
            str(ctx.exception))
        self.assertIn("com.google.guava:guava", str(ctx.exception))
Ejemplo n.º 13
0
    def test_template_var_sub__ext_deps_with_same_versions(self):
        """
        Ensures that external dependencies (jars) that have the same gav, but
        are defined multiple times in different maven_install rules, can
        be referenced.
        """
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 self._mocked_mvn_install_info("maven"),
                                 pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.4.4")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        artifact_def.custom_pom_template_content = """
1 v1 #{@maven//:org_apache_maven_same_version.version}
2 v2 #{@maven2//:org_apache_maven_same_version.version}
3 v  #{org_apache_maven_same_version.version}
4 v  #{org.apache.maven:same-version:version}

"""
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)

        generated_pom = pomgen.gen(pom.PomContentType.RELEASE)

        self.assertIn("1 v1 1.0.0", generated_pom)
        self.assertIn("2 v2 1.0.0", generated_pom)
        self.assertIn("3 v  1.0.0", generated_pom)
        self.assertIn("4 v  1.0.0", generated_pom)
Ejemplo n.º 14
0
 def _get_pom_generator(self, artifact_def, dep):
     if dep is None:
         # make a real dependency instance here so we can pass it along
         # into the pom generator
         dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
     return pom.get_pom_generator(self.workspace, self.pom_template,
                                  artifact_def, dep)
Ejemplo n.º 15
0
    def _parse_dep_label(self, dep_label):
        if dep_label.startswith("@"):
            if dep_label not in self._name_to_ext_deps:
                print(self._name_to_ext_deps.values())
                raise Exception("Unknown external dependency - please make sure all maven install json files have been registered with pomgen (by setting maven_install_paths in the pomgen config file): [%s]" % dep_label)
            return self._name_to_ext_deps[dep_label]
        elif dep_label.startswith("//"):
            # monorepo src ref:
            package_path = dep_label[2:] # remove leading "//"
            target_name = None
            i = package_path.rfind(":")
            if i != -1:
                target_name = package_path[i+1:]
                package_path = package_path[:i]

            for excluded_dependency_path in self.excluded_dependency_paths:
                if package_path.startswith(excluded_dependency_path):
                    return None
            maven_artifact_def = self.parse_maven_artifact_def(package_path)
            if maven_artifact_def is None:
                raise Exception("no BUILD.pom file in package [%s]" % package_path)
            else:
                return dependency.new_dep_from_maven_artifact_def(maven_artifact_def, target_name)
        else:
            raise Exception("bad label [%s]" % dep_label)
Ejemplo n.º 16
0
    def test_template_genmode__goldfile(self):
        """
        Verifies version omissions when genmode is GOLDFILE.
        """
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 self._mocked_mvn_install_info("maven"),
                                 pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        srpc_artifact_def = buildpom.maven_artifact("com.grail.srpc",
                                                    "srpc-api", "5.6.7")
        srpc_artifact_def = buildpom._augment_art_def_values(
            srpc_artifact_def, None, "pack1", None, None, pomgenmode.DYNAMIC)
        srpc_dep = dependency.MonorepoDependency(srpc_artifact_def,
                                                 bazel_target=None)
        artifact_def.custom_pom_template_content = """
this artifact version #{version}
logback coord #{ch.qos.logback:logback-classic:version}
logback qualified #{@maven//:ch_qos_logback_logback_classic.version}
logback unqualified #{ch_qos_logback_logback_classic.version}
srpc #{com.grail.srpc:srpc-api:version}
"""
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)
        pomgen.register_dependencies_transitive_closure__library(
            set([srpc_dep]))
        generated_pom = pomgen.gen(pomcontenttype=pom.PomContentType.GOLDFILE)

        self.assertIn("this artifact version ***", generated_pom)
        self.assertIn("logback coord 1.2.3", generated_pom)
        self.assertIn("logback qualified 1.2.3", generated_pom)
        self.assertIn("logback unqualified 1.2.3", generated_pom)
        self.assertIn("srpc ***", generated_pom)
Ejemplo n.º 17
0
    def test_bazel_buildable__source_dep__dynamic_pom_gen(self):
        art_def = buildpom.maven_artifact("g1", "a1", "1.0")
        art_def = buildpom._augment_art_def_values(art_def, None, "pack1", None, None, pomgenmode.DYNAMIC)

        dep = dependency.new_dep_from_maven_artifact_def(art_def, None)

        self.assertTrue(dep.bazel_buildable)
Ejemplo n.º 18
0
    def test_bazel_buildable__source_dep__template_pom_gen__other_packaging(self):
        art_def = buildpom.maven_artifact("g1", "a1", "1.0")
        art_def = buildpom._augment_art_def_values(art_def, None, "pack1", None, None, pomgenmode.TEMPLATE)
        art_def.custom_pom_template_content = "<packaging>maven-plugin</packaging>"

        dep = dependency.new_dep_from_maven_artifact_def(art_def, None)

        self.assertTrue(dep.bazel_buildable)
Ejemplo n.º 19
0
 def _get_crawled_packages_as_deps(self):
     deps = [
         dependency.new_dep_from_maven_artifact_def(art_def,
                                                    bazel_target=None)
         for art_def in self.package_to_artifact.values()
     ]
     deps = set(self._filter_non_artifact_referencing_deps(deps))
     return deps
Ejemplo n.º 20
0
    def test_template__unencountered_deps(self):
        """
        Verifies that declared deps that are not crawled can be referenced
        using the pomgen.unencountered_deps property.
        """
        pom_template = """
<project>
    <dependencyManagement>
        <dependencies>
__pomgen.start_dependency_customization__
            <dependency>
                <artifactId>art1</artifactId>
                <groupId>group1</groupId>
                <version>1.0.0</version>
                <exclusions>
                    <exclusion>
                        <artifactId>ea1</artifactId>
                        <groupId>eg1</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
__pomgen.end_dependency_customization__
#{pomgen.unencountered_dependencies}
        </dependencies>
    </dependencyManagement>
</project>
"""

        expected_pom = """
<project>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <artifactId>art1</artifactId>
                <groupId>group1</groupId>
                <version>1.0.0</version>
                <exclusions>
                    <exclusion>
                        <artifactId>ea1</artifactId>
                        <groupId>eg1</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
"""
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 maveninstallinfo.NOOP, pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        artifact_def.custom_pom_template_content = pom_template
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)

        generated_pom = pomgen.gen(pom.PomContentType.RELEASE)

        self.assertEqual(expected_pom, generated_pom)
Ejemplo n.º 21
0
    def test_template__library_transitives(self):
        """
        Verifies that transitive dependencies can be referenced using the
        property pomgen.transitive_closure_of_library_dependencies.
        """
        pom_template = """
<project>
    <dependencyManagement>
        <dependencies>
#{pomgen.transitive_closure_of_library_dependencies}
        </dependencies>
    </dependencyManagement>
</project>
"""

        expected_pom = """
<project>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.grail.srpc</groupId>
                <artifactId>srpc-api</artifactId>
                <version>5.6.7</version>
            </dependency>
            <dependency>
                <groupId>cg</groupId>
                <artifactId>ca</artifactId>
                <version>0.0.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
"""
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 maveninstallinfo.NOOP, pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        artifact_def.custom_pom_template_content = pom_template
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)
        srpc_artifact_def = buildpom.MavenArtifactDef("com.grail.srpc",
                                                      "srpc-api",
                                                      "5.6.7",
                                                      bazel_package="a/b/c")
        internal_dep = dependency.MonorepoDependency(srpc_artifact_def,
                                                     bazel_target=None)

        external_dep = dependency.ThirdPartyDependency("name", "cg", "ca",
                                                       "0.0.1")
        pomgen.register_dependencies_transitive_closure__library(
            set([external_dep, internal_dep]))

        generated_pom = pomgen.gen(pom.PomContentType.RELEASE)

        self.assertEqual(expected_pom, generated_pom)
Ejemplo n.º 22
0
    def test_dynamic_pom_genmode__goldfile(self):
        """
        Test goldfile mode with dynamic pom gen.
        """
        ws = workspace.Workspace(
            "some/path", """
  native.maven_jar(
    name = "aopalliance_aopalliance",
    artifact = "aopalliance:aopalliance:1.0",
  )
  native.maven_jar(
    name = "com_google_guava_guava",
    artifact = "com.google.guava:guava:20.0",
  )""", [], exclusions.src_exclusions())
        artifact_def = buildpom.maven_artifact("g1", "a2", "1.2.3")
        artifact_def = buildpom._augment_art_def_values(
            artifact_def, None, "pack1", None, None, pomgenmode.DYNAMIC)
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)

        pomgen = pom.DynamicPomGen(ws, artifact_def, dep, TEST_POM_TEMPLATE)

        org_function = bazel.query_java_library_deps_attributes
        try:
            bazel.query_java_library_deps_attributes = lambda r, p: (
                "@com_google_guava_guava//jar",
                "@aopalliance_aopalliance//jar",
            )
            _, _, deps = pomgen.process_dependencies()
            pomgen.register_dependencies(deps)

            generated_pom = pomgen.gen(pom.PomContentType.GOLDFILE)

            self.assertIn(
                """<groupId>g1</groupId>
    <artifactId>a2</artifactId>
    <version>***</version>
    <packaging>jar</packaging>""", generated_pom)

            self.assertIn(
                """<groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>20.0</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>""", generated_pom)

            aop_index = generated_pom.index("aopalliance")
            guava_index = generated_pom.index("guava")
            self.assertTrue(guava_index > aop_index)  # deps are sorted
        finally:
            bazel.query_java_library_deps_attributes = org_function
Ejemplo n.º 23
0
    def test_template__crawled_external_deps__configured_attributes(self):
        """
        Verifies that "classifier" and "scope" are correcly set in the generated
        pom.
        """
        pom_template = """
<project>
    <dependencyManagement>
        <dependencies>
__pomgen.start_dependency_customization__
            <dependency>
                <artifactId>ca</artifactId>
                <groupId>cg</groupId>
                <version>0.0.1</version>
                <scope>test</scope>
                <classifier>sources</classifier>
            </dependency>
__pomgen.end_dependency_customization__
#{pomgen.transitive_closure_of_library_dependencies}
        </dependencies>
    </dependencyManagement>
</project>
"""

        expected_pom = """
<project>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>cg</groupId>
                <artifactId>ca</artifactId>
                <version>0.0.1</version>
                <classifier>sources</classifier>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
"""
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 maveninstallinfo.NOOP, pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        artifact_def.custom_pom_template_content = pom_template
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)
        crawled_dep = dependency.ThirdPartyDependency("name", "cg", "ca",
                                                      "0.0.1")
        pomgen.register_dependencies_transitive_closure__library(
            set([crawled_dep]))

        generated_pom = pomgen.gen(pom.PomContentType.RELEASE)

        self.assertEqual(expected_pom, generated_pom)
Ejemplo n.º 24
0
 def _create_library_artifact_node(self, group_id, artifact_id, version,
                                   library_path, requires_release,
                                   release_reason=None):
     dev_version = version + "-SNAPSHOT"
     released_version = version
     if requires_release and release_reason is None:
         release_reason = ReleaseReason.ARTIFACT
     artifact_def = MavenArtifactDef(group_id, artifact_id, dev_version,
                                     released_version=released_version,
                                     library_path=library_path,
                                     requires_release=requires_release)
     artifact_def.release_reason = release_reason
     dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
     return Node(parent=None, artifact_def=artifact_def, dependency=dep)
Ejemplo n.º 25
0
 def _build_node(self,
                 artifact_id,
                 bazel_package,
                 pom_generation_mode=pomgenmode.DYNAMIC,
                 parent_node=None):
     art_def = buildpom.MavenArtifactDef(
         "g1",
         artifact_id,
         "1.0.0",
         bazel_package=bazel_package,
         pom_generation_mode=pom_generation_mode)
     dep = dependency.new_dep_from_maven_artifact_def(art_def)
     return crawlerm.Node(parent=parent_node,
                          artifact_def=art_def,
                          dependency=dep)
Ejemplo n.º 26
0
    def test_source_dependency__from_artifact_definition__name(self):
        """
        Ensures the Dependency instance for a source dependency has expected
        names.
        """
        group_id = "g1"
        artifact_id = "a1"
        version = "1.1.0"
        package = "pack1"
        art_def = buildpom.maven_artifact(group_id, artifact_id, version)
        art_def = buildpom._augment_art_def_values(art_def, None, package, None, None, pomgenmode.DYNAMIC)

        dep = dependency.new_dep_from_maven_artifact_def(art_def, None)

        self.assertEqual("g1:a1", dep.maven_coordinates_name)
        self.assertIsNone(dep.bazel_label_name)
Ejemplo n.º 27
0
    def test_source_dependency__references_artifact__template_pom_gen_mode(self):
        group_id = "g1"
        artifact_id = "a1"
        version = "1.1.0"
        released_version = "1.2.3"
        package = "pack1/pack2"
        art_def = buildpom.MavenArtifactDef(group_id, artifact_id, version,
                                            pom_generation_mode=pomgenmode.TEMPLATE,
                                            bazel_package=package,
                                            requires_release=False,
                                            released_version=released_version,
                                            released_artifact_hash="123456789")

        dep = dependency.new_dep_from_maven_artifact_def(art_def)

        self.assertTrue(dep.references_artifact)
Ejemplo n.º 28
0
    def test_source_dependency__from_artifact_definition__default(self):
        """
        Ensures the Dependency instance for a source dependency looks right.
        """
        group_id = "g1"
        artifact_id = "a1"
        version = "1.1.0"
        package = "pack1"
        art_def = buildpom.maven_artifact(group_id, artifact_id, version)
        art_def = buildpom._augment_art_def_values(art_def, None, package, None, None, pomgenmode.DYNAMIC)

        dep = dependency.new_dep_from_maven_artifact_def(art_def, None)

        self.assertEqual(group_id, dep.group_id)
        self.assertEqual(artifact_id, dep.artifact_id)
        self.assertEqual(version, dep.version)
        self.assertEqual(package, dep.bazel_package)
        self.assertFalse(dep.external)
Ejemplo n.º 29
0
    def test_template_unknown_variable(self):
        """
        Verifies that an unknown variable in a pom template is handled and
        results in an error during template processing.
        """
        ws = workspace.Workspace("some/path", [], exclusions.src_exclusions(),
                                 maveninstallinfo.NOOP, pomcontent.NOOP)
        artifact_def = buildpom.maven_artifact("groupId", "artifactId",
                                               "1.2.3")
        dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
        artifact_def.custom_pom_template_content = "my pom template with a bad ref #{bad1} and also #{bad2}"
        pomgen = pom.TemplatePomGen(ws, artifact_def, dep)

        with self.assertRaises(Exception) as ctx:
            generated_pom = pomgen.gen(pom.PomContentType.RELEASE)

        self.assertIn("bad1", str(ctx.exception))
        self.assertIn("bad2", str(ctx.exception))
Ejemplo n.º 30
0
    def test_source_dependency__bazel_target__explicit(self):
        """
        bazel_target can be set explicitly.
        """
        target = "foo_target"
        group_id = "g1"
        artifact_id = "a1"
        version = "1.1.0"
        released_version = "1.2.3"
        package = "pack1/pack2"
        art_def = buildpom.MavenArtifactDef(group_id, artifact_id, version,
                                            bazel_package=package,
                                            requires_release=False,
                                            released_version=released_version,
                                            released_artifact_hash="123456789")

        dep = dependency.new_dep_from_maven_artifact_def(art_def, target)

        self.assertEqual(target, dep.bazel_target)