Files

54 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# PEM encodings in Java: JEP 538 (third preview, JDK 27) -> JEP 542 (final, JDK 28).
# Regenerates every file in output/. JDK27=/path/to/jdk27 JDK28=/path/to/jdk28-ea ./run.sh
set -uo pipefail
unset JAVA_TOOL_OPTIONS
HERE="$(cd "$(dirname "$0")" && pwd)"
JDK27="${JDK27:?set JDK27}"; JDK28="${JDK28:-}"
OUT="$HERE/output"; mkdir -p "$OUT"; B="$(mktemp -d)"; trap 'rm -rf "$B"' EXIT
cd "$HERE"
jv() { "$1/bin/java" -version 2>&1 | sed -n 2p | sed 's/.*(build \(.*\))/\1/'; }
# comparison libraries (BouncyCastle bcpkix, spring-security-core) -> target/lib
[ -d target/lib ] || mvn -q -B dependency:copy-dependencies -DoutputDirectory=target/lib -DincludeScope=compile >/dev/null
CP_LIBS="$(ls target/lib/*.jar | tr '\n' ':')"
P27="--enable-preview --release 27"
mkdir -p "$B/c27"; "$JDK27/bin/javac" $P27 -cp "$CP_LIBS" -d "$B/c27" src/*.java 2>&1 | grep -v '^Note:'
run27() { echo "\$ java --enable-preview -cp ... $1 ($(jv "$JDK27"))"; "$JDK27/bin/java" --enable-preview -Dfixtures=fixtures -cp "$B/c27:$CP_LIBS" "$1" 2>&1; echo "exit=$?"; }
{ run27 RoundTrip; } > "$OUT/01-round-trip.txt"
{ run27 JwtSigning; } > "$OUT/02-jwt-signing.txt"
{ run27 TlsFromPem; } > "$OUT/03-tls.txt"
{ run27 EncryptedKeys; } > "$OUT/04-encrypted.txt"
{ run27 Failures; } > "$OUT/05-failures.txt"
{ run27 Migration; } > "$OUT/06-migration.txt"
# 07 - the preview flag: what you see without it
{
echo "\$ javac RoundTrip.java Fx.java (no flags) ($(jv "$JDK27"))"
mkdir -p "$B/n"; "$JDK27/bin/javac" -d "$B/n" src/Fx.java src/RoundTrip.java 2>&1; echo "exit=${PIPESTATUS[0]}"
echo
echo "\$ java RoundTrip (compiled with --enable-preview, run without it) ($(jv "$JDK27"))"
"$JDK27/bin/java" -cp "$B/c27" RoundTrip 2>&1 | head -3
echo
echo "\$ javac --enable-preview --release 27 RoundTrip.java Fx.java"
mkdir -p "$B/p"; "$JDK27/bin/javac" --enable-preview --release 27 -Xlint:preview -d "$B/p" src/Fx.java src/RoundTrip.java 2>&1 | head -12; echo "exit=${PIPESTATUS[0]}"
} > "$OUT/07-preview-flag.txt"
# 08 - the same demos on the JDK 28 early-access build, with NO preview flag (JEP 542 finalizes the API)
if [ -n "$JDK28" ]; then
mkdir -p "$B/c28"
{
echo "\$ javac src/{Fx,RoundTrip,JwtSigning,TlsFromPem,EncryptedKeys,Failures}.java (no flags) ($(jv "$JDK28"))"
"$JDK28/bin/javac" -d "$B/c28" src/Fx.java src/RoundTrip.java src/JwtSigning.java src/TlsFromPem.java src/EncryptedKeys.java src/Failures.java 2>&1; echo "exit=${PIPESTATUS[0]}"
for c in RoundTrip JwtSigning TlsFromPem EncryptedKeys Failures; do
echo; echo "\$ java $c (no flags)"
"$JDK28/bin/java" -Dfixtures=fixtures -cp "$B/c28" $c > "$B/28-$c.txt" 2>&1; echo "exit=$?"
"$JDK27/bin/java" --enable-preview -Dfixtures=fixtures -cp "$B/c27" $c > "$B/27-$c.txt" 2>&1
if diff -q "$B/27-$c.txt" "$B/28-$c.txt" >/dev/null; then echo "output identical to the JDK 27 run"; else echo "output DIFFERS from the JDK 27 run:"; diff "$B/27-$c.txt" "$B/28-$c.txt" | head -20; fi
done
} > "$OUT/08-jdk28-final.txt"
fi
echo done