aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/shell/integration/bazel_java_test.sh
blob: bc0dfce5abc293e90a47dac612a3e26f33ffd926 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/bash
# Copyright 2018 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.

# Tests that --server_javabase/--host_javabase and --javabase work as expected
# for Bazel with the embedded JDK.

# 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; }

function test_server_javabase() {
  mkdir -p test_server_javabase/bin
  MAGIC="the cake is a lie"

  cat << EOF > test_server_javabase/bin/java
#!/bin/bash
echo "$MAGIC"
EOF
  chmod +x test_server_javabase/bin/java

  # Check that we're able to change the server_javabase to a user specified
  # version.
  bazel --batch --server_javabase=test_server_javabase version >& $TEST_log
  expect_log "$MAGIC"

  bazel --batch version >& $TEST_log
  expect_not_log "$MAGIC"

  # Check that we're using the embedded JDK by default as server_javabase.
  bazel --batch info >& $TEST_log
  expect_log "java-home: .*/_embedded_binaries/embedded_tools/jdk"
}

function test_rhs_host_javabase() {
  mkdir -p foobar/bin
  cat << EOF > BUILD
java_runtime(
    name = "rhs_host_javabase",
    java_home = "$PWD/foobar",
    visibility = ["//visibility:public"],
)
EOF

  mkdir java
  cat << EOF > java/BUILD
java_library(
    name = "javalib",
    srcs = ["HelloWorld.java"],
)
EOF
  touch java/HelloWorld.java

  # We expect the given host_javabase to appear in the command line of
  # java_library actions.
  bazel aquery --output=text --host_javabase=//:rhs_host_javabase //java:javalib >& $TEST_log
  expect_log "exec .*foobar/bin/java"

  # If we don't specify anything, we expect the embedded JDK to be used.
  # Note that this will change in the future but is the current state.
  bazel aquery --output=text //java:javalib >& $TEST_log
  expect_log "exec external/embedded_jdk/bin/java"
}

function test_rhs_javabase() {
  mkdir -p zoo/bin
  cat << EOF > BUILD
java_runtime(
    name = "rhs_javabase",
    java_home = "$PWD/zoo",
    visibility = ["//visibility:public"],
)
EOF

  mkdir java
  cat << EOF > java/BUILD
java_binary(
    name = "javabin",
    srcs = ["HelloWorld.java"],
)
EOF
  cat << EOF > java/HelloWorld.java
public class HelloWorld {}
EOF

  # Check that the RHS javabase appears in the launcher.
  bazel build --javabase=//:rhs_javabase //java:javabin
  cat bazel-bin/java/javabin >& $TEST_log
  expect_log "JAVABIN=.*/zoo/bin/java"

  # Check that we use local_jdk when it's not specified.
  bazel build //java:javabin
  cat bazel-bin/java/javabin >& $TEST_log
  expect_log "JAVABIN=.*/local_jdk/bin/java"
}


run_suite "Tests of specifying custom server_javabase/host_javabase and javabase."