234ddd535c15b5ccd68be1d478fccd95ce6092d1
[platform/upstream/grpc.git] / tools / internal_ci / linux / grpc_xds_url_map_python.sh
1 #!/usr/bin/env bash
2 # Copyright 2021 gRPC authors.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 set -eo pipefail
17
18 # Constants
19 readonly GITHUB_REPOSITORY_NAME="grpc"
20 # GKE Cluster
21 readonly GKE_CLUSTER_NAME="interop-test-psm-basic"
22 readonly GKE_CLUSTER_ZONE="us-central1-c"
23 ## xDS test client Docker images
24 readonly CLIENT_IMAGE_NAME="gcr.io/grpc-testing/xds-interop/python-client"
25 readonly FORCE_IMAGE_BUILD="${FORCE_IMAGE_BUILD:-0}"
26 readonly BUILD_APP_PATH="interop-testing/build/install/grpc-interop-testing"
27 readonly LANGUAGE_NAME="Python"
28
29 #######################################
30 # Builds test app Docker images and pushes them to GCR
31 # Globals:
32 #   BUILD_APP_PATH
33 #   CLIENT_IMAGE_NAME: Test client Docker image name
34 #   GIT_COMMIT: SHA-1 of git commit being built
35 # Arguments:
36 #   None
37 # Outputs:
38 #   Writes the output of `gcloud builds submit` to stdout, stderr
39 #######################################
40 build_test_app_docker_images() {
41   echo "Building ${LANGUAGE_NAME} xDS interop test app Docker images"
42
43   pushd "${SRC_DIR}"
44   docker build \
45     -f src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.client \
46     -t "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
47     .
48
49   popd
50
51   gcloud -q auth configure-docker
52
53   docker push "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}"
54 }
55
56 #######################################
57 # Builds test app and its docker images unless they already exist
58 # Globals:
59 #   CLIENT_IMAGE_NAME: Test client Docker image name
60 #   GIT_COMMIT: SHA-1 of git commit being built
61 #   FORCE_IMAGE_BUILD
62 # Arguments:
63 #   None
64 # Outputs:
65 #   Writes the output to stdout, stderr
66 #######################################
67 build_docker_images_if_needed() {
68   # Check if images already exist
69   client_tags="$(gcloud_gcr_list_image_tags "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}")"
70   printf "Client image: %s:%s\n" "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}"
71   echo "${client_tags:-Client image not found}"
72
73   # Build if any of the images are missing, or FORCE_IMAGE_BUILD=1
74   if [[ "${FORCE_IMAGE_BUILD}" == "1" || -z "${client_tags}" ]]; then
75     build_test_app_docker_images
76   else
77     echo "Skipping ${LANGUAGE_NAME} test app build"
78   fi
79 }
80
81 #######################################
82 # Executes the test case
83 # Globals:
84 #   TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile
85 #   KUBE_CONTEXT: The name of kubectl context with GKE cluster access
86 #   TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report
87 #   CLIENT_IMAGE_NAME: Test client Docker image name
88 #   GIT_COMMIT: SHA-1 of git commit being built
89 # Arguments:
90 #   Test case name
91 # Outputs:
92 #   Writes the output of test execution to stdout, stderr
93 #   Test xUnit report to ${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml
94 #######################################
95 run_test() {
96   # Test driver usage:
97   # https://github.com/grpc/grpc/tree/master/tools/run_tests/xds_k8s_test_driver#basic-usage
98   local test_name="${1:?Usage: run_test test_name}"
99   set -x
100   python -m "tests.${test_name}" \
101     --flagfile="${TEST_DRIVER_FLAGFILE}" \
102     --kube_context="${KUBE_CONTEXT}" \
103     --client_image="${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
104     --xml_output_file="${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml" \
105     --flagfile="config/url-map.cfg"
106   set +x
107 }
108
109 #######################################
110 # Main function: provision software necessary to execute tests, and run them
111 # Globals:
112 #   KOKORO_ARTIFACTS_DIR
113 #   GITHUB_REPOSITORY_NAME
114 #   SRC_DIR: Populated with absolute path to the source repo
115 #   TEST_DRIVER_REPO_DIR: Populated with the path to the repo containing
116 #                         the test driver
117 #   TEST_DRIVER_FULL_DIR: Populated with the path to the test driver source code
118 #   TEST_DRIVER_FLAGFILE: Populated with relative path to test driver flagfile
119 #   TEST_XML_OUTPUT_DIR: Populated with the path to test xUnit XML report
120 #   GIT_ORIGIN_URL: Populated with the origin URL of git repo used for the build
121 #   GIT_COMMIT: Populated with the SHA-1 of git commit being built
122 #   GIT_COMMIT_SHORT: Populated with the short SHA-1 of git commit being built
123 #   KUBE_CONTEXT: Populated with name of kubectl context with GKE cluster access
124 # Arguments:
125 #   None
126 # Outputs:
127 #   Writes the output of test execution to stdout, stderr
128 #######################################
129 main() {
130   local script_dir
131   script_dir="$(dirname "$0")"
132   # shellcheck source=tools/internal_ci/linux/grpc_xds_k8s_install_test_driver.sh
133   source "${script_dir}/grpc_xds_k8s_install_test_driver.sh"
134   set -x
135   if [[ -n "${KOKORO_ARTIFACTS_DIR}" ]]; then
136     kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}"
137   else
138     local_setup_test_driver "${script_dir}"
139   fi
140   build_docker_images_if_needed
141   # Run tests
142   cd "${TEST_DRIVER_FULL_DIR}"
143   run_test url_map
144 }
145
146 main "$@"