xref: /aosp_15_r20/external/conscrypt/scripts/testLocalUber.sh (revision cd0cc2e34ba52cdf454361820a14d744e4bd531d)
1*cd0cc2e3SAndroid Build Coastguard Worker#! /bin/bash
2*cd0cc2e3SAndroid Build Coastguard Worker#
3*cd0cc2e3SAndroid Build Coastguard Worker#  Copyright (C) 2024 The Android Open Source Project
4*cd0cc2e3SAndroid Build Coastguard Worker#
5*cd0cc2e3SAndroid Build Coastguard Worker#  Licensed under the Apache License, Version 2.0 (the "License");
6*cd0cc2e3SAndroid Build Coastguard Worker#  you may not use this file except in compliance with the License.
7*cd0cc2e3SAndroid Build Coastguard Worker#  You may obtain a copy of the License at
8*cd0cc2e3SAndroid Build Coastguard Worker#
9*cd0cc2e3SAndroid Build Coastguard Worker#       http://www.apache.org/licenses/LICENSE-2.0
10*cd0cc2e3SAndroid Build Coastguard Worker#
11*cd0cc2e3SAndroid Build Coastguard Worker#  Unless required by applicable law or agreed to in writing, software
12*cd0cc2e3SAndroid Build Coastguard Worker#  distributed under the License is distributed on an "AS IS" BASIS,
13*cd0cc2e3SAndroid Build Coastguard Worker#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cd0cc2e3SAndroid Build Coastguard Worker#  See the License for the specific language governing permissions and
15*cd0cc2e3SAndroid Build Coastguard Worker#
16*cd0cc2e3SAndroid Build Coastguard Worker
17*cd0cc2e3SAndroid Build Coastguard Worker# Allows testing of a locally publish uber jar with against an
18*cd0cc2e3SAndroid Build Coastguard Worker# arbitrary Java version using the JUnit console test runner (which
19*cd0cc2e3SAndroid Build Coastguard Worker# will be downloaded if not present).
20*cd0cc2e3SAndroid Build Coastguard Worker#
21*cd0cc2e3SAndroid Build Coastguard Worker# First build and locally publish an uber jar, e.g. using
22*cd0cc2e3SAndroid Build Coastguard Worker# publishLocalUber.sh
23*cd0cc2e3SAndroid Build Coastguard Worker#
24*cd0cc2e3SAndroid Build Coastguard Worker# Second set up the version of Java to be used for testing, e.g. by
25*cd0cc2e3SAndroid Build Coastguard Worker# setting JAVA_HOME
26*cd0cc2e3SAndroid Build Coastguard Worker#
27*cd0cc2e3SAndroid Build Coastguard Worker# Then run this script which will download the JUnit runner if needed,
28*cd0cc2e3SAndroid Build Coastguard Worker# build the Conscrypt testJar and then run the tests.
29*cd0cc2e3SAndroid Build Coastguard Worker#
30*cd0cc2e3SAndroid Build Coastguard Worker# Essentially these are the same steps as the final test matrix in the
31*cd0cc2e3SAndroid Build Coastguard Worker# Github CI script.
32*cd0cc2e3SAndroid Build Coastguard Worker
33*cd0cc2e3SAndroid Build Coastguard WorkerCONSCRYPT_HOME="${CONSCRYPT_HOME:-$HOME/src/conscrypt}"
34*cd0cc2e3SAndroid Build Coastguard WorkerBUILD="$CONSCRYPT_HOME/build.gradle"
35*cd0cc2e3SAndroid Build Coastguard WorkerM2_REPO="${M2_REPO:-$HOME/.m2/repository}"
36*cd0cc2e3SAndroid Build Coastguard WorkerPUBLISH_DIR="${M2_REPO}/org/conscrypt"
37*cd0cc2e3SAndroid Build Coastguard WorkerTMPDIR="${TMPDIR:-$HOME/tmp/conscrypt}"
38*cd0cc2e3SAndroid Build Coastguard WorkerJUNITJAR="$TMPDIR/junit-platform-console-standalone.jar"
39*cd0cc2e3SAndroid Build Coastguard Worker
40*cd0cc2e3SAndroid Build Coastguard Workerdie() {
41*cd0cc2e3SAndroid Build Coastguard Worker	echo "*** " $@
42*cd0cc2e3SAndroid Build Coastguard Worker	exit 1
43*cd0cc2e3SAndroid Build Coastguard Worker}
44*cd0cc2e3SAndroid Build Coastguard Worker
45*cd0cc2e3SAndroid Build Coastguard Workerusage() {
46*cd0cc2e3SAndroid Build Coastguard Worker	echo "testLocalUber.sh [args]"
47*cd0cc2e3SAndroid Build Coastguard Worker	echo ""
48*cd0cc2e3SAndroid Build Coastguard Worker	echo "-h, --help     Help"
49*cd0cc2e3SAndroid Build Coastguard Worker	echo "-v, --verbose  Verbose test output"
50*cd0cc2e3SAndroid Build Coastguard Worker	echo "-d, --debug    Wait for debugger on test startup"
51*cd0cc2e3SAndroid Build Coastguard Worker	exit 0
52*cd0cc2e3SAndroid Build Coastguard Worker}
53*cd0cc2e3SAndroid Build Coastguard Worker
54*cd0cc2e3SAndroid Build Coastguard Workerwhile [ "$1" ]; do
55*cd0cc2e3SAndroid Build Coastguard Worker	case "$1" in
56*cd0cc2e3SAndroid Build Coastguard Worker		-v|--verbose)
57*cd0cc2e3SAndroid Build Coastguard Worker			VERBOSE="--details=verbose"
58*cd0cc2e3SAndroid Build Coastguard Worker			;;
59*cd0cc2e3SAndroid Build Coastguard Worker		-d|--debug)
60*cd0cc2e3SAndroid Build Coastguard Worker			JAVADEBUG="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
61*cd0cc2e3SAndroid Build Coastguard Worker			;;
62*cd0cc2e3SAndroid Build Coastguard Worker		-h|--help)
63*cd0cc2e3SAndroid Build Coastguard Worker			usage
64*cd0cc2e3SAndroid Build Coastguard Worker			;;
65*cd0cc2e3SAndroid Build Coastguard Worker		*)
66*cd0cc2e3SAndroid Build Coastguard Worker			die "Unknown argument $1 - try --help"
67*cd0cc2e3SAndroid Build Coastguard Worker			;;
68*cd0cc2e3SAndroid Build Coastguard Worker	esac
69*cd0cc2e3SAndroid Build Coastguard Worker	shift
70*cd0cc2e3SAndroid Build Coastguard Workerdone
71*cd0cc2e3SAndroid Build Coastguard Worker
72*cd0cc2e3SAndroid Build Coastguard Workermkdir -p "$TMPDIR" || die "Unable to create ${TMPDIR}."
73*cd0cc2e3SAndroid Build Coastguard Worker
74*cd0cc2e3SAndroid Build Coastguard Workertest -f "$BUILD" || die "Conscrypt build.gradle file not found.  Check CONSCRYPT_HOME."
75*cd0cc2e3SAndroid Build Coastguard WorkerVERSION=$(sed -nE 's/^ *version *= *"(.*)"/\1/p' $BUILD)
76*cd0cc2e3SAndroid Build Coastguard Workertest "$VERSION" || die "Unable to figure out Conscrypt version."
77*cd0cc2e3SAndroid Build Coastguard Workerecho "Conscrypt version ${VERSION}."
78*cd0cc2e3SAndroid Build Coastguard Worker
79*cd0cc2e3SAndroid Build Coastguard Workerecho "Java version:"
80*cd0cc2e3SAndroid Build Coastguard Workerjava -version || die "Cannot run Java."
81*cd0cc2e3SAndroid Build Coastguard Worker
82*cd0cc2e3SAndroid Build Coastguard WorkerUBERJAR="${PUBLISH_DIR}/conscrypt-openjdk-uber/$VERSION/conscrypt-openjdk-uber-${VERSION}.jar"
83*cd0cc2e3SAndroid Build Coastguard WorkerTESTJAR="${CONSCRYPT_HOME}/openjdk/build/libs/conscrypt-openjdk-${VERSION}-tests.jar"
84*cd0cc2e3SAndroid Build Coastguard Workertest -f "$UBERJAR" || die "Uber jar not found: ${UBERJAR}."
85*cd0cc2e3SAndroid Build Coastguard Worker
86*cd0cc2e3SAndroid Build Coastguard Worker
87*cd0cc2e3SAndroid Build Coastguard Workerif [ -f "$JUNITJAR" ]; then
88*cd0cc2e3SAndroid Build Coastguard Worker	echo "JUnit console runner: ${JUNITJAR}."
89*cd0cc2e3SAndroid Build Coastguard Workerelse
90*cd0cc2e3SAndroid Build Coastguard Worker	echo "Downloading JUnit console runner."
91*cd0cc2e3SAndroid Build Coastguard Worker	mvn org.apache.maven.plugins:maven-dependency-plugin:3.8.0:copy \
92*cd0cc2e3SAndroid Build Coastguard Worker		-Dartifact=org.junit.platform:junit-platform-console-standalone:1.11.2 \
93*cd0cc2e3SAndroid Build Coastguard Worker		-DoutputDirectory="$TMPDIR" \
94*cd0cc2e3SAndroid Build Coastguard Worker		-Dmdep.stripVersion=true \
95*cd0cc2e3SAndroid Build Coastguard Worker		|| die "Maven download of junit failed."
96*cd0cc2e3SAndroid Build Coastguard Workerfi
97*cd0cc2e3SAndroid Build Coastguard Workertest -f "$JUNITJAR" || die "JUnit not found."
98*cd0cc2e3SAndroid Build Coastguard Worker
99*cd0cc2e3SAndroid Build Coastguard Workerecho "Building test jar."
100*cd0cc2e3SAndroid Build Coastguard Workercd $CONSCRYPT_HOME
101*cd0cc2e3SAndroid Build Coastguard Worker./gradlew :conscrypt-openjdk:testJar --console=plain
102*cd0cc2e3SAndroid Build Coastguard Workertest -f "$TESTJAR" || die "Test jar not built."
103*cd0cc2e3SAndroid Build Coastguard Worker
104*cd0cc2e3SAndroid Build Coastguard Workerecho "Running tests."
105*cd0cc2e3SAndroid Build Coastguard Workerjava $JAVADEBUG -jar "$JUNITJAR" execute -cp "${UBERJAR}:${TESTJAR}" \
106*cd0cc2e3SAndroid Build Coastguard Worker	 -n='org.conscrypt.ConscryptOpenJdkSuite' \
107*cd0cc2e3SAndroid Build Coastguard Worker	 --scan-classpath --reports-dir=. \
108*cd0cc2e3SAndroid Build Coastguard Worker	 --fail-if-no-tests $VERBOSE
109