#!/bin/bash
#
# Copyright 2016 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 the Skylark implementation of the maven_jar() rule.

# Load the test setup defined in the parent directory
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CURRENT_DIR}/../integration_test_setup.sh" \
  || { echo "integration_test_setup.sh not found!" >&2; exit 1; }
source ${CURRENT_DIR}/remote_helpers.sh \
  || { echo "remote_helpers.sh not found!" >&2; exit 1; }

function setup_zoo() {
  mkdir -p zoo
  cat > zoo/BUILD <<EOF
java_binary(
    name = "ball-pit",
    srcs = ["BallPit.java"],
    main_class = "BallPit",
    deps = ["//external:mongoose"],
)
EOF

  cat > zoo/BallPit.java <<EOF
import carnivore.Mongoose;

public class BallPit {
    public static void main(String args[]) {
        Mongoose.frolic();
    }
}
EOF
}

# This function takes an optional url argument: mirror. If one is passed, a
# mirror of maven central will be set for the url. It also creates a `BUILD`
# file in the same directory as $local_maven_settings so that it can be used as
# a label in WORKSPACE.
function setup_local_maven_settings_xml() {
  local_maven_settings_xml=settings.xml
  touch $(pwd)/BUILD
  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
}

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",
    sha1 = '$sha1',
    settings = '//:$local_maven_settings_xml',
)

bind(name = 'mongoose', actual = '@endangered//jar')
EOF

  bazel run //zoo:ball-pit >& $TEST_log || fail "Expected run to succeed"
  expect_log "Tra-la!"
}

function DISABLEDtest_maven_jar_with_classifier_skylark() {
  setup_zoo
  version="1.21"
  packaging="jar"
  classifier="sources"
  serve_artifact com.example.carnivore carnivore $version $packaging $classifier
  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 = 'bar_sources',
    artifact = "com.example.foo:bar:$version:jar:sources",
    sha1 = '$sha1',
    settings = '//:$local_maven_settings_xml',
)

bind(name = 'baz_sources', actual = '@bar_sources//jar')
EOF

  bazel run //zoo:ball-pit >& $TEST_log || fail "Expected run to succeed"
  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 />
    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="20" />
</manifest>
EOF
}

function test_maven_aar_skylark() {
  setup_android_sdk_support
  if [[ ! -d "${TEST_SRCDIR}/androidsdk" ]]; then
    fail "This test cannot run without android_sdk_repository set up," \
      "see the WORKSPACE file for instructions"
  fi
  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",
    deps = ["@herbivore2//aar"],
)
maven_aar(
    name = "herbivore2",
    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"
  bazel query 'deps(//java/com/app)' >& $TEST_log
  expect_log "@herbivore//aar:aar"
  expect_log "@herbivore2//aar:aar"
}

# 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")

maven_jar(
    name = 'endangered',
    artifact = "com.example.carnivore:carnivore:$version",
    settings = '//:$local_maven_settings_xml',
)

bind(name = 'mongoose', actual = '@endangered//jar')
EOF

  bazel run //zoo:ball-pit >& $TEST_log || fail "Expected run to succeed"
  expect_log "Tra-la!"
}

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",
    settings = '//:$local_maven_settings_xml',
)

bind(name = 'mongoose', actual = '@endangered//jar')
EOF

  bazel clean --expunge
  bazel build //zoo:ball-pit >& $TEST_log && echo "Expected build to fail"
  kill_nc
  expect_log "Failed to fetch Maven dependency"
}

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
load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")

maven_jar(
    name = 'endangered',
    artifact = "com.example.carnivore:carnivore:1.24",
    sha1 = '$wrong_sha1',
    settings = '//:$local_maven_settings_xml',
)

bind(name = 'mongoose', actual = '@endangered//jar')
EOF

  bazel fetch //zoo:ball-pit >& $TEST_log && echo "Expected fetch to fail"
  expect_log "has SHA-1 of $sha1, does not match expected SHA-1 ($wrong_sha1)"
}

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")

maven_jar(
    name = 'endangered',
    artifact = "com.example.carnivore:carnivore:$version",
    server = "attr_not_implemented",
    settings = "//:$local_maven_settings_xml",
)

bind(name = 'mongoose', actual = '@endangered//jar')
EOF

  bazel build //zoo:ball-pit >& $TEST_log && echo "Expected build to fail"
  kill_nc
  expect_log "specifies a 'server' attribute which is currently not supported."
}

run_suite "maven skylark tests"
