| # Copyright 2017 Google Inc. |
| # |
| # 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. |
| #################################################################################### |
| |
| #!/bin/bash |
| |
| # Fail on any error. |
| set -e |
| |
| # Display commands to stderr. |
| set -x |
| |
| readonly PLATFORM="$(uname | tr '[:upper:]' '[:lower:]')" |
| |
| IS_KOKORO="false" |
| if [[ -n "${KOKORO_ROOT}" ]]; then |
| IS_KOKORO="true" |
| fi |
| readonly IS_KOKORO |
| |
| use_bazel() { |
| local -r bazel_version="$1" |
| if [[ "${IS_KOKORO}" == "false" ]]; then |
| # Do nothing. |
| return 0 |
| fi |
| if ! command -v "bazelisk" &> /dev/null; then |
| use_bazel.sh "${bazel_version}" |
| fi |
| } |
| |
| run_cc_tests() { |
| use_bazel "$(cat cc/.bazelversion)" |
| ./kokoro/testutils/run_bazel_tests.sh "cc" |
| } |
| |
| run_go_tests() { |
| use_bazel "$(cat go/.bazelversion)" |
| ./kokoro/testutils/run_bazel_tests.sh -t --test_arg=--test.v "go" |
| } |
| |
| run_py_tests() { |
| use_bazel "$(cat python/.bazelversion)" |
| ./kokoro/testutils/run_bazel_tests.sh "python" |
| } |
| |
| run_tools_tests() { |
| use_bazel "$(cat tools/.bazelversion)" |
| ./kokoro/testutils/run_bazel_tests.sh "tools" |
| } |
| |
| run_java_tests() { |
| use_bazel "$(cat java_src/.bazelversion)" |
| local -a MANUAL_JAVA_TARGETS |
| if [[ "${IS_KOKORO}" == "true" ]]; then |
| MANUAL_JAVA_TARGETS+=( |
| "//src/test/java/com/google/crypto/tink/integration/gcpkms:GcpKmsIntegrationTest" |
| ) |
| fi |
| readonly MANUAL_JAVA_TARGETS |
| ./kokoro/testutils/run_bazel_tests.sh "java_src" "${MANUAL_JAVA_TARGETS[@]}" |
| } |
| |
| run_cc_examples_tests() { |
| use_bazel "$(cat cc/examples/.bazelversion)" |
| ./kokoro/testutils/run_bazel_tests.sh "cc/examples" |
| } |
| |
| run_java_examples_tests() { |
| use_bazel "$(cat java_src/examples/.bazelversion)" |
| local -a MANUAL_EXAMPLE_JAVA_TARGETS |
| if [[ "${IS_KOKORO}" == "true" ]]; then |
| MANUAL_EXAMPLE_JAVA_TARGETS=( |
| "//gcs:gcs_envelope_aead_example_test" |
| "//encryptedkeyset:encrypted_keyset_example_test" |
| "//envelopeaead:envelope_aead_example_test" |
| ) |
| fi |
| readonly MANUAL_EXAMPLE_JAVA_TARGETS |
| ./kokoro/testutils/run_bazel_tests.sh "java_src/examples" \ |
| "${MANUAL_EXAMPLE_JAVA_TARGETS[@]}" |
| } |
| |
| run_py_examples_tests() { |
| use_bazel "$(cat python/examples/.bazelversion)" |
| ## Install Tink and its dependencies via pip for the examples/python tests. |
| ./kokoro/testutils/install_tink_via_pip.sh "${PWD}/python" "${PWD}" |
| if [[ "${IS_KOKORO}" == "true" ]]; then |
| local pip_flags=( --require-hashes ) |
| if [[ "${PLATFORM}" == "darwin" ]]; then |
| pip_flags+=( --user ) |
| fi |
| readonly pip_flags |
| # Install dependencies for the examples/python tests. |
| pip3 install "${pip_flags[@]}" -r python/examples/requirements.txt |
| fi |
| |
| local -a MANUAL_EXAMPLE_PYTHON_TARGETS |
| if [[ "${IS_KOKORO}" == "true" ]]; then |
| MANUAL_EXAMPLE_PYTHON_TARGETS=( |
| "//gcs:gcs_envelope_aead_test_package" |
| "//gcs:gcs_envelope_aead_test" |
| "//envelope_aead:envelope_test_package" |
| "//envelope_aead:envelope_test" |
| "//encrypted_keyset:encrypted_keyset_test_package" |
| "//encrypted_keyset:encrypted_keyset_test" |
| ) |
| fi |
| readonly MANUAL_EXAMPLE_PYTHON_TARGETS |
| ./kokoro/testutils/run_bazel_tests.sh "python/examples" \ |
| "${MANUAL_EXAMPLE_PYTHON_TARGETS[@]}" |
| } |
| |
| run_all_tests() { |
| # Only run these tests if exeucting a Kokoro GitHub continuous integration |
| # job or if running locally (e.g. as part of release.sh). |
| # |
| # TODO(b/231610897): Use an easier to maintain approach to test parity. |
| if [[ "${KOKORO_JOB_NAME:-}" =~ ^tink/github \ |
| || -z "${KOKORO_JOB_NAME+x}" ]]; then |
| run_cc_tests |
| run_java_tests |
| run_go_tests |
| run_py_tests |
| run_tools_tests |
| fi |
| run_cc_examples_tests |
| run_java_examples_tests |
| run_py_examples_tests |
| } |
| |
| main() { |
| # Initialization for Kokoro environments. |
| if [[ "${IS_KOKORO}" == "true" ]]; then |
| cd "${KOKORO_ARTIFACTS_DIR}"/git*/tink* |
| # Install protoc. |
| source ./kokoro/testutils/install_protoc.sh |
| |
| if [[ "${PLATFORM}" == 'linux' ]]; then |
| # Sourcing required to update callers environment. |
| source ./kokoro/testutils/install_python3.sh |
| ./kokoro/testutils/upgrade_gcc.sh |
| fi |
| |
| if [[ "${PLATFORM}" == 'darwin' ]]; then |
| # Default values for iOS SDK and Xcode. Can be overriden by another script. |
| : "${IOS_SDK_VERSION:=13.2}" |
| : "${XCODE_VERSION:=14.1}" |
| |
| export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" |
| export JAVA_HOME=$(/usr/libexec/java_home -v "1.8.0_292") |
| export ANDROID_HOME="/usr/local/share/android-sdk" |
| export COURSIER_OPTS="-Djava.net.preferIPv6Addresses=true" |
| |
| # TODO(b/155225382): Avoid modifying the sytem Python installation. |
| pip3 install --user protobuf |
| fi |
| |
| ./kokoro/testutils/copy_credentials.sh "go/testdata" "all" |
| ./kokoro/testutils/copy_credentials.sh "java_src/examples/testdata" "gcp" |
| ./kokoro/testutils/copy_credentials.sh "java_src/testdata" "all" |
| ./kokoro/testutils/copy_credentials.sh "python/examples/testdata" "gcp" |
| ./kokoro/testutils/copy_credentials.sh "python/testdata" "all" |
| |
| ./kokoro/testutils/update_android_sdk.sh |
| # Sourcing required to update callers environment. |
| source ./kokoro/testutils/install_go.sh |
| fi |
| |
| # Verify required environment variables. |
| |
| # Required for building Java binaries. |
| if [[ -z "${ANDROID_HOME}" ]]; then |
| echo "The ANDROID_HOME environment variable must be set." |
| exit 4 |
| fi |
| |
| if [[ -z "${TMP}" ]]; then |
| echo "The TMP environment variable must be set." |
| exit 4 |
| fi |
| |
| echo "using java binary: $(which java)" |
| java -version |
| |
| echo "Using go binary from $(which go): $(go version)" |
| |
| echo "using python: $(which python)" |
| python --version |
| |
| echo "using python3: $(which python3)" |
| python3 --version |
| |
| echo "using pip3: $(which pip3)" |
| pip3 --version |
| pip3 list |
| |
| echo "using protoc: $(which protoc)" |
| protoc --version |
| |
| run_all_tests |
| } |
| |
| main "$@" |