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