aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/shell
diff options
context:
space:
mode:
authorGravatar Adam Michael <ajmichael@google.com>2016-11-08 23:47:29 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-11-09 09:15:15 +0000
commit26de97ba7c2725680e8e9a424362e31935c647f4 (patch)
treeafdabca5c9b92b7d2eb1b438a4af3bbba84be22e /src/test/shell
parentdf9e5e16c370391098c4432779ad4d1c9dd693ca (diff)
Creates maven_aar rule to generate aar_import for AARs from Maven.
See https://github.com/bazelbuild/bazel/issues/561. To use this rule, you will need to include the following line in your WORKSPACE file: load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_aar") After that, you can use the maven_aar repository rule in your WORKSPACE file as such: maven_aar( name = "facebook_android_sdk", artifact = "com.facebook.android:facebook-android-sdk:3.19.0", ) Then in your BUILD files, your android_library and android_binary targets can depend on the AAR with the following syntax: android_binary( name = "my_app", ... deps = [ "@facebook_android_sdk//aar", ... ], ) The resources, classes and native libs from the AAR will be provided. Note however that some features of AAR files are not yet supported, including assets, Proguard maps and lint jars. -- MOS_MIGRATED_REVID=138575421
Diffstat (limited to 'src/test/shell')
-rw-r--r--src/test/shell/bazel/BUILD2
-rwxr-xr-xsrc/test/shell/bazel/maven_skylark_test.sh114
-rwxr-xr-xsrc/test/shell/bazel/remote_helpers.sh46
3 files changed, 122 insertions, 40 deletions
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index 40a328ba99..3b268e2121 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -256,6 +256,8 @@ sh_test(
srcs = ["maven_skylark_test.sh"],
data = [
":test-deps",
+ "//external:android_ndk_for_testing",
+ "//external:android_sdk_for_testing",
"@m2//:files",
],
tags = ["manual"],
diff --git a/src/test/shell/bazel/maven_skylark_test.sh b/src/test/shell/bazel/maven_skylark_test.sh
index c1a56d2ece..e1d1f48d55 100755
--- a/src/test/shell/bazel/maven_skylark_test.sh
+++ b/src/test/shell/bazel/maven_skylark_test.sh
@@ -45,6 +45,34 @@ public class BallPit {
EOF
}
+# This function takes an optional url argument: mirror. If one is passed, a
+# mirror of maven central will be set for the url.
+function setup_local_maven_settings_xml() {
+ local_maven_settings_xml=$(pwd)/settings.xml
+ cat > $local_maven_settings_xml <<EOF
+<!-- # DO NOT EDIT: automatically generated settings.xml for maven_dependency_plugin -->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
+ https://maven.apache.org/xsd/settings-1.0.0.xsd">
+ <localRepository>$TEST_SRCDIR/m2/repository</localRepository>
+EOF
+ if [ "$#" -eq 1 ]; then
+ cat >> $local_maven_settings_xml <<EOF
+ <mirrors>
+ <mirror>
+ <id>central</id>
+ <url>$1</url>
+ <mirrorOf>*,default</mirrorOf>
+ </mirror>
+ </mirrors>
+EOF
+ fi
+ cat >> $local_maven_settings_xml <<EOF
+</settings>
+EOF
+}
+
function tear_down() {
shutdown_server
}
@@ -53,22 +81,15 @@ function test_maven_jar_skylark() {
setup_zoo
version="1.21"
serve_artifact com.example.carnivore carnivore $version
+ setup_local_maven_settings_xml "http://localhost:$fileserver_port"
cat > WORKSPACE <<EOF
load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")
maven_jar(
name = 'endangered',
artifact = "com.example.carnivore:carnivore:$version",
- repository = 'http://localhost:$fileserver_port/',
sha1 = '$sha1',
- local_repository = "@m2//:BUILD",
-)
-
-# Make use of the pre-downloaded maven-dependency-plugin because there's no
-# internet connection at this stage.
-local_repository(
- name = "m2",
- path = "$TEST_SRCDIR/m2",
+ settings = '$local_maven_settings_xml',
)
bind(name = 'mongoose', actual = '@endangered//jar')
@@ -78,11 +99,52 @@ EOF
expect_log "Tra-la!"
}
+function setup_android_binary() {
+ mkdir -p java/com/app
+ cat > java/com/app/BUILD <<EOF
+android_binary(
+ name = "app",
+ manifest = "AndroidManifest.xml",
+ deps = ["@herbivore//aar"],
+)
+EOF
+ cat > java/com/app/AndroidManifest.xml <<EOF
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.app"
+ android:versionCode="1"
+ android:versionName="1.0" >
+ <application />
+</manifest>
+EOF
+}
+
+function test_maven_aar_skylark() {
+ setup_android_support
+ setup_android_binary
+ serve_artifact com.example.carnivore herbivore 1.21 aar
+ setup_local_maven_settings_xml "http://localhost:$fileserver_port"
+ cat >> WORKSPACE <<EOF
+load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_aar")
+maven_aar(
+ name = "herbivore",
+ artifact = "com.example.carnivore:herbivore:1.21",
+ sha1 = "$sha1",
+ settings = "$local_maven_settings_xml",
+)
+EOF
+ bazel build //java/com/app || fail "Expected build to succeed"
+ unzip -l bazel-bin/java/com/app/app.apk > $TEST_log
+ expect_log_once "res/layout/my_view.xml"
+ unzip -l bazel-bin/java/com/app/app_deploy.jar > $TEST_log
+ expect_log_once "com/herbivore/Stegosaurus.class"
+}
+
# Same as test_maven_jar, except omit sha1 implying "we don't care".
function test_maven_jar_no_sha1_skylark() {
setup_zoo
version="1.22"
serve_artifact com.example.carnivore carnivore $version
+ setup_local_maven_settings_xml "http://localhost:$fileserver_port/"
cat > WORKSPACE <<EOF
load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")
@@ -90,13 +152,7 @@ load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")
maven_jar(
name = 'endangered',
artifact = "com.example.carnivore:carnivore:$version",
- repository = 'http://localhost:$fileserver_port/',
- local_repository = "@m2//:BUILD",
-)
-
-local_repository(
- name = "m2",
- path = "$TEST_SRCDIR/m2",
+ settings = '$local_maven_settings_xml',
)
bind(name = 'mongoose', actual = '@endangered//jar')
@@ -110,19 +166,14 @@ function test_maven_jar_404_skylark() {
setup_zoo
version="1.23"
serve_not_found
+ setup_local_maven_settings_xml "http://localhost:$nc_port/",
cat > WORKSPACE <<EOF
load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")
maven_jar(
name = 'endangered',
artifact = "com.example.carnivore:carnivore:$version",
- repository = 'http://localhost:$nc_port/',
- local_repository = "@m2//:BUILD",
-)
-
-local_repository(
- name = "m2",
- path = "$TEST_SRCDIR/m2",
+ settings = '$local_maven_settings_xml',
)
bind(name = 'mongoose', actual = '@endangered//jar')
@@ -138,6 +189,7 @@ function test_maven_jar_mismatched_sha1_skylark() {
setup_zoo
version="1.24"
serve_artifact com.example.carnivore carnivore 1.24
+ setup_local_maven_settings_xml "http://localhost:$fileserver_port/"
wrong_sha1="0123456789012345678901234567890123456789"
cat > WORKSPACE <<EOF
@@ -146,14 +198,8 @@ load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")
maven_jar(
name = 'endangered',
artifact = "com.example.carnivore:carnivore:1.24",
- repository = 'http://localhost:$fileserver_port/',
sha1 = '$wrong_sha1',
- local_repository = "@m2//:BUILD",
-)
-
-local_repository(
- name = "m2",
- path = "$TEST_SRCDIR/m2",
+ settings = '$local_maven_settings_xml',
)
bind(name = 'mongoose', actual = '@endangered//jar')
@@ -167,6 +213,7 @@ function test_unimplemented_server_attr_skylark() {
setup_zoo
version="1.25"
serve_jar
+ setup_local_maven_settings_xml
cat > WORKSPACE <<EOF
load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")
@@ -175,12 +222,7 @@ maven_jar(
name = 'endangered',
artifact = "com.example.carnivore:carnivore:$version",
server = "attr_not_implemented",
- local_repository = "@m2//:BUILD"
-)
-
-local_repository(
- name = "m2",
- path = "$TEST_SRCDIR/m2",
+ settings = "$local_maven_settings_xml",
)
bind(name = 'mongoose', actual = '@endangered//jar')
diff --git a/src/test/shell/bazel/remote_helpers.sh b/src/test/shell/bazel/remote_helpers.sh
index ce701d0801..b4c4940fe8 100755
--- a/src/test/shell/bazel/remote_helpers.sh
+++ b/src/test/shell/bazel/remote_helpers.sh
@@ -76,6 +76,37 @@ EOF
cd -
}
+function make_test_aar() {
+ test_aar=${TEST_TMPDIR}/example.aar
+ cd ${TEST_TMPDIR}
+ cat > AndroidManifest.xml <<EOF
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.example" >
+ <uses-sdk
+ android:minSdkVersion="9"
+ android:targetSdkVersion="20" />
+ <application />
+</manifest>
+EOF
+ mkdir -p com/herbivore
+ cat > com/herbivore/Stegosaurus.java <<EOF
+package com.herbivore;
+class Stegosaurus {}
+EOF
+ ${bazel_javabase}/bin/javac -source 7 -target 7 com/herbivore/Stegosaurus.java
+ ${bazel_javabase}/bin/jar cf0 classes.jar com/herbivore/Stegosaurus.class
+ mkdir -p res/layout
+ cat > res/layout/my_view.xml <<EOF
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout />
+EOF
+ zip -0 $test_aar AndroidManifest.xml classes.jar res/layout/my_view.xml
+ sha256=$(sha256sum $test_aar | cut -f 1 -d ' ')
+ # OS X doesn't have sha1sum, so use openssl.
+ sha1=$(openssl sha1 $test_aar | cut -f 2 -d ' ')
+ cd -
+}
+
# Serves a redirection from localhost:$redirect_port to $1. Sets the following variables:
# * redirect_port - the port nc is listening on.
# * redirect_log - the path to nc's log.
@@ -127,16 +158,23 @@ function create_artifact() {
local group_id=$1
local artifact_id=$2
local version=$3
- make_test_jar
+ local packaging=${4:-jar}
+ if [ $packaging == "aar" ]; then
+ make_test_aar
+ local artifact=$test_aar
+ else
+ make_test_jar
+ local artifact=$test_jar
+ fi
maven_path=$PWD/$(echo $group_id | sed 's/\./\//g')/$artifact_id/$version
mkdir -p $maven_path
- openssl sha1 $test_jar > $maven_path/$artifact_id-$version.jar.sha1
- mv $test_jar $maven_path/$artifact_id-$version.jar
+ openssl sha1 $artifact > $maven_path/$artifact_id-$version.$packaging.sha1
+ mv $artifact $maven_path/$artifact_id-$version.$packaging
}
function serve_artifact() {
startup_server $PWD
- create_artifact $1 $2 $3
+ create_artifact $1 $2 $3 ${4:-jar}
}
function startup_server() {