aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergii Tkachenko <sergiitk@google.com>2024-05-06 15:15:03 -0700
committerGitHub <noreply@github.com>2024-05-06 15:15:03 -0700
commit61eee8e32c4af9c56bafd0ce851ac3bf0b2940ba (patch)
tree4bc5b52d3292ff822aba492e3b7291332b3d2341
parent8478a2978cb945c79acc20e4d4c0972be15f4803 (diff)
downloadgrpc-grpc-upstream-v1.57.x.tar.gz
[PSM Interop] Simplify PSM Interop Kokoro buildscripts (v1.57.x backport) (#36540)upstream-v1.57.x
Backport of #36450 to v1.57.x. --- Integrates the new features of the the Kokoro PSM Interop install library introduced in grpc/psm-interop#73. Nearly all common functionality was moved from per-language/per-branch PSM Interop build scripts to [psm_interop_kokoro_lib.sh](https://github.com/grpc/psm-interop/blob/main/.kokoro/psm_interop_kokoro_lib.sh): 1. The list of tests in the each test suite 2. Per-test-suite flag customization 3. `run_test` methods 4. `build_docker_images_if_needed` methods 5. Generic `build_test_app_docker_images` methods (simple docker build + docker push + docker tag). grpc-java is one exception, as it doesn't run docker directly, but a cloudbuild flow. Now all PSM Interop jobs share the same buildscripts by all test suites: 1. buildscript that invokes the test: `psm-interop-test-{language}.sh` (configured as `build_file` in the build cfg) 2. buildscript that builds the xDS test client/server and publishes them as a Docker image: `psm-interop-build-{language}.sh` (conventional name called from `psm_interop_kokoro_lib.sh`) `psm-interop-test-{language}.sh`: 1. Sets `GRPC_LANGUAGE`, `BUILD_SCRIPT_DIR` environment variables. 2. Downloads the shared `psm_interop_kokoro_lib.sh` from the main branch of the psm-interop repo. 3. Sources `psm-interop-build-{language}.sh` 4. Calls `psm::run "${PSM_TEST_SUITE}"` (`PSM_TEST_SUITE` configured in the cfg file). `psm-interop-build-{language}.sh`: 1. Defines `psm::lang::build_docker_images` which is called from `psm_interop_kokoro_lib.sh`. 2. Invokes any repo-specific logic. 3. May use `psm::build::docker_images_generic` for generic Docker build, tag, push, or provide implement its own build/publish method. References: - b/288578634 - See the full list of the new features at grpc/psm-interop#73. - Additional fixes to the shared lib: grpc/psm-interop#78, grpc/psm-interop#79
-rw-r--r--tools/internal_ci/linux/grpc_xds_k8s_lb.cfg8
-rwxr-xr-xtools/internal_ci/linux/grpc_xds_k8s_lb.sh190
-rw-r--r--tools/internal_ci/linux/grpc_xds_k8s_lb_python.cfg6
-rwxr-xr-xtools/internal_ci/linux/grpc_xds_k8s_lb_python.sh193
-rw-r--r--tools/internal_ci/linux/grpc_xds_url_map.cfg6
-rwxr-xr-xtools/internal_ci/linux/grpc_xds_url_map.sh150
-rw-r--r--tools/internal_ci/linux/grpc_xds_url_map_python.cfg6
-rwxr-xr-xtools/internal_ci/linux/grpc_xds_url_map_python.sh160
-rwxr-xr-xtools/internal_ci/linux/psm-interop-build-cpp.sh34
-rwxr-xr-xtools/internal_ci/linux/psm-interop-build-python.sh34
-rwxr-xr-xtools/internal_ci/linux/psm-interop-install-lib.sh32
-rwxr-xr-xtools/internal_ci/linux/psm-interop-test-cpp.sh24
-rwxr-xr-xtools/internal_ci/linux/psm-interop-test-python.sh24
-rw-r--r--tools/internal_ci/linux/psm-security-python.cfg6
-rwxr-xr-xtools/internal_ci/linux/psm-security-python.sh185
-rw-r--r--tools/internal_ci/linux/psm-security.cfg6
-rwxr-xr-xtools/internal_ci/linux/psm-security.sh169
17 files changed, 179 insertions, 1054 deletions
diff --git a/tools/internal_ci/linux/grpc_xds_k8s_lb.cfg b/tools/internal_ci/linux/grpc_xds_k8s_lb.cfg
index 2bfb18d56f..67f0c0dc52 100644
--- a/tools/internal_ci/linux/grpc_xds_k8s_lb.cfg
+++ b/tools/internal_ci/linux/grpc_xds_k8s_lb.cfg
@@ -15,8 +15,8 @@
# Config file for the internal CI (in protobuf text format)
# Location of the continuous shell script in repository.
-build_file: "grpc/tools/internal_ci/linux/grpc_xds_k8s_lb.sh"
-timeout_mins: 180
+build_file: "grpc/tools/internal_ci/linux/psm-interop-test-cpp.sh"
+timeout_mins: 240
action {
define_artifacts {
regex: "artifacts/**/*sponge_log.xml"
@@ -24,3 +24,7 @@ action {
strip_prefix: "artifacts"
}
}
+env_vars {
+ key: "PSM_TEST_SUITE"
+ value: "lb"
+}
diff --git a/tools/internal_ci/linux/grpc_xds_k8s_lb.sh b/tools/internal_ci/linux/grpc_xds_k8s_lb.sh
deleted file mode 100755
index 79a25899fc..0000000000
--- a/tools/internal_ci/linux/grpc_xds_k8s_lb.sh
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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 -eo pipefail
-
-# Constants
-readonly GITHUB_REPOSITORY_NAME="grpc"
-readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh"
-## xDS test client Docker images
-readonly DOCKER_REGISTRY="us-docker.pkg.dev"
-readonly SERVER_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/cpp-server"
-readonly CLIENT_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/cpp-client"
-readonly FORCE_IMAGE_BUILD="${FORCE_IMAGE_BUILD:-0}"
-readonly BUILD_APP_PATH="interop-testing/build/install/grpc-interop-testing"
-
-#######################################
-# Builds test app Docker images and pushes them to GCR
-# Globals:
-# BUILD_APP_PATH
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# Arguments:
-# None
-# Outputs:
-# Writes the output of `gcloud builds submit` to stdout, stderr
-#######################################
-build_test_app_docker_images() {
- echo "Building C++ xDS interop test app Docker images"
- docker build -f "${SRC_DIR}/tools/dockerfile/interoptest/grpc_interop_cxx_xds/Dockerfile.xds_client" -t "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" "${SRC_DIR}"
- docker build -f "${SRC_DIR}/tools/dockerfile/interoptest/grpc_interop_cxx_xds/Dockerfile.xds_server" -t "${SERVER_IMAGE_NAME}:${GIT_COMMIT}" "${SRC_DIR}"
- gcloud -q auth configure-docker "${DOCKER_REGISTRY}"
- docker push "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}"
- docker push "${SERVER_IMAGE_NAME}:${GIT_COMMIT}"
- if is_version_branch "${TESTING_VERSION}"; then
- tag_and_push_docker_image "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- tag_and_push_docker_image "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- fi
-}
-
-#######################################
-# Builds test app and its docker images unless they already exist
-# Globals:
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# FORCE_IMAGE_BUILD
-# Arguments:
-# None
-# Outputs:
-# Writes the output to stdout, stderr
-#######################################
-build_docker_images_if_needed() {
- # Check if images already exist
- server_tags="$(gcloud_gcr_list_image_tags "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Server image: %s:%s\n" "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${server_tags:-Server image not found}"
-
- client_tags="$(gcloud_gcr_list_image_tags "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Client image: %s:%s\n" "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${client_tags:-Client image not found}"
-
- # Build if any of the images are missing, or FORCE_IMAGE_BUILD=1
- if [[ "${FORCE_IMAGE_BUILD}" == "1" || -z "${server_tags}" || -z "${client_tags}" ]]; then
- build_test_app_docker_images
- else
- echo "Skipping C++ test app build"
- fi
-}
-
-#######################################
-# Executes the test case
-# Globals:
-# TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile
-# KUBE_CONTEXT: The name of kubectl context with GKE cluster access
-# SECONDARY_KUBE_CONTEXT: The name of kubectl context with secondary GKE cluster access, if any
-# TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test: used by the framework to determine the supported PSM
-# features.
-# Arguments:
-# Test case name
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-# Test xUnit report to ${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml
-#######################################
-run_test() {
- # Test driver usage:
- # https://github.com/grpc/grpc/tree/master/tools/run_tests/xds_k8s_test_driver#basic-usage
- local test_name="${1:?Usage: run_test test_name}"
- local out_dir="${TEST_XML_OUTPUT_DIR}/${test_name}"
- mkdir -pv "${out_dir}"
- set -x
- python3 -m "tests.${test_name}" \
- --flagfile="${TEST_DRIVER_FLAGFILE}" \
- --kube_context="${KUBE_CONTEXT}" \
- --secondary_kube_context="${SECONDARY_KUBE_CONTEXT}" \
- --server_image="${SERVER_IMAGE_NAME}:${GIT_COMMIT}" \
- --client_image="${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- --testing_version="${TESTING_VERSION}" \
- --force_cleanup \
- --collect_app_logs \
- --log_dir="${out_dir}" \
- --xml_output_file="${out_dir}/sponge_log.xml" \
- ${@:2} \
- |& tee "${out_dir}/sponge_log.log"
-}
-
-run_alpha_test() {
- local test_name=$1
- run_test ${test_name} \
- --compute_api_version="v1alpha"
-}
-
-#######################################
-# Main function: provision software necessary to execute tests, and run them
-# Globals:
-# KOKORO_ARTIFACTS_DIR
-# GITHUB_REPOSITORY_NAME
-# SRC_DIR: Populated with absolute path to the source repo
-# TEST_DRIVER_REPO_DIR: Populated with the path to the repo containing
-# the test driver
-# TEST_DRIVER_FULL_DIR: Populated with the path to the test driver source code
-# TEST_DRIVER_FLAGFILE: Populated with relative path to test driver flagfile
-# TEST_XML_OUTPUT_DIR: Populated with the path to test xUnit XML report
-# GIT_ORIGIN_URL: Populated with the origin URL of git repo used for the build
-# GIT_COMMIT: Populated with the SHA-1 of git commit being built
-# GIT_COMMIT_SHORT: Populated with the short SHA-1 of git commit being built
-# KUBE_CONTEXT: Populated with name of kubectl context with GKE cluster access
-# SECONDARY_KUBE_CONTEXT: Populated with name of kubectl context with secondary GKE cluster access, if any
-# Arguments:
-# None
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-#######################################
-main() {
- local script_dir
- script_dir="$(dirname "$0")"
-
- # Source the test captured from the master branch.
- echo "Sourcing test driver install captured from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}"
- source /dev/stdin <<< "$(curl -s "${TEST_DRIVER_INSTALL_SCRIPT_URL}")"
-
- activate_gke_cluster GKE_CLUSTER_PSM_LB
- activate_secondary_gke_cluster GKE_CLUSTER_PSM_LB
-
- set -x
- if [[ -n "${KOKORO_ARTIFACTS_DIR}" ]]; then
- kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}"
- else
- local_setup_test_driver "${script_dir}"
- fi
- build_docker_images_if_needed
-
- # Run tests
- cd "${TEST_DRIVER_FULL_DIR}"
- local failed_tests=0
- run_alpha_test subsetting_test || (( ++failed_tests ))
- test_suites=(
- "app_net_test"
- "affinity_test"
- "api_listener_test"
- "change_backend_service_test"
- "custom_lb_test"
- "failover_test"
- "outlier_detection_test"
- "remove_neg_test"
- "round_robin_test"
- )
- for test in "${test_suites[@]}"; do
- run_test $test || (( ++failed_tests ))
- done
- echo "Failed test suites: ${failed_tests}"
-}
-
-main "$@"
diff --git a/tools/internal_ci/linux/grpc_xds_k8s_lb_python.cfg b/tools/internal_ci/linux/grpc_xds_k8s_lb_python.cfg
index 7de169c802..12d92f51b8 100644
--- a/tools/internal_ci/linux/grpc_xds_k8s_lb_python.cfg
+++ b/tools/internal_ci/linux/grpc_xds_k8s_lb_python.cfg
@@ -15,7 +15,7 @@
# Config file for the internal CI (in protobuf text format)
# Location of the continuous shell script in repository.
-build_file: "grpc/tools/internal_ci/linux/grpc_xds_k8s_lb_python.sh"
+build_file: "grpc/tools/internal_ci/linux/psm-interop-test-python.sh"
timeout_mins: 180
action {
define_artifacts {
@@ -24,3 +24,7 @@ action {
strip_prefix: "artifacts"
}
}
+env_vars {
+ key: "PSM_TEST_SUITE"
+ value: "lb"
+}
diff --git a/tools/internal_ci/linux/grpc_xds_k8s_lb_python.sh b/tools/internal_ci/linux/grpc_xds_k8s_lb_python.sh
deleted file mode 100755
index e85bf2f4d8..0000000000
--- a/tools/internal_ci/linux/grpc_xds_k8s_lb_python.sh
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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 -eo pipefail
-
-# Constants
-readonly GITHUB_REPOSITORY_NAME="grpc"
-readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh"
-## xDS test client Docker images
-readonly DOCKER_REGISTRY="us-docker.pkg.dev"
-readonly SERVER_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/python-server"
-readonly CLIENT_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/python-client"
-readonly FORCE_IMAGE_BUILD="${FORCE_IMAGE_BUILD:-0}"
-readonly BUILD_APP_PATH="interop-testing/build/install/grpc-interop-testing"
-readonly LANGUAGE_NAME="Python"
-
-#######################################
-# Builds test app Docker images and pushes them to GCR
-# Globals:
-# BUILD_APP_PATH
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# Arguments:
-# None
-# Outputs:
-# Writes the output of `gcloud builds submit` to stdout, stderr
-#######################################
-build_test_app_docker_images() {
- echo "Building ${LANGUAGE_NAME} xDS interop test app Docker images"
-
- pushd "${SRC_DIR}"
- docker build \
- -f src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.client \
- -t "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- .
-
- docker build \
- -f src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.server \
- -t "${SERVER_IMAGE_NAME}:${GIT_COMMIT}" \
- .
-
- popd
-
- gcloud -q auth configure-docker "${DOCKER_REGISTRY}"
-
- docker push "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}"
- docker push "${SERVER_IMAGE_NAME}:${GIT_COMMIT}"
-
- if is_version_branch "${TESTING_VERSION}"; then
- tag_and_push_docker_image "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- tag_and_push_docker_image "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- fi
-}
-
-#######################################
-# Builds test app and its docker images unless they already exist
-# Globals:
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# FORCE_IMAGE_BUILD
-# Arguments:
-# None
-# Outputs:
-# Writes the output to stdout, stderr
-#######################################
-build_docker_images_if_needed() {
- # Check if images already exist
- server_tags="$(gcloud_gcr_list_image_tags "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Server image: %s:%s\n" "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${server_tags:-Server image not found}"
-
- client_tags="$(gcloud_gcr_list_image_tags "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Client image: %s:%s\n" "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${client_tags:-Client image not found}"
-
- # Build if any of the images are missing, or FORCE_IMAGE_BUILD=1
- if [[ "${FORCE_IMAGE_BUILD}" == "1" || -z "${server_tags}" || -z "${client_tags}" ]]; then
- build_test_app_docker_images
- else
- echo "Skipping ${LANGUAGE_NAME} test app build"
- fi
-}
-
-#######################################
-# Executes the test case
-# Globals:
-# TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile
-# KUBE_CONTEXT: The name of kubectl context with GKE cluster access
-# SECONDARY_KUBE_CONTEXT: The name of kubectl context with secondary GKE cluster access, if any
-# TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test: used by the framework to determine the supported PSM
-# features.
-# Arguments:
-# Test case name
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-# Test xUnit report to ${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml
-#######################################
-run_test() {
- # Test driver usage:
- # https://github.com/grpc/grpc/tree/master/tools/run_tests/xds_k8s_test_driver#basic-usage
- local test_name="${1:?Usage: run_test test_name}"
- local out_dir="${TEST_XML_OUTPUT_DIR}/${test_name}"
- mkdir -pv "${out_dir}"
- set -x
- python3 -m "tests.${test_name}" \
- --flagfile="${TEST_DRIVER_FLAGFILE}" \
- --kube_context="${KUBE_CONTEXT}" \
- --secondary_kube_context="${SECONDARY_KUBE_CONTEXT}" \
- --client_image="${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- --server_image="${SERVER_IMAGE_NAME}:${GIT_COMMIT}" \
- --testing_version="${TESTING_VERSION}" \
- --force_cleanup \
- --collect_app_logs \
- --log_dir="${out_dir}" \
- --xml_output_file="${out_dir}/sponge_log.xml" \
- |& tee "${out_dir}/sponge_log.log"
-}
-
-#######################################
-# Main function: provision software necessary to execute tests, and run them
-# Globals:
-# KOKORO_ARTIFACTS_DIR
-# GITHUB_REPOSITORY_NAME
-# SRC_DIR: Populated with absolute path to the source repo
-# TEST_DRIVER_REPO_DIR: Populated with the path to the repo containing
-# the test driver
-# TEST_DRIVER_FULL_DIR: Populated with the path to the test driver source code
-# TEST_DRIVER_FLAGFILE: Populated with relative path to test driver flagfile
-# TEST_XML_OUTPUT_DIR: Populated with the path to test xUnit XML report
-# GIT_ORIGIN_URL: Populated with the origin URL of git repo used for the build
-# GIT_COMMIT: Populated with the SHA-1 of git commit being built
-# GIT_COMMIT_SHORT: Populated with the short SHA-1 of git commit being built
-# KUBE_CONTEXT: Populated with name of kubectl context with GKE cluster access
-# SECONDARY_KUBE_CONTEXT: Populated with name of kubectl context with secondary GKE cluster access, if any
-# Arguments:
-# None
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-#######################################
-main() {
- local script_dir
- script_dir="$(dirname "$0")"
-
- # Source the test driver from the master branch.
- echo "Sourcing test driver install script from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}"
- source /dev/stdin <<< "$(curl -s "${TEST_DRIVER_INSTALL_SCRIPT_URL}")"
-
- activate_gke_cluster GKE_CLUSTER_PSM_LB
- activate_secondary_gke_cluster GKE_CLUSTER_PSM_LB
-
- set -x
- if [[ -n "${KOKORO_ARTIFACTS_DIR}" ]]; then
- kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}"
- else
- local_setup_test_driver "${script_dir}"
- fi
- build_docker_images_if_needed
-
- # Run tests
- cd "${TEST_DRIVER_FULL_DIR}"
- local failed_tests=0
- test_suites=(
- "app_net_test"
- "api_listener_test"
- "change_backend_service_test"
- "failover_test"
- "outlier_detection_test"
- "remove_neg_test"
- "round_robin_test"
- )
- for test in "${test_suites[@]}"; do
- run_test $test || (( ++failed_tests ))
- done
- echo "Failed test suites: ${failed_tests}"
-}
-
-main "$@"
diff --git a/tools/internal_ci/linux/grpc_xds_url_map.cfg b/tools/internal_ci/linux/grpc_xds_url_map.cfg
index 9ac4729245..5161249920 100644
--- a/tools/internal_ci/linux/grpc_xds_url_map.cfg
+++ b/tools/internal_ci/linux/grpc_xds_url_map.cfg
@@ -15,7 +15,7 @@
# Config file for the internal CI (in protobuf text format)
# Location of the continuous shell script in repository.
-build_file: "grpc/tools/internal_ci/linux/grpc_xds_url_map.sh"
+build_file: "grpc/tools/internal_ci/linux/psm-interop-test-cpp.sh"
timeout_mins: 90
action {
define_artifacts {
@@ -24,3 +24,7 @@ action {
strip_prefix: "artifacts"
}
}
+env_vars {
+ key: "PSM_TEST_SUITE"
+ value: "url_map"
+}
diff --git a/tools/internal_ci/linux/grpc_xds_url_map.sh b/tools/internal_ci/linux/grpc_xds_url_map.sh
deleted file mode 100755
index b80ae249ec..0000000000
--- a/tools/internal_ci/linux/grpc_xds_url_map.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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 -eo pipefail
-
-# Constants
-readonly GITHUB_REPOSITORY_NAME="grpc"
-readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh"
-## xDS test client Docker images
-readonly DOCKER_REGISTRY="us-docker.pkg.dev"
-readonly CLIENT_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/cpp-client"
-readonly FORCE_IMAGE_BUILD="${FORCE_IMAGE_BUILD:-0}"
-readonly BUILD_APP_PATH="interop-testing/build/install/grpc-interop-testing"
-
-#######################################
-# Builds test app Docker images and pushes them to GCR
-# Globals:
-# BUILD_APP_PATH
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# Arguments:
-# None
-# Outputs:
-# Writes the output of `gcloud builds submit` to stdout, stderr
-#######################################
-build_test_app_docker_images() {
- echo "Building C++ xDS interop test app Docker images"
- docker build -f "${SRC_DIR}/tools/dockerfile/interoptest/grpc_interop_cxx_xds/Dockerfile.xds_client" -t "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" "${SRC_DIR}"
- gcloud -q auth configure-docker "${DOCKER_REGISTRY}"
- docker push "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}"
- if is_version_branch "${TESTING_VERSION}"; then
- tag_and_push_docker_image "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- fi
-}
-
-#######################################
-# Builds test app and its docker images unless they already exist
-# Globals:
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# FORCE_IMAGE_BUILD
-# Arguments:
-# None
-# Outputs:
-# Writes the output to stdout, stderr
-#######################################
-build_docker_images_if_needed() {
- # Check if images already exist
- client_tags="$(gcloud_gcr_list_image_tags "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Client image: %s:%s\n" "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${client_tags:-Client image not found}"
-
- # Build if any of the images are missing, or FORCE_IMAGE_BUILD=1
- if [[ "${FORCE_IMAGE_BUILD}" == "1" || -z "${client_tags}" ]]; then
- build_test_app_docker_images
- else
- echo "Skipping C++ test app build"
- fi
-}
-
-#######################################
-# Executes the test case
-# Globals:
-# TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile
-# KUBE_CONTEXT: The name of kubectl context with GKE cluster access
-# TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test: used by the framework to determine the supported PSM
-# features.
-# Arguments:
-# Test case name
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-# Test xUnit report to ${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml
-#######################################
-run_test() {
- # Test driver usage:
- # https://github.com/grpc/grpc/tree/master/tools/run_tests/xds_k8s_test_driver#basic-usage
- local test_name="${1:?Usage: run_test test_name}"
- local out_dir="${TEST_XML_OUTPUT_DIR}/${test_name}"
- mkdir -pv "${out_dir}"
- set -x
- python3 -m "tests.${test_name}" \
- --flagfile="${TEST_DRIVER_FLAGFILE}" \
- --flagfile="config/url-map.cfg" \
- --kube_context="${KUBE_CONTEXT}" \
- --client_image="${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- --testing_version="${TESTING_VERSION}" \
- --collect_app_logs \
- --log_dir="${out_dir}" \
- --xml_output_file="${out_dir}/sponge_log.xml" \
- |& tee "${out_dir}/sponge_log.log"
-}
-
-#######################################
-# Main function: provision software necessary to execute tests, and run them
-# Globals:
-# KOKORO_ARTIFACTS_DIR
-# GITHUB_REPOSITORY_NAME
-# SRC_DIR: Populated with absolute path to the source repo
-# TEST_DRIVER_REPO_DIR: Populated with the path to the repo containing
-# the test driver
-# TEST_DRIVER_FULL_DIR: Populated with the path to the test driver source code
-# TEST_DRIVER_FLAGFILE: Populated with relative path to test driver flagfile
-# TEST_XML_OUTPUT_DIR: Populated with the path to test xUnit XML report
-# GIT_ORIGIN_URL: Populated with the origin URL of git repo used for the build
-# GIT_COMMIT: Populated with the SHA-1 of git commit being built
-# GIT_COMMIT_SHORT: Populated with the short SHA-1 of git commit being built
-# KUBE_CONTEXT: Populated with name of kubectl context with GKE cluster access
-# Arguments:
-# None
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-#######################################
-main() {
- local script_dir
- script_dir="$(dirname "$0")"
-
- # Source the test driver from the master branch.
- echo "Sourcing test driver install script from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}"
- source /dev/stdin <<< "$(curl -s "${TEST_DRIVER_INSTALL_SCRIPT_URL}")"
-
- activate_gke_cluster GKE_CLUSTER_PSM_BASIC
-
- set -x
- if [[ -n "${KOKORO_ARTIFACTS_DIR}" ]]; then
- kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}"
- else
- local_setup_test_driver "${script_dir}"
- fi
- build_docker_images_if_needed
- # Run tests
- cd "${TEST_DRIVER_FULL_DIR}"
- run_test url_map || echo "Failed url_map test"
-}
-
-main "$@"
diff --git a/tools/internal_ci/linux/grpc_xds_url_map_python.cfg b/tools/internal_ci/linux/grpc_xds_url_map_python.cfg
index 4e91dc5b8f..efc17f5e3e 100644
--- a/tools/internal_ci/linux/grpc_xds_url_map_python.cfg
+++ b/tools/internal_ci/linux/grpc_xds_url_map_python.cfg
@@ -15,7 +15,7 @@
# Config file for the internal CI (in protobuf text format)
# Location of the continuous shell script in repository.
-build_file: "grpc/tools/internal_ci/linux/grpc_xds_url_map_python.sh"
+build_file: "grpc/tools/internal_ci/linux/psm-interop-test-python.sh"
timeout_mins: 90
action {
define_artifacts {
@@ -24,3 +24,7 @@ action {
strip_prefix: "artifacts"
}
}
+env_vars {
+ key: "PSM_TEST_SUITE"
+ value: "url_map"
+}
diff --git a/tools/internal_ci/linux/grpc_xds_url_map_python.sh b/tools/internal_ci/linux/grpc_xds_url_map_python.sh
deleted file mode 100755
index c5a3ed5582..0000000000
--- a/tools/internal_ci/linux/grpc_xds_url_map_python.sh
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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 -eo pipefail
-
-# Constants
-readonly GITHUB_REPOSITORY_NAME="grpc"
-readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh"
-## xDS test client Docker images
-readonly DOCKER_REGISTRY="us-docker.pkg.dev"
-readonly CLIENT_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/python-client"
-readonly FORCE_IMAGE_BUILD="${FORCE_IMAGE_BUILD:-0}"
-readonly BUILD_APP_PATH="interop-testing/build/install/grpc-interop-testing"
-readonly LANGUAGE_NAME="Python"
-
-#######################################
-# Builds test app Docker images and pushes them to GCR
-# Globals:
-# BUILD_APP_PATH
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# Arguments:
-# None
-# Outputs:
-# Writes the output of `gcloud builds submit` to stdout, stderr
-#######################################
-build_test_app_docker_images() {
- echo "Building ${LANGUAGE_NAME} xDS interop test app Docker images"
-
- pushd "${SRC_DIR}"
- docker build \
- -f src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.client \
- -t "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- .
-
- popd
-
- gcloud -q auth configure-docker "${DOCKER_REGISTRY}"
-
- docker push "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}"
- if is_version_branch "${TESTING_VERSION}"; then
- tag_and_push_docker_image "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- fi
-}
-
-#######################################
-# Builds test app and its docker images unless they already exist
-# Globals:
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# FORCE_IMAGE_BUILD
-# Arguments:
-# None
-# Outputs:
-# Writes the output to stdout, stderr
-#######################################
-build_docker_images_if_needed() {
- # Check if images already exist
- client_tags="$(gcloud_gcr_list_image_tags "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Client image: %s:%s\n" "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${client_tags:-Client image not found}"
-
- # Build if any of the images are missing, or FORCE_IMAGE_BUILD=1
- if [[ "${FORCE_IMAGE_BUILD}" == "1" || -z "${client_tags}" ]]; then
- build_test_app_docker_images
- else
- echo "Skipping ${LANGUAGE_NAME} test app build"
- fi
-}
-
-#######################################
-# Executes the test case
-# Globals:
-# TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile
-# KUBE_CONTEXT: The name of kubectl context with GKE cluster access
-# TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test: used by the framework to determine the supported PSM
-# features.
-# Arguments:
-# Test case name
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-# Test xUnit report to ${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml
-#######################################
-run_test() {
- # Test driver usage:
- # https://github.com/grpc/grpc/tree/master/tools/run_tests/xds_k8s_test_driver#basic-usage
- local test_name="${1:?Usage: run_test test_name}"
- local out_dir="${TEST_XML_OUTPUT_DIR}/${test_name}"
- mkdir -pv "${out_dir}"
- set -x
- python3 -m "tests.${test_name}" \
- --flagfile="${TEST_DRIVER_FLAGFILE}" \
- --flagfile="config/url-map.cfg" \
- --kube_context="${KUBE_CONTEXT}" \
- --client_image="${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- --testing_version="${TESTING_VERSION}" \
- --collect_app_logs \
- --log_dir="${out_dir}" \
- --xml_output_file="${out_dir}/sponge_log.xml" \
- |& tee "${out_dir}/sponge_log.log"
-}
-
-#######################################
-# Main function: provision software necessary to execute tests, and run them
-# Globals:
-# KOKORO_ARTIFACTS_DIR
-# GITHUB_REPOSITORY_NAME
-# SRC_DIR: Populated with absolute path to the source repo
-# TEST_DRIVER_REPO_DIR: Populated with the path to the repo containing
-# the test driver
-# TEST_DRIVER_FULL_DIR: Populated with the path to the test driver source code
-# TEST_DRIVER_FLAGFILE: Populated with relative path to test driver flagfile
-# TEST_XML_OUTPUT_DIR: Populated with the path to test xUnit XML report
-# GIT_ORIGIN_URL: Populated with the origin URL of git repo used for the build
-# GIT_COMMIT: Populated with the SHA-1 of git commit being built
-# GIT_COMMIT_SHORT: Populated with the short SHA-1 of git commit being built
-# KUBE_CONTEXT: Populated with name of kubectl context with GKE cluster access
-# Arguments:
-# None
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-#######################################
-main() {
- local script_dir
- script_dir="$(dirname "$0")"
-
- # Source the test driver from the master branch.
- echo "Sourcing test driver install script from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}"
- source /dev/stdin <<< "$(curl -s "${TEST_DRIVER_INSTALL_SCRIPT_URL}")"
-
- activate_gke_cluster GKE_CLUSTER_PSM_BASIC
-
- set -x
- if [[ -n "${KOKORO_ARTIFACTS_DIR}" ]]; then
- kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}"
- else
- local_setup_test_driver "${script_dir}"
- fi
- build_docker_images_if_needed
- # Run tests
- cd "${TEST_DRIVER_FULL_DIR}"
- run_test url_map || echo "Failed url_map test"
-}
-
-main "$@"
diff --git a/tools/internal_ci/linux/psm-interop-build-cpp.sh b/tools/internal_ci/linux/psm-interop-build-cpp.sh
new file mode 100755
index 0000000000..672cb4f156
--- /dev/null
+++ b/tools/internal_ci/linux/psm-interop-build-cpp.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+# Copyright 2024 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 -eo pipefail
+
+#######################################
+# Builds test app Docker images and pushes them to GCR.
+# Called from psm_interop_kokoro_lib.sh.
+#
+# Globals:
+# SRC_DIR: Absolute path to the source repo on Kokoro VM
+# SERVER_IMAGE_NAME: Test server Docker image name
+# CLIENT_IMAGE_NAME: Test client Docker image name
+# GIT_COMMIT: SHA-1 of git commit being built
+# DOCKER_REGISTRY: Docker registry to push to
+# Outputs:
+# Writes the output of docker image build stdout, stderr
+#######################################
+psm::lang::build_docker_images() {
+ local client_dockerfile="tools/dockerfile/interoptest/grpc_interop_cxx_xds/Dockerfile.xds_client"
+ local server_dockerfile="tools/dockerfile/interoptest/grpc_interop_cxx_xds/Dockerfile.xds_server"
+ psm::build::docker_images_generic "${client_dockerfile}" "${server_dockerfile}"
+}
diff --git a/tools/internal_ci/linux/psm-interop-build-python.sh b/tools/internal_ci/linux/psm-interop-build-python.sh
new file mode 100755
index 0000000000..5a2ab9e8c0
--- /dev/null
+++ b/tools/internal_ci/linux/psm-interop-build-python.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+# Copyright 2024 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 -eo pipefail
+
+#######################################
+# Builds test app Docker images and pushes them to GCR.
+# Called from psm_interop_kokoro_lib.sh.
+#
+# Globals:
+# SRC_DIR: Absolute path to the source repo on Kokoro VM
+# SERVER_IMAGE_NAME: Test server Docker image name
+# CLIENT_IMAGE_NAME: Test client Docker image name
+# GIT_COMMIT: SHA-1 of git commit being built
+# DOCKER_REGISTRY: Docker registry to push to
+# Outputs:
+# Writes the output of docker image build stdout, stderr
+#######################################
+psm::lang::build_docker_images() {
+ local client_dockerfile="src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.client"
+ local server_dockerfile="src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.server"
+ psm::build::docker_images_generic "${client_dockerfile}" "${server_dockerfile}"
+}
diff --git a/tools/internal_ci/linux/psm-interop-install-lib.sh b/tools/internal_ci/linux/psm-interop-install-lib.sh
new file mode 100755
index 0000000000..8b92344e39
--- /dev/null
+++ b/tools/internal_ci/linux/psm-interop-install-lib.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+# Copyright 2024 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 -eo pipefail
+
+# Used locally.
+readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh"
+
+psm::lang::source_install_lib() {
+ echo "Sourcing test driver install script from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}"
+ local install_lib
+ # Download to a tmp file.
+ install_lib="$(mktemp -d)/psm_interop_kokoro_lib.sh"
+ curl -s --retry-connrefused --retry 5 -o "${install_lib}" "${TEST_DRIVER_INSTALL_SCRIPT_URL}"
+ # Checksum.
+ if command -v sha256sum &> /dev/null; then
+ echo "Install script checksum:"
+ sha256sum "${install_lib}"
+ fi
+ source "${install_lib}"
+}
diff --git a/tools/internal_ci/linux/psm-interop-test-cpp.sh b/tools/internal_ci/linux/psm-interop-test-cpp.sh
new file mode 100755
index 0000000000..8774b81b24
--- /dev/null
+++ b/tools/internal_ci/linux/psm-interop-test-cpp.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+# Copyright 2024 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 -eo pipefail
+
+# Input parameters to psm:: methods of the install script.
+readonly GRPC_LANGUAGE="cpp"
+readonly BUILD_SCRIPT_DIR="$(dirname "$0")"
+
+source "${BUILD_SCRIPT_DIR}/psm-interop-install-lib.sh"
+psm::lang::source_install_lib
+source "${BUILD_SCRIPT_DIR}/psm-interop-build-${GRPC_LANGUAGE}.sh"
+psm::run "${PSM_TEST_SUITE}"
diff --git a/tools/internal_ci/linux/psm-interop-test-python.sh b/tools/internal_ci/linux/psm-interop-test-python.sh
new file mode 100755
index 0000000000..3b80494638
--- /dev/null
+++ b/tools/internal_ci/linux/psm-interop-test-python.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+# Copyright 2024 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 -eo pipefail
+
+# Input parameters to psm:: methods of the install script.
+readonly GRPC_LANGUAGE="python"
+readonly BUILD_SCRIPT_DIR="$(dirname "$0")"
+
+source "${BUILD_SCRIPT_DIR}/psm-interop-install-lib.sh"
+psm::lang::source_install_lib
+source "${BUILD_SCRIPT_DIR}/psm-interop-build-${GRPC_LANGUAGE}.sh"
+psm::run "${PSM_TEST_SUITE}"
diff --git a/tools/internal_ci/linux/psm-security-python.cfg b/tools/internal_ci/linux/psm-security-python.cfg
index 02fe404492..54660a1851 100644
--- a/tools/internal_ci/linux/psm-security-python.cfg
+++ b/tools/internal_ci/linux/psm-security-python.cfg
@@ -15,7 +15,7 @@
# Config file for the internal CI (in protobuf text format)
# Location of the continuous shell script in repository.
-build_file: "grpc/tools/internal_ci/linux/psm-security-python.sh"
+build_file: "grpc/tools/internal_ci/linux/psm-interop-test-python.sh"
timeout_mins: 240
action {
define_artifacts {
@@ -24,3 +24,7 @@ action {
strip_prefix: "artifacts"
}
}
+env_vars {
+ key: "PSM_TEST_SUITE"
+ value: "security"
+}
diff --git a/tools/internal_ci/linux/psm-security-python.sh b/tools/internal_ci/linux/psm-security-python.sh
deleted file mode 100755
index fb0b6b7a88..0000000000
--- a/tools/internal_ci/linux/psm-security-python.sh
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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 -eo pipefail
-
-# Constants
-readonly GITHUB_REPOSITORY_NAME="grpc"
-readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh"
-## xDS test server/client Docker images
-readonly DOCKER_REGISTRY="us-docker.pkg.dev"
-readonly SERVER_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/python-server"
-readonly CLIENT_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/python-client"
-readonly FORCE_IMAGE_BUILD="${FORCE_IMAGE_BUILD:-0}"
-readonly BUILD_APP_PATH="interop-testing/build/install/grpc-interop-testing"
-readonly LANGUAGE_NAME="Python"
-
-#######################################
-# Builds test app Docker images and pushes them to GCR
-# Globals:
-# BUILD_APP_PATH
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test, f.e. v1.42.x, master
-# Arguments:
-# None
-# Outputs:
-# Writes the output of `gcloud builds submit` to stdout, stderr
-#######################################
-build_test_app_docker_images() {
- echo "Building ${LANGUAGE_NAME} xDS interop test app Docker images"
-
- pushd "${SRC_DIR}"
- docker build \
- -f src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.client \
- -t "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- .
-
- docker build \
- -f src/python/grpcio_tests/tests_py3_only/interop/Dockerfile.server \
- -t "${SERVER_IMAGE_NAME}:${GIT_COMMIT}" \
- .
-
- popd
-
- gcloud -q auth configure-docker "${DOCKER_REGISTRY}"
-
- docker push "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}"
- docker push "${SERVER_IMAGE_NAME}:${GIT_COMMIT}"
-
- if is_version_branch "${TESTING_VERSION}"; then
- tag_and_push_docker_image "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- tag_and_push_docker_image "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- fi
-}
-
-#######################################
-# Builds test app and its docker images unless they already exist
-# Globals:
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# FORCE_IMAGE_BUILD
-# Arguments:
-# None
-# Outputs:
-# Writes the output to stdout, stderr
-#######################################
-build_docker_images_if_needed() {
- # Check if images already exist
- server_tags="$(gcloud_gcr_list_image_tags "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Server image: %s:%s\n" "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${server_tags:-Server image not found}"
-
- client_tags="$(gcloud_gcr_list_image_tags "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Client image: %s:%s\n" "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${client_tags:-Client image not found}"
-
- # Build if any of the images are missing, or FORCE_IMAGE_BUILD=1
- if [[ "${FORCE_IMAGE_BUILD}" == "1" || -z "${server_tags}" || -z "${client_tags}" ]]; then
- build_test_app_docker_images
- else
- echo "Skipping ${LANGUAGE_NAME} test app build"
- fi
-}
-
-#######################################
-# Executes the test case
-# Globals:
-# TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile
-# KUBE_CONTEXT: The name of kubectl context with GKE cluster access
-# TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test: used by the framework to determine the supported PSM
-# features.
-# Arguments:
-# Test case name
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-# Test xUnit report to ${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml
-#######################################
-run_test() {
- # Test driver usage:
- # https://github.com/grpc/grpc/tree/master/tools/run_tests/xds_k8s_test_driver#basic-usage
- local test_name="${1:?Usage: run_test test_name}"
- local out_dir="${TEST_XML_OUTPUT_DIR}/${test_name}"
- mkdir -pv "${out_dir}"
- set -x
- python3 -m "tests.${test_name}" \
- --flagfile="${TEST_DRIVER_FLAGFILE}" \
- --kube_context="${KUBE_CONTEXT}" \
- --server_image="${SERVER_IMAGE_NAME}:${GIT_COMMIT}" \
- --client_image="${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- --testing_version="${TESTING_VERSION}" \
- --nocheck_local_certs \
- --force_cleanup \
- --collect_app_logs \
- --log_dir="${out_dir}" \
- --xml_output_file="${out_dir}/sponge_log.xml" \
- |& tee "${out_dir}/sponge_log.log"
- set +x
-}
-
-#######################################
-# Main function: provision software necessary to execute tests, and run them
-# Globals:
-# KOKORO_ARTIFACTS_DIR
-# GITHUB_REPOSITORY_NAME
-# SRC_DIR: Populated with absolute path to the source repo
-# TEST_DRIVER_REPO_DIR: Populated with the path to the repo containing
-# the test driver
-# TEST_DRIVER_FULL_DIR: Populated with the path to the test driver source code
-# TEST_DRIVER_FLAGFILE: Populated with relative path to test driver flagfile
-# TEST_XML_OUTPUT_DIR: Populated with the path to test xUnit XML report
-# GIT_ORIGIN_URL: Populated with the origin URL of git repo used for the build
-# GIT_COMMIT: Populated with the SHA-1 of git commit being built
-# GIT_COMMIT_SHORT: Populated with the short SHA-1 of git commit being built
-# KUBE_CONTEXT: Populated with name of kubectl context with GKE cluster access
-# Arguments:
-# None
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-#######################################
-main() {
- local script_dir
- script_dir="$(dirname "$0")"
-
- # Source the test driver from the master branch.
- echo "Sourcing test driver install script from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}"
- source /dev/stdin <<< "$(curl -s "${TEST_DRIVER_INSTALL_SCRIPT_URL}")"
-
- activate_gke_cluster GKE_CLUSTER_PSM_SECURITY
-
- set -x
- if [[ -n "${KOKORO_ARTIFACTS_DIR}" ]]; then
- kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}"
- else
- local_setup_test_driver "${script_dir}"
- fi
- build_docker_images_if_needed
- # Run tests
- cd "${TEST_DRIVER_FULL_DIR}"
- local failed_tests=0
- test_suites=("baseline_test" "security_test" "authz_test")
- for test in "${test_suites[@]}"; do
- run_test $test || (( ++failed_tests ))
- done
- echo "Failed test suites: ${failed_tests}"
-}
-
-main "$@"
diff --git a/tools/internal_ci/linux/psm-security.cfg b/tools/internal_ci/linux/psm-security.cfg
index 9b00aaf40d..098a0d60e7 100644
--- a/tools/internal_ci/linux/psm-security.cfg
+++ b/tools/internal_ci/linux/psm-security.cfg
@@ -15,7 +15,7 @@
# Config file for the internal CI (in protobuf text format)
# Location of the continuous shell script in repository.
-build_file: "grpc/tools/internal_ci/linux/psm-security.sh"
+build_file: "grpc/tools/internal_ci/linux/psm-interop-test-cpp.sh"
timeout_mins: 240
action {
define_artifacts {
@@ -24,3 +24,7 @@ action {
strip_prefix: "artifacts"
}
}
+env_vars {
+ key: "PSM_TEST_SUITE"
+ value: "security"
+}
diff --git a/tools/internal_ci/linux/psm-security.sh b/tools/internal_ci/linux/psm-security.sh
deleted file mode 100755
index d88ec17d16..0000000000
--- a/tools/internal_ci/linux/psm-security.sh
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2021 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 -eo pipefail
-
-# Constants
-readonly GITHUB_REPOSITORY_NAME="grpc"
-readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh"
-## xDS test server/client Docker images
-readonly DOCKER_REGISTRY="us-docker.pkg.dev"
-readonly SERVER_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/cpp-server"
-readonly CLIENT_IMAGE_NAME="us-docker.pkg.dev/grpc-testing/psm-interop/cpp-client"
-readonly FORCE_IMAGE_BUILD="${FORCE_IMAGE_BUILD:-0}"
-readonly BUILD_APP_PATH="interop-testing/build/install/grpc-interop-testing"
-
-#######################################
-# Builds test app Docker images and pushes them to GCR
-# Globals:
-# BUILD_APP_PATH
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test, f.e. v1.42.x, master
-# Arguments:
-# None
-# Outputs:
-# Writes the output of `gcloud builds submit` to stdout, stderr
-#######################################
-build_test_app_docker_images() {
- echo "Building C++ xDS interop test app Docker images"
- docker build -f "${SRC_DIR}/tools/dockerfile/interoptest/grpc_interop_cxx_xds/Dockerfile.xds_client" -t "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" "${SRC_DIR}"
- docker build -f "${SRC_DIR}/tools/dockerfile/interoptest/grpc_interop_cxx_xds/Dockerfile.xds_server" -t "${SERVER_IMAGE_NAME}:${GIT_COMMIT}" "${SRC_DIR}"
- gcloud -q auth configure-docker "${DOCKER_REGISTRY}"
- docker push "${CLIENT_IMAGE_NAME}:${GIT_COMMIT}"
- docker push "${SERVER_IMAGE_NAME}:${GIT_COMMIT}"
- if is_version_branch "${TESTING_VERSION}"; then
- tag_and_push_docker_image "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- tag_and_push_docker_image "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}" "${TESTING_VERSION}"
- fi
-}
-
-#######################################
-# Builds test app and its docker images unless they already exist
-# Globals:
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# FORCE_IMAGE_BUILD
-# Arguments:
-# None
-# Outputs:
-# Writes the output to stdout, stderr
-#######################################
-build_docker_images_if_needed() {
- # Check if images already exist
- server_tags="$(gcloud_gcr_list_image_tags "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Server image: %s:%s\n" "${SERVER_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${server_tags:-Server image not found}"
-
- client_tags="$(gcloud_gcr_list_image_tags "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}")"
- printf "Client image: %s:%s\n" "${CLIENT_IMAGE_NAME}" "${GIT_COMMIT}"
- echo "${client_tags:-Client image not found}"
-
- # Build if any of the images are missing, or FORCE_IMAGE_BUILD=1
- if [[ "${FORCE_IMAGE_BUILD}" == "1" || -z "${server_tags}" || -z "${client_tags}" ]]; then
- build_test_app_docker_images
- else
- echo "Skipping C++ test app build"
- fi
-}
-
-#######################################
-# Executes the test case
-# Globals:
-# TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile
-# KUBE_CONTEXT: The name of kubectl context with GKE cluster access
-# TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report
-# SERVER_IMAGE_NAME: Test server Docker image name
-# CLIENT_IMAGE_NAME: Test client Docker image name
-# GIT_COMMIT: SHA-1 of git commit being built
-# TESTING_VERSION: version branch under test: used by the framework to determine the supported PSM
-# features.
-# Arguments:
-# Test case name
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-# Test xUnit report to ${TEST_XML_OUTPUT_DIR}/${test_name}/sponge_log.xml
-#######################################
-run_test() {
- # Test driver usage:
- # https://github.com/grpc/grpc/tree/master/tools/run_tests/xds_k8s_test_driver#basic-usage
- local test_name="${1:?Usage: run_test test_name}"
- local out_dir="${TEST_XML_OUTPUT_DIR}/${test_name}"
- mkdir -pv "${out_dir}"
- set -x
- python3 -m "tests.${test_name}" \
- --flagfile="${TEST_DRIVER_FLAGFILE}" \
- --kube_context="${KUBE_CONTEXT}" \
- --server_image="${SERVER_IMAGE_NAME}:${GIT_COMMIT}" \
- --client_image="${CLIENT_IMAGE_NAME}:${GIT_COMMIT}" \
- --testing_version="${TESTING_VERSION}" \
- --nocheck_local_certs \
- --force_cleanup \
- --collect_app_logs \
- --log_dir="${out_dir}" \
- --xml_output_file="${out_dir}/sponge_log.xml" \
- |& tee "${out_dir}/sponge_log.log"
-}
-
-#######################################
-# Main function: provision software necessary to execute tests, and run them
-# Globals:
-# KOKORO_ARTIFACTS_DIR
-# GITHUB_REPOSITORY_NAME
-# SRC_DIR: Populated with absolute path to the source repo
-# TEST_DRIVER_REPO_DIR: Populated with the path to the repo containing
-# the test driver
-# TEST_DRIVER_FULL_DIR: Populated with the path to the test driver source code
-# TEST_DRIVER_FLAGFILE: Populated with relative path to test driver flagfile
-# TEST_XML_OUTPUT_DIR: Populated with the path to test xUnit XML report
-# GIT_ORIGIN_URL: Populated with the origin URL of git repo used for the build
-# GIT_COMMIT: Populated with the SHA-1 of git commit being built
-# GIT_COMMIT_SHORT: Populated with the short SHA-1 of git commit being built
-# KUBE_CONTEXT: Populated with name of kubectl context with GKE cluster access
-# Arguments:
-# None
-# Outputs:
-# Writes the output of test execution to stdout, stderr
-#######################################
-main() {
- local script_dir
- script_dir="$(dirname "$0")"
-
- # Source the test driver from the master branch.
- echo "Sourcing test driver install script from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}"
- source /dev/stdin <<< "$(curl -s "${TEST_DRIVER_INSTALL_SCRIPT_URL}")"
-
- activate_gke_cluster GKE_CLUSTER_PSM_SECURITY
-
- set -x
- if [[ -n "${KOKORO_ARTIFACTS_DIR}" ]]; then
- kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}"
- else
- local_setup_test_driver "${script_dir}"
- fi
- build_docker_images_if_needed
- # Run tests
- cd "${TEST_DRIVER_FULL_DIR}"
- local failed_tests=0
- test_suites=("baseline_test" "security_test" "authz_test")
- for test in "${test_suites[@]}"; do
- run_test $test || (( ++failed_tests ))
- done
- echo "Failed test suites: ${failed_tests}"
-}
-
-main "$@"