xref: /aosp_15_r20/external/tink/kokoro/run_tests.sh (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1*e7b1675dSTing-Kang Chang# Copyright 2017 Google Inc.
2*e7b1675dSTing-Kang Chang#
3*e7b1675dSTing-Kang Chang# Licensed under the Apache License, Version 2.0 (the "License");
4*e7b1675dSTing-Kang Chang# you may not use this file except in compliance with the License.
5*e7b1675dSTing-Kang Chang# You may obtain a copy of the License at
6*e7b1675dSTing-Kang Chang#
7*e7b1675dSTing-Kang Chang#      http://www.apache.org/licenses/LICENSE-2.0
8*e7b1675dSTing-Kang Chang#
9*e7b1675dSTing-Kang Chang# Unless required by applicable law or agreed to in writing, software
10*e7b1675dSTing-Kang Chang# distributed under the License is distributed on an "AS IS" BASIS,
11*e7b1675dSTing-Kang Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*e7b1675dSTing-Kang Chang# See the License for the specific language governing permissions and
13*e7b1675dSTing-Kang Chang# limitations under the License.
14*e7b1675dSTing-Kang Chang####################################################################################
15*e7b1675dSTing-Kang Chang
16*e7b1675dSTing-Kang Chang#!/bin/bash
17*e7b1675dSTing-Kang Chang
18*e7b1675dSTing-Kang Chang# Fail on any error.
19*e7b1675dSTing-Kang Changset -e
20*e7b1675dSTing-Kang Chang
21*e7b1675dSTing-Kang Chang# Display commands to stderr.
22*e7b1675dSTing-Kang Changset -x
23*e7b1675dSTing-Kang Chang
24*e7b1675dSTing-Kang Changreadonly PLATFORM="$(uname | tr '[:upper:]' '[:lower:]')"
25*e7b1675dSTing-Kang Chang
26*e7b1675dSTing-Kang ChangIS_KOKORO="false"
27*e7b1675dSTing-Kang Changif [[ -n "${KOKORO_ROOT}" ]]; then
28*e7b1675dSTing-Kang Chang  IS_KOKORO="true"
29*e7b1675dSTing-Kang Changfi
30*e7b1675dSTing-Kang Changreadonly IS_KOKORO
31*e7b1675dSTing-Kang Chang
32*e7b1675dSTing-Kang Changuse_bazel() {
33*e7b1675dSTing-Kang Chang  local -r bazel_version="$1"
34*e7b1675dSTing-Kang Chang  if [[ "${IS_KOKORO}" == "false" ]]; then
35*e7b1675dSTing-Kang Chang    # Do nothing.
36*e7b1675dSTing-Kang Chang    return 0
37*e7b1675dSTing-Kang Chang  fi
38*e7b1675dSTing-Kang Chang  if ! command -v "bazelisk" &> /dev/null; then
39*e7b1675dSTing-Kang Chang    use_bazel.sh "${bazel_version}"
40*e7b1675dSTing-Kang Chang  fi
41*e7b1675dSTing-Kang Chang}
42*e7b1675dSTing-Kang Chang
43*e7b1675dSTing-Kang Changrun_cc_tests() {
44*e7b1675dSTing-Kang Chang  use_bazel "$(cat cc/.bazelversion)"
45*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh "cc"
46*e7b1675dSTing-Kang Chang}
47*e7b1675dSTing-Kang Chang
48*e7b1675dSTing-Kang Changrun_go_tests() {
49*e7b1675dSTing-Kang Chang  use_bazel "$(cat go/.bazelversion)"
50*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh -t --test_arg=--test.v "go"
51*e7b1675dSTing-Kang Chang}
52*e7b1675dSTing-Kang Chang
53*e7b1675dSTing-Kang Changrun_py_tests() {
54*e7b1675dSTing-Kang Chang  use_bazel "$(cat python/.bazelversion)"
55*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh "python"
56*e7b1675dSTing-Kang Chang}
57*e7b1675dSTing-Kang Chang
58*e7b1675dSTing-Kang Changrun_tools_tests() {
59*e7b1675dSTing-Kang Chang  use_bazel "$(cat tools/.bazelversion)"
60*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh "tools"
61*e7b1675dSTing-Kang Chang}
62*e7b1675dSTing-Kang Chang
63*e7b1675dSTing-Kang Changrun_java_tests() {
64*e7b1675dSTing-Kang Chang  use_bazel "$(cat java_src/.bazelversion)"
65*e7b1675dSTing-Kang Chang  local -a MANUAL_JAVA_TARGETS
66*e7b1675dSTing-Kang Chang  if [[ "${IS_KOKORO}" == "true" ]]; then
67*e7b1675dSTing-Kang Chang    MANUAL_JAVA_TARGETS+=(
68*e7b1675dSTing-Kang Chang      "//src/test/java/com/google/crypto/tink/integration/gcpkms:GcpKmsIntegrationTest"
69*e7b1675dSTing-Kang Chang    )
70*e7b1675dSTing-Kang Chang  fi
71*e7b1675dSTing-Kang Chang  readonly MANUAL_JAVA_TARGETS
72*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh "java_src" "${MANUAL_JAVA_TARGETS[@]}"
73*e7b1675dSTing-Kang Chang}
74*e7b1675dSTing-Kang Chang
75*e7b1675dSTing-Kang Changrun_cc_examples_tests() {
76*e7b1675dSTing-Kang Chang  use_bazel "$(cat cc/examples/.bazelversion)"
77*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh "cc/examples"
78*e7b1675dSTing-Kang Chang}
79*e7b1675dSTing-Kang Chang
80*e7b1675dSTing-Kang Changrun_java_examples_tests() {
81*e7b1675dSTing-Kang Chang  use_bazel "$(cat java_src/examples/.bazelversion)"
82*e7b1675dSTing-Kang Chang  local -a MANUAL_EXAMPLE_JAVA_TARGETS
83*e7b1675dSTing-Kang Chang  if [[ "${IS_KOKORO}" == "true" ]]; then
84*e7b1675dSTing-Kang Chang    MANUAL_EXAMPLE_JAVA_TARGETS=(
85*e7b1675dSTing-Kang Chang      "//gcs:gcs_envelope_aead_example_test"
86*e7b1675dSTing-Kang Chang      "//encryptedkeyset:encrypted_keyset_example_test"
87*e7b1675dSTing-Kang Chang      "//envelopeaead:envelope_aead_example_test"
88*e7b1675dSTing-Kang Chang    )
89*e7b1675dSTing-Kang Chang  fi
90*e7b1675dSTing-Kang Chang  readonly MANUAL_EXAMPLE_JAVA_TARGETS
91*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh "java_src/examples" \
92*e7b1675dSTing-Kang Chang    "${MANUAL_EXAMPLE_JAVA_TARGETS[@]}"
93*e7b1675dSTing-Kang Chang}
94*e7b1675dSTing-Kang Chang
95*e7b1675dSTing-Kang Changrun_py_examples_tests() {
96*e7b1675dSTing-Kang Chang  use_bazel "$(cat python/examples/.bazelversion)"
97*e7b1675dSTing-Kang Chang  ## Install Tink and its dependencies via pip for the examples/python tests.
98*e7b1675dSTing-Kang Chang  ./kokoro/testutils/install_tink_via_pip.sh "${PWD}/python" "${PWD}"
99*e7b1675dSTing-Kang Chang  if [[ "${IS_KOKORO}" == "true" ]]; then
100*e7b1675dSTing-Kang Chang    local pip_flags=( --require-hashes )
101*e7b1675dSTing-Kang Chang    if [[ "${PLATFORM}" == "darwin" ]]; then
102*e7b1675dSTing-Kang Chang      pip_flags+=( --user )
103*e7b1675dSTing-Kang Chang    fi
104*e7b1675dSTing-Kang Chang    readonly pip_flags
105*e7b1675dSTing-Kang Chang    # Install dependencies for the examples/python tests.
106*e7b1675dSTing-Kang Chang    pip3 install "${pip_flags[@]}" -r python/examples/requirements.txt
107*e7b1675dSTing-Kang Chang  fi
108*e7b1675dSTing-Kang Chang
109*e7b1675dSTing-Kang Chang  local -a MANUAL_EXAMPLE_PYTHON_TARGETS
110*e7b1675dSTing-Kang Chang  if [[ "${IS_KOKORO}" == "true" ]]; then
111*e7b1675dSTing-Kang Chang    MANUAL_EXAMPLE_PYTHON_TARGETS=(
112*e7b1675dSTing-Kang Chang      "//gcs:gcs_envelope_aead_test_package"
113*e7b1675dSTing-Kang Chang      "//gcs:gcs_envelope_aead_test"
114*e7b1675dSTing-Kang Chang      "//envelope_aead:envelope_test_package"
115*e7b1675dSTing-Kang Chang      "//envelope_aead:envelope_test"
116*e7b1675dSTing-Kang Chang      "//encrypted_keyset:encrypted_keyset_test_package"
117*e7b1675dSTing-Kang Chang      "//encrypted_keyset:encrypted_keyset_test"
118*e7b1675dSTing-Kang Chang    )
119*e7b1675dSTing-Kang Chang  fi
120*e7b1675dSTing-Kang Chang  readonly MANUAL_EXAMPLE_PYTHON_TARGETS
121*e7b1675dSTing-Kang Chang  ./kokoro/testutils/run_bazel_tests.sh "python/examples" \
122*e7b1675dSTing-Kang Chang    "${MANUAL_EXAMPLE_PYTHON_TARGETS[@]}"
123*e7b1675dSTing-Kang Chang}
124*e7b1675dSTing-Kang Chang
125*e7b1675dSTing-Kang Changrun_all_tests() {
126*e7b1675dSTing-Kang Chang  # Only run these tests if exeucting a Kokoro GitHub continuous integration
127*e7b1675dSTing-Kang Chang  # job or if running locally (e.g. as part of release.sh).
128*e7b1675dSTing-Kang Chang  #
129*e7b1675dSTing-Kang Chang  # TODO(b/231610897): Use an easier to maintain approach to test parity.
130*e7b1675dSTing-Kang Chang  if [[ "${KOKORO_JOB_NAME:-}" =~ ^tink/github \
131*e7b1675dSTing-Kang Chang        || -z "${KOKORO_JOB_NAME+x}" ]]; then
132*e7b1675dSTing-Kang Chang    run_cc_tests
133*e7b1675dSTing-Kang Chang    run_java_tests
134*e7b1675dSTing-Kang Chang    run_go_tests
135*e7b1675dSTing-Kang Chang    run_py_tests
136*e7b1675dSTing-Kang Chang    run_tools_tests
137*e7b1675dSTing-Kang Chang  fi
138*e7b1675dSTing-Kang Chang  run_cc_examples_tests
139*e7b1675dSTing-Kang Chang  run_java_examples_tests
140*e7b1675dSTing-Kang Chang  run_py_examples_tests
141*e7b1675dSTing-Kang Chang}
142*e7b1675dSTing-Kang Chang
143*e7b1675dSTing-Kang Changmain() {
144*e7b1675dSTing-Kang Chang  # Initialization for Kokoro environments.
145*e7b1675dSTing-Kang Chang  if [[ "${IS_KOKORO}" == "true" ]]; then
146*e7b1675dSTing-Kang Chang    cd "${KOKORO_ARTIFACTS_DIR}"/git*/tink*
147*e7b1675dSTing-Kang Chang    # Install protoc.
148*e7b1675dSTing-Kang Chang    source ./kokoro/testutils/install_protoc.sh
149*e7b1675dSTing-Kang Chang
150*e7b1675dSTing-Kang Chang    if [[ "${PLATFORM}" == 'linux' ]]; then
151*e7b1675dSTing-Kang Chang      # Sourcing required to update callers environment.
152*e7b1675dSTing-Kang Chang      source ./kokoro/testutils/install_python3.sh
153*e7b1675dSTing-Kang Chang      ./kokoro/testutils/upgrade_gcc.sh
154*e7b1675dSTing-Kang Chang    fi
155*e7b1675dSTing-Kang Chang
156*e7b1675dSTing-Kang Chang    if [[ "${PLATFORM}" == 'darwin' ]]; then
157*e7b1675dSTing-Kang Chang      # Default values for iOS SDK and Xcode. Can be overriden by another script.
158*e7b1675dSTing-Kang Chang      : "${IOS_SDK_VERSION:=13.2}"
159*e7b1675dSTing-Kang Chang      : "${XCODE_VERSION:=14.1}"
160*e7b1675dSTing-Kang Chang
161*e7b1675dSTing-Kang Chang      export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
162*e7b1675dSTing-Kang Chang      export JAVA_HOME=$(/usr/libexec/java_home -v "1.8.0_292")
163*e7b1675dSTing-Kang Chang      export ANDROID_HOME="/usr/local/share/android-sdk"
164*e7b1675dSTing-Kang Chang      export COURSIER_OPTS="-Djava.net.preferIPv6Addresses=true"
165*e7b1675dSTing-Kang Chang
166*e7b1675dSTing-Kang Chang      # TODO(b/155225382): Avoid modifying the sytem Python installation.
167*e7b1675dSTing-Kang Chang      pip3 install --user protobuf
168*e7b1675dSTing-Kang Chang    fi
169*e7b1675dSTing-Kang Chang
170*e7b1675dSTing-Kang Chang    ./kokoro/testutils/copy_credentials.sh "go/testdata" "all"
171*e7b1675dSTing-Kang Chang    ./kokoro/testutils/copy_credentials.sh "java_src/examples/testdata" "gcp"
172*e7b1675dSTing-Kang Chang    ./kokoro/testutils/copy_credentials.sh "java_src/testdata" "all"
173*e7b1675dSTing-Kang Chang    ./kokoro/testutils/copy_credentials.sh "python/examples/testdata" "gcp"
174*e7b1675dSTing-Kang Chang    ./kokoro/testutils/copy_credentials.sh "python/testdata" "all"
175*e7b1675dSTing-Kang Chang
176*e7b1675dSTing-Kang Chang    ./kokoro/testutils/update_android_sdk.sh
177*e7b1675dSTing-Kang Chang    # Sourcing required to update callers environment.
178*e7b1675dSTing-Kang Chang    source ./kokoro/testutils/install_go.sh
179*e7b1675dSTing-Kang Chang  fi
180*e7b1675dSTing-Kang Chang
181*e7b1675dSTing-Kang Chang  # Verify required environment variables.
182*e7b1675dSTing-Kang Chang
183*e7b1675dSTing-Kang Chang  # Required for building Java binaries.
184*e7b1675dSTing-Kang Chang  if [[ -z "${ANDROID_HOME}" ]]; then
185*e7b1675dSTing-Kang Chang    echo "The ANDROID_HOME environment variable must be set."
186*e7b1675dSTing-Kang Chang    exit 4
187*e7b1675dSTing-Kang Chang  fi
188*e7b1675dSTing-Kang Chang
189*e7b1675dSTing-Kang Chang  if [[ -z "${TMP}" ]]; then
190*e7b1675dSTing-Kang Chang    echo "The TMP environment variable must be set."
191*e7b1675dSTing-Kang Chang    exit 4
192*e7b1675dSTing-Kang Chang  fi
193*e7b1675dSTing-Kang Chang
194*e7b1675dSTing-Kang Chang  echo "using java binary: $(which java)"
195*e7b1675dSTing-Kang Chang  java -version
196*e7b1675dSTing-Kang Chang
197*e7b1675dSTing-Kang Chang  echo "Using go binary from $(which go): $(go version)"
198*e7b1675dSTing-Kang Chang
199*e7b1675dSTing-Kang Chang  echo "using python: $(which python)"
200*e7b1675dSTing-Kang Chang  python --version
201*e7b1675dSTing-Kang Chang
202*e7b1675dSTing-Kang Chang  echo "using python3: $(which python3)"
203*e7b1675dSTing-Kang Chang  python3 --version
204*e7b1675dSTing-Kang Chang
205*e7b1675dSTing-Kang Chang  echo "using pip3: $(which pip3)"
206*e7b1675dSTing-Kang Chang  pip3 --version
207*e7b1675dSTing-Kang Chang  pip3 list
208*e7b1675dSTing-Kang Chang
209*e7b1675dSTing-Kang Chang  echo "using protoc: $(which protoc)"
210*e7b1675dSTing-Kang Chang  protoc --version
211*e7b1675dSTing-Kang Chang
212*e7b1675dSTing-Kang Chang  run_all_tests
213*e7b1675dSTing-Kang Chang}
214*e7b1675dSTing-Kang Chang
215*e7b1675dSTing-Kang Changmain "$@"
216