| #!/usr/bin/env bash |
| # Copyright 2022 The gRPC Authors |
| # |
| # 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. |
| |
| set -ex |
| |
| # avoid slow finalization after the script has exited. |
| source $(dirname $0)/../../../tools/internal_ci/helper_scripts/move_src_tree_and_respawn_itself_rc |
| |
| # change to grpc repo root |
| cd $(dirname $0)/../../.. |
| |
| source tools/internal_ci/helper_scripts/prepare_build_macos_rc |
| |
| # make sure bazel is available |
| tools/bazel version |
| |
| # for kokoro mac workers, exact image version is store in a well-known location on disk |
| KOKORO_IMAGE_VERSION="$(cat /VERSION)" |
| |
| BAZEL_REMOTE_CACHE_ARGS=( |
| # Enable uploading to remote cache. Requires the "roles/remotebuildexecution.actionCacheWriter" permission. |
| --remote_upload_local_results=true |
| # allow invalidating the old cache by setting to a new random key |
| --remote_default_exec_properties="grpc_cache_silo_key1=83d8e488-1ca9-40fd-929e-d37d13529c99" |
| # make sure we only get cache hits from binaries built on exact same macos image |
| --remote_default_exec_properties="grpc_cache_silo_key2=${KOKORO_IMAGE_VERSION}" |
| ) |
| |
| EXAMPLE_TARGETS=( |
| # TODO(jtattermusch): ideally we'd say "//src/objective-c/examples/..." but not all the targets currently build |
| //src/objective-c/examples:Sample |
| //src/objective-c/examples:tvOS-sample |
| ) |
| |
| TEST_TARGETS=( |
| # TODO(jtattermusch): ideally we'd say "//src/objective-c/tests/..." but not all the targets currently build |
| # TODO(jtattermusch): make //src/objective-c/tests:TvTests test pass with bazel |
| //src/objective-c/tests:InteropTests |
| //src/objective-c/tests:MacTests |
| //src/objective-c/tests:UnitTests |
| # codegen plugin tests |
| //src/objective-c/tests:objc_codegen_plugin_test |
| //src/objective-c/tests:objc_codegen_plugin_option_test |
| ) |
| |
| # === BEGIN SECTION: run interop_server on the background ==== |
| # Before testing objC at all, build the interop server since many of the ObjC test rely on it. |
| # Use remote cache to build the interop_server binary as quickly as possible (interop_server |
| # is not what we want to test actually, we just use it as a backend for ObjC test). |
| # TODO(jtattermusch): can we make ObjC test not depend on running a local interop_server? |
| python3 tools/run_tests/python_utils/bazel_report_helper.py --report_path build_interop_server |
| build_interop_server/bazel_wrapper \ |
| --bazelrc=tools/remote_build/mac.bazelrc \ |
| build \ |
| --google_credentials="${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json" \ |
| "${BAZEL_REMOTE_CACHE_ARGS[@]}" \ |
| -- \ |
| //test/cpp/interop:interop_server |
| |
| # Start port server and allocate ports to run interop_server |
| python3 tools/run_tests/start_port_server.py |
| |
| PLAIN_PORT=$(curl localhost:32766/get) |
| TLS_PORT=$(curl localhost:32766/get) |
| |
| INTEROP_SERVER_BINARY=bazel-bin/test/cpp/interop/interop_server |
| # run the interop server on the background. The port numbers must match TestConfigs in BUILD. |
| # TODO(jtattermusch): can we make the ports configurable (but avoid breaking bazel build cache at the same time?) |
| "${INTEROP_SERVER_BINARY}" --port=$PLAIN_PORT --max_send_message_size=8388608 & |
| "${INTEROP_SERVER_BINARY}" --port=$TLS_PORT --max_send_message_size=8388608 --use_tls & |
| # make sure the interop_server processes we started on the background are killed upon exit. |
| trap 'echo "KILLING interop_server binaries running on the background"; kill -9 $(jobs -p)' EXIT |
| # === END SECTION: run interop_server on the background ==== |
| |
| python3 tools/run_tests/python_utils/bazel_report_helper.py --report_path objc_bazel_tests |
| |
| # NOTE: When using bazel to run the tests, test env variables like GRPC_VERBOSITY or GRPC_TRACE |
| # seem to be correctly applied to the test environment even when running tests on a simulator. |
| # The below configuration runs all the tests with --test_env=GRPC_VERBOSITY=debug, which makes |
| # the test logs much more useful. |
| objc_bazel_tests/bazel_wrapper \ |
| --bazelrc=tools/remote_build/include/test_locally_with_resultstore_results.bazelrc \ |
| test \ |
| --google_credentials="${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json" \ |
| "${BAZEL_REMOTE_CACHE_ARGS[@]}" \ |
| $BAZEL_FLAGS \ |
| --test_env HOST_PORT_LOCAL=localhost:$PLAIN_PORT \ |
| --test_env HOST_PORT_LOCALSSL=localhost:$TLS_PORT \ |
| -- \ |
| "${EXAMPLE_TARGETS[@]}" \ |
| "${TEST_TARGETS[@]}" |