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