xref: /aosp_15_r20/external/grpc-grpc/test/distrib/python/test_packages.sh (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker#!/usr/bin/env bash
2*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2018 gRPC authors.
3*cc02d7e2SAndroid Build Coastguard Worker#
4*cc02d7e2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*cc02d7e2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*cc02d7e2SAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*cc02d7e2SAndroid Build Coastguard Worker#
8*cc02d7e2SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
9*cc02d7e2SAndroid Build Coastguard Worker#
10*cc02d7e2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*cc02d7e2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*cc02d7e2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*cc02d7e2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*cc02d7e2SAndroid Build Coastguard Worker# limitations under the License.
15*cc02d7e2SAndroid Build Coastguard Worker
16*cc02d7e2SAndroid Build Coastguard Workerset -ex
17*cc02d7e2SAndroid Build Coastguard Worker
18*cc02d7e2SAndroid Build Coastguard Workercd "$(dirname "$0")"
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Workershopt -s nullglob
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard Workerecho "Testing Python packages with input artifacts:"
23*cc02d7e2SAndroid Build Coastguard Workerls "$EXTERNAL_GIT_ROOT"/input_artifacts
24*cc02d7e2SAndroid Build Coastguard Worker
25*cc02d7e2SAndroid Build Coastguard Workerif [[ "$1" == "binary" ]]
26*cc02d7e2SAndroid Build Coastguard Workerthen
27*cc02d7e2SAndroid Build Coastguard Worker  echo "Testing Python binary distribution"
28*cc02d7e2SAndroid Build Coastguard Worker  ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[-_0-9a-z.]*.whl)
29*cc02d7e2SAndroid Build Coastguard Worker  TOOLS_ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[_-]*tools[-_0-9a-z.]*.whl)
30*cc02d7e2SAndroid Build Coastguard Worker  OBSERVABILITY_ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[_-]*observability[-_0-9a-z.]*.whl)
31*cc02d7e2SAndroid Build Coastguard Workerelse
32*cc02d7e2SAndroid Build Coastguard Worker  echo "Testing Python source distribution"
33*cc02d7e2SAndroid Build Coastguard Worker  ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[-_0-9a-z.]*.tar.gz)
34*cc02d7e2SAndroid Build Coastguard Worker  TOOLS_ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[_-]*tools[-_0-9a-z.]*.tar.gz)
35*cc02d7e2SAndroid Build Coastguard Worker  OBSERVABILITY_ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[_-]*observability[-_0-9a-z.]*.tar.gz)
36*cc02d7e2SAndroid Build Coastguard Workerfi
37*cc02d7e2SAndroid Build Coastguard Worker
38*cc02d7e2SAndroid Build Coastguard WorkerHEALTH_ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[_-]*health[_-]*checking[-_0-9a-z.]*.tar.gz)
39*cc02d7e2SAndroid Build Coastguard WorkerREFLECTION_ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[_-]*reflection[-_0-9a-z.]*.tar.gz)
40*cc02d7e2SAndroid Build Coastguard WorkerTESTING_ARCHIVES=("$EXTERNAL_GIT_ROOT"/input_artifacts/grpcio[_-]*testing[-_0-9a-z.]*.tar.gz)
41*cc02d7e2SAndroid Build Coastguard Worker
42*cc02d7e2SAndroid Build Coastguard WorkerVIRTUAL_ENV=$(mktemp -d)
43*cc02d7e2SAndroid Build Coastguard Workerpython3 -m virtualenv "$VIRTUAL_ENV"
44*cc02d7e2SAndroid Build Coastguard WorkerPYTHON=$VIRTUAL_ENV/bin/python
45*cc02d7e2SAndroid Build Coastguard Worker"$PYTHON" -m pip install --upgrade six pip wheel setuptools
46*cc02d7e2SAndroid Build Coastguard Worker
47*cc02d7e2SAndroid Build Coastguard Workerfunction validate_wheel_hashes() {
48*cc02d7e2SAndroid Build Coastguard Worker  for file in "$@"; do
49*cc02d7e2SAndroid Build Coastguard Worker    "$PYTHON" -m wheel unpack "$file" -d /tmp || return 1
50*cc02d7e2SAndroid Build Coastguard Worker  done
51*cc02d7e2SAndroid Build Coastguard Worker  return 0
52*cc02d7e2SAndroid Build Coastguard Worker}
53*cc02d7e2SAndroid Build Coastguard Worker
54*cc02d7e2SAndroid Build Coastguard Workerfunction at_least_one_installs() {
55*cc02d7e2SAndroid Build Coastguard Worker  for file in "$@"; do
56*cc02d7e2SAndroid Build Coastguard Worker    if "$PYTHON" -m pip install "$file"; then
57*cc02d7e2SAndroid Build Coastguard Worker      return 0
58*cc02d7e2SAndroid Build Coastguard Worker    fi
59*cc02d7e2SAndroid Build Coastguard Worker  done
60*cc02d7e2SAndroid Build Coastguard Worker  return 1
61*cc02d7e2SAndroid Build Coastguard Worker}
62*cc02d7e2SAndroid Build Coastguard Worker
63*cc02d7e2SAndroid Build Coastguard Worker
64*cc02d7e2SAndroid Build Coastguard Worker#
65*cc02d7e2SAndroid Build Coastguard Worker# Validate the files in wheel matches their hashes and size in RECORD
66*cc02d7e2SAndroid Build Coastguard Worker#
67*cc02d7e2SAndroid Build Coastguard Worker
68*cc02d7e2SAndroid Build Coastguard Workerif [[ "$1" == "binary" ]]; then
69*cc02d7e2SAndroid Build Coastguard Worker  validate_wheel_hashes "${ARCHIVES[@]}"
70*cc02d7e2SAndroid Build Coastguard Worker  validate_wheel_hashes "${TOOLS_ARCHIVES[@]}"
71*cc02d7e2SAndroid Build Coastguard Worker  validate_wheel_hashes "${OBSERVABILITY_ARCHIVES[@]}"
72*cc02d7e2SAndroid Build Coastguard Workerfi
73*cc02d7e2SAndroid Build Coastguard Worker
74*cc02d7e2SAndroid Build Coastguard Worker
75*cc02d7e2SAndroid Build Coastguard Worker#
76*cc02d7e2SAndroid Build Coastguard Worker# Install our distributions in order of dependencies
77*cc02d7e2SAndroid Build Coastguard Worker#
78*cc02d7e2SAndroid Build Coastguard Worker
79*cc02d7e2SAndroid Build Coastguard Workerat_least_one_installs "${ARCHIVES[@]}"
80*cc02d7e2SAndroid Build Coastguard Workerat_least_one_installs "${TOOLS_ARCHIVES[@]}"
81*cc02d7e2SAndroid Build Coastguard Workerat_least_one_installs "${HEALTH_ARCHIVES[@]}"
82*cc02d7e2SAndroid Build Coastguard Workerat_least_one_installs "${REFLECTION_ARCHIVES[@]}"
83*cc02d7e2SAndroid Build Coastguard Workerat_least_one_installs "${TESTING_ARCHIVES[@]}"
84*cc02d7e2SAndroid Build Coastguard Workerat_least_one_installs "${OBSERVABILITY_ARCHIVES[@]}"
85*cc02d7e2SAndroid Build Coastguard Worker
86*cc02d7e2SAndroid Build Coastguard Worker
87*cc02d7e2SAndroid Build Coastguard Worker#
88*cc02d7e2SAndroid Build Coastguard Worker# Test our distributions
89*cc02d7e2SAndroid Build Coastguard Worker#
90*cc02d7e2SAndroid Build Coastguard Worker
91*cc02d7e2SAndroid Build Coastguard Worker# TODO(jtattermusch): add a .proto file to the distribtest, generate python
92*cc02d7e2SAndroid Build Coastguard Worker# code from it and then use the generated code from distribtest.py
93*cc02d7e2SAndroid Build Coastguard Worker"$PYTHON" -m grpc_tools.protoc --help
94*cc02d7e2SAndroid Build Coastguard Worker
95*cc02d7e2SAndroid Build Coastguard Worker"$PYTHON" distribtest.py
96