Example #1
0
    def test_normalize_deps__skip_pomgen_mode_allows_refs_to_same_package(
            self):
        ws = workspace.Workspace("so/path", [],
                                 exclusions.src_exclusions(),
                                 maveninstallinfo.NOOP,
                                 pom_content=pomcontent.NOOP)
        package = "a/b/c"
        art1 = buildpom.MavenArtifactDef("g1",
                                         "a1",
                                         "1",
                                         bazel_package=package,
                                         pom_generation_mode=pomgenmode.SKIP)
        dep1 = dependency.MonorepoDependency(art1, bazel_target=None)
        art2 = buildpom.MavenArtifactDef("g2",
                                         "a2",
                                         "1",
                                         bazel_package=package)
        dep2 = dependency.MonorepoDependency(art2, bazel_target=None)
        art3 = buildpom.MavenArtifactDef("g1",
                                         "a1",
                                         "1",
                                         bazel_package="d/e/f")
        dep3 = dependency.MonorepoDependency(art3, bazel_target=None)
        dep4 = dependency.ThirdPartyDependency("name", "g101", "a101", "1")

        # the result of this method is based on bazel_package comparison
        deps = ws.normalize_deps(art1, [dep1, dep2, dep3, dep4])

        self.assertEqual([dep1, dep2, dep3, dep4], deps)
Example #2
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)
Example #3
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)
Example #4
0
 def test_external_dependency__names__default_packaging(self):
     """
     Ensures the Dependency instance for an external dependency has expected
     names when packaging has a default value.
     """
     dep = dependency.ThirdPartyDependency(maven_install_name="name",
                                           group_id="group",
                                           artifact_id="art",
                                           version="1.0.0",
                                           packaging="jar")
     self.assertEqual("group:art", dep.maven_coordinates_name)
     self.assertEqual("@name//:group_art", dep.bazel_label_name)
     self.assertEqual("group_art", dep.unqualified_bazel_label_name)
Example #5
0
 def test_external_dependency__names__with_classifier_and_default_packaging(self):
     """
     Ensures the Dependency instance for an external dependency has expected
     names when packaging and classifier are set.
     """
     dep = dependency.ThirdPartyDependency(maven_install_name="name",
                                           group_id="group",
                                           artifact_id="art",
                                           version="1.0.0",
                                           classifier="class")
     self.assertEqual("group:art:jar:class", dep.maven_coordinates_name)
     self.assertEqual("@name//:group_art_class", dep.bazel_label_name)
     self.assertEqual("group_art_class", dep.unqualified_bazel_label_name)
Example #6
0
    def test_copy(self):
        import copy
        dep = dependency.ThirdPartyDependency("name", "group", "artifact", "version", "classifier", "packaging", "scope") 

        dep_copy = copy.copy(dep)
        
        self.assertTrue(dep is dep)
        self.assertFalse(dep is dep_copy)
        self.assertEqual(dep, dep_copy)
        self.assertEqual("group", dep_copy.group_id)
        self.assertEqual("artifact", dep_copy.artifact_id)
        self.assertEqual("version", dep_copy.version)
        self.assertEqual("classifier", dep_copy.classifier)
        self.assertEqual("packaging", dep_copy.packaging)
        self.assertEqual("scope", dep_copy.scope)
Example #7
0
def _get_dependency_from_xml_element(el, version_must_be_set):
    group_id = _get_xpath_text_value(el, "groupId/text()", True)
    artifact_id = _get_xpath_text_value(el, "artifactId/text()", True)
    version = _get_xpath_text_value(el, "version/text()", version_must_be_set)
    classifier = _get_xpath_text_value(el, "classifier/text()", False)
    scope = _get_xpath_text_value(el, "scope/text()", False)
    _type = _get_xpath_text_value(el, "type/text()", False)
    if _type is not None:
        # we currently don't support "type" (for no particular reason, we could)
        raise Exception("we are dropping type on the floor %s" % _str(el))

    return dependency.ThirdPartyDependency(bazel_label_name=None, 
                                           group_id=group_id, 
                                           artifact_id=artifact_id, 
                                           version=version,
                                           classifier=classifier,
                                           scope=scope)
Example #8
0
    def test_template__crawled_external_deps(self):
        """
        Verifies that crawled external deps can be referenced using the 
        property pomgen.crawled_external_dependencies.
        """
        pom_template = """
<project>
    <dependencyManagement>
        <dependencies>
#{pomgen.crawled_external_dependencies}
        </dependencies>
    </dependencyManagement>
</project>
"""

        expected_pom = """
<project>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>cg</groupId>
                <artifactId>ca</artifactId>
                <version>0.0.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
"""
        ws = workspace.Workspace("some/path", "", [],
                                 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, pom_template)
        crawled_dep = dependency.ThirdPartyDependency("name", "cg", "ca",
                                                      "0.0.1")
        pomgen.register_dependencies_globally(set(), set([crawled_dep]))

        generated_pom = pomgen.gen()

        self.assertEqual(expected_pom, generated_pom)
Example #9
0
    def test_template__crawled_external_deps__configured_exclusions(self):
        """
        Verifies that exclusions can be "attached" to crawled deps by
        declaring them in a dependency config section.
        """
        pom_template = """
<project>
    <dependencyManagement>
        <dependencies>
__pomgen.start_dependency_customization__
            <dependency>
                <artifactId>ca</artifactId>
                <groupId>cg</groupId>
                <version>0.0.1</version>
                <classifier>c1</classifier>
                <exclusions>
                    <exclusion>
                        <artifactId>ea1</artifactId>
                        <groupId>zzz</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>ea2</artifactId>
                        <groupId>aaa</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
__pomgen.end_dependency_customization__
#{pomgen.crawled_external_dependencies}
        </dependencies>
    </dependencyManagement>
</project>
"""

        expected_pom = """
<project>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>cg</groupId>
                <artifactId>ca</artifactId>
                <version>0.0.1</version>
                <classifier>c1</classifier>
                <exclusions>
                    <exclusion>
                        <groupId>aaa</groupId>
                        <artifactId>ea2</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>zzz</groupId>
                        <artifactId>ea1</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
"""
        ws = workspace.Workspace("some/path", "", [],
                                 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, pom_template)
        crawled_dep = dependency.ThirdPartyDependency("name", "cg", "ca",
                                                      "0.0.1")
        pomgen.register_dependencies_globally(set(), set([crawled_dep]))

        generated_pom = pomgen.gen()

        self.assertEqual(expected_pom, generated_pom)