| #!/bin/bash |
| # |
| # Copyright 2015 The Bazel Authors. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| # Test //external mechanisms |
| # |
| |
| # Load test environment |
| src_dir=$(cd "$(dirname ${BASH_SOURCE[0]})" && pwd) |
| source $src_dir/test-setup.sh \ |
| || { echo "test-setup.sh not found!" >&2; exit 1; } |
| source $src_dir/remote_helpers.sh \ |
| || { echo "remote_helpers.sh not found!" >&2; exit 1; } |
| |
| function set_up() { |
| # Set up custom repository directory. |
| m2=$TEST_TMPDIR/my-m2 |
| rm -rf $m2 |
| mkdir -p $m2 |
| startup_server $m2 |
| } |
| |
| function tear_down() { |
| shutdown_server |
| rm -rf $m2 |
| } |
| |
| function generate_workspace() { |
| ${bazel_data}/src/tools/generate_workspace/generate_workspace $@ |
| } |
| |
| # Takes: groupId, artifactId, and version, extra arguments are dependencies. |
| function make_artifact() { |
| local groupId=$1; |
| local artifactId=$2; |
| local version=$3; |
| |
| shift; shift; shift; |
| |
| local pkg_dir=${m2}/${groupId}/${artifactId}/${version} |
| local pom_file=${pkg_dir}/${artifactId}-${version}.pom |
| mkdir -p ${pkg_dir} |
| # Make the pom.xml. |
| cat > ${pom_file} <<EOF |
| <project> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>${groupId}</groupId> |
| <artifactId>${artifactId}</artifactId> |
| <version>${version}</version> |
| EOF |
| |
| if [[ ${#@} > 0 ]]; then |
| echo ' <dependencies>' >> ${pom_file} |
| |
| for artifact in $@; do |
| IFS=':' read -r -a dep <<< "$artifact" |
| cat >> ${pom_file} << EOF |
| <dependency> |
| <groupId>${dep[0]}</groupId> |
| <artifactId>${dep[1]}</artifactId> |
| <version>${dep[2]}</version> |
| </dependency> |
| EOF |
| done |
| |
| echo ' </dependencies>' >> ${pom_file} |
| fi |
| |
| echo "</project>" >> ${pom_file} |
| |
| # Make the jar with one class (we use the groupId for the classname). |
| cat > $TEST_TMPDIR/$groupId.java <<EOF |
| public class $groupId { |
| public static void print() { |
| System.out.println("$artifactId"); |
| } |
| } |
| EOF |
| local jar_path=$pkg_dir/$artifactId-$version.jar |
| ${bazel_javabase}/bin/javac $TEST_TMPDIR/$groupId.java |
| ${bazel_javabase}/bin/jar cf $jar_path $TEST_TMPDIR/$groupId.class |
| |
| local sha1=$(shasum $jar_path | awk '{print $1}') |
| echo -n $sha1 > $jar_path.sha1 |
| echo $sha1 |
| } |
| |
| function get_workspace_file() { |
| cat $TEST_log | tail -n 2 | head -n 1 |
| } |
| |
| function get_build_file() { |
| cat $TEST_log | tail -n 1 |
| } |
| |
| function test_pom() { |
| # Create a maven repo |
| local sha1=$(make_artifact blorp glorp 1.2.3) |
| |
| # Create a pom that references the artifacts. |
| cat > $TEST_TMPDIR/pom.xml <<EOF |
| <project> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>my</groupId> |
| <artifactId>thing</artifactId> |
| <version>1.0</version> |
| <repositories> |
| <repository> |
| <id>my-repo1</id> |
| <name>a custom repo</name> |
| <url>http://localhost:$fileserver_port/</url> |
| </repository> |
| </repositories> |
| |
| <dependencies> |
| <dependency> |
| <groupId>blorp</groupId> |
| <artifactId>glorp</artifactId> |
| <version>1.2.3</version> |
| </dependency> |
| </dependencies> |
| </project> |
| EOF |
| |
| generate_workspace --maven_project=$TEST_TMPDIR &> $TEST_log \ |
| || fail "generating workspace failed" |
| |
| cat $(cat $TEST_log | tail -n 2 | head -n 1) > ws |
| cat $(cat $TEST_log | tail -n 1) > build |
| |
| assert_contains "artifact = \"blorp:glorp:1.2.3\"," ws |
| assert_contains "repository = \"http://localhost:$fileserver_port/\"," ws |
| assert_contains "sha1 = \"$sha1\"," ws |
| assert_contains "\"@blorp_glorp//jar\"," build |
| assert_contains "name = \"blorp_glorp\"," build |
| } |
| |
| function test_pom_exclusions() { |
| # Create a maven repo |
| local sha1_guppy=$(make_artifact fish guppy 2.0) |
| local sha1_trout=$(make_artifact fish trout 4.2) |
| |
| local sha1_glorp=$(make_artifact blorp glorp 1.2.3 fish:guppy:2.0) |
| local sha1_mlorp=$(make_artifact blorp mlorp 3.2.1 fish:trout:4.2) |
| |
| # Create a pom that references the artifacts. |
| cat > $TEST_TMPDIR/pom.xml <<EOF |
| <project> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>my</groupId> |
| <artifactId>thing</artifactId> |
| <version>1.0</version> |
| <repositories> |
| <repository> |
| <id>my-repo1</id> |
| <name>a custom repo</name> |
| <url>http://localhost:$fileserver_port/</url> |
| </repository> |
| </repositories> |
| |
| <dependencies> |
| <dependency> |
| <groupId>blorp</groupId> |
| <artifactId>glorp</artifactId> |
| <version>1.2.3</version> |
| </dependency> |
| <dependency> |
| <groupId>blorp</groupId> |
| <artifactId>mlorp</artifactId> |
| <version>3.2.1</version> |
| <exclusions> |
| <exclusion> |
| <groupId>fish</groupId> |
| <artifactId>trout</artifactId> |
| </exclusion> |
| </exclusions> |
| </dependency> |
| </dependencies> |
| </project> |
| EOF |
| |
| generate_workspace --maven_project=$TEST_TMPDIR &> $TEST_log \ |
| || fail "generating workspace failed" |
| |
| cat $(cat $TEST_log | tail -n 2 | head -n 1) > ws |
| cat $(cat $TEST_log | tail -n 1) > build |
| |
| assert_contains "artifact = \"blorp:glorp:1.2.3\"," ws |
| assert_contains "repository = \"http://localhost:$fileserver_port/\"," ws |
| assert_contains "sha1 = \"$sha1_glorp\"," ws |
| assert_contains "sha1 = \"$sha1_mlorp\"," ws |
| assert_contains "sha1 = \"$sha1_guppy\"," ws |
| assert_not_contains "sha1 = \"$sha1_trout\"," ws |
| assert_contains "\"@blorp_glorp//jar\"," build |
| assert_contains "\"@blorp_mlorp//jar\"," build |
| assert_contains "name = \"blorp_glorp\"," build |
| assert_contains "name = \"blorp_mlorp\"," build |
| assert_contains "\"@fish_guppy//jar\"," build |
| assert_not_contains "\"@fish_trout//jar\"," build |
| } |
| |
| function test_invalid_pom() { |
| # No pom file. |
| rm -f $TEST_TMPDIR/pom.xml |
| generate_workspace -m $TEST_TMPDIR &> $TEST_log |
| expect_log "Non-readable POM $TEST_TMPDIR/pom.xml" |
| |
| # Invalid XML. |
| cat > $TEST_TMPDIR/pom.xml <<EOF |
| <project> |
| EOF |
| generate_workspace -m $TEST_TMPDIR &> $TEST_log |
| expect_log "expected end tag </project>" |
| } |
| |
| function test_profile() { |
| cat > $TEST_TMPDIR/pom.xml <<EOF |
| <project> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>my</groupId> |
| <artifactId>thing</artifactId> |
| <version>1.0</version> |
| <profiles> |
| <profile> |
| <id>my-profile</id> |
| <activation> |
| <property> |
| <name>makeThing</name> |
| <value>thing</value> |
| </property> |
| </activation> |
| </profile> |
| </profiles> |
| </project> |
| EOF |
| |
| generate_workspace --maven_project=$TEST_TMPDIR &> $TEST_log \ |
| || fail "generating workspace failed" |
| } |
| |
| function test_submodules() { |
| cat > $TEST_TMPDIR/pom.xml <<EOF |
| <project> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>xyz</groupId> |
| <artifactId>a</artifactId> |
| <version>1.0</version> |
| <packaging>pom</packaging> |
| <modules> |
| <module>b1</module> |
| <module>b2</module> |
| </modules> |
| </project> |
| EOF |
| |
| # Create submodules, version and group are inherited from parent. |
| mkdir -p $TEST_TMPDIR/{b1,b2} |
| cat > $TEST_TMPDIR/b1/pom.xml <<EOF |
| <project> |
| <modelVersion>4.0.0</modelVersion> |
| <artifactId>b1</artifactId> |
| <parent> |
| <groupId>xyz</groupId> |
| <artifactId>a</artifactId> |
| <version>1.0</version> |
| </parent> |
| <dependencies> |
| <dependency> |
| <groupId>xyz</groupId> |
| <artifactId>b2</artifactId> |
| <version>1.0</version> |
| </dependency> |
| </dependencies> |
| </project> |
| EOF |
| |
| cat > $TEST_TMPDIR/b2/pom.xml <<EOF |
| <project> |
| <modelVersion>4.0.0</modelVersion> |
| <artifactId>b2</artifactId> |
| <parent> |
| <groupId>xyz</groupId> |
| <artifactId>a</artifactId> |
| <version>1.0</version> |
| </parent> |
| </project> |
| EOF |
| |
| generate_workspace -m $TEST_TMPDIR/b1 &> $TEST_log || fail "generate failed" |
| expect_log "xyz_b2 was defined in $TEST_TMPDIR/b2/pom.xml which isn't a repository URL" |
| assert_contains "artifact = \"xyz:b2:1.0\"," $(get_workspace_file) |
| } |
| |
| run_suite "maven tests" |