-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Expand file tree
/
Copy pathtest-javaexec-source-path.sh
More file actions
executable file
·64 lines (52 loc) · 2.12 KB
/
Copy pathtest-javaexec-source-path.sh
File metadata and controls
executable file
·64 lines (52 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash
# Manual smoke test for the bin/finalize source/git buildpack path.
# Simulates what bin/finalize does: build javaexec into a temp dir and pass
# the path via JAVAEXEC_BINARY_PATH. Verifies the binary builds, that
# InstallJavaexecLauncher picks up the override, and that javaexec tokenizes
# JAVA_OPTS correctly when actually invoked.
set -euo pipefail
BUILDPACK_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
cd "$BUILDPACK_DIR"
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
echo "==> [1/4] Build javaexec from source (as bin/finalize now does)"
go build -mod=vendor -o "$tmpdir/javaexec" ./src/java/javaexec/cli
echo " OK: $tmpdir/javaexec ($(wc -c < "$tmpdir/javaexec") bytes)"
echo ""
echo "==> [2/4] Build finalize from source"
go build -mod=vendor -o "$tmpdir/finalize" ./src/java/finalize/cli
echo " OK: $tmpdir/finalize"
echo ""
echo "==> [3/4] Unit tests: InstallJavaexecLauncher with JAVAEXEC_BINARY_PATH override"
go test ./src/java/finalize/ -count=1 -v -run "javaexec launcher" 2>&1 | grep -E "PASS|FAIL|RUN|---"
echo ""
echo "==> [4/4] Tokenization smoke test: run javaexec with a fake java binary"
# Fake java: prints each received argument on its own line.
cat > "$tmpdir/fake-java" << 'EOF'
#!/bin/bash
printf '%s\n' "$@"
EOF
chmod +x "$tmpdir/fake-java"
# Quoted value with spaces → one token; cron expr with * → literal; $(...) → not executed.
JAVA_OPTS='-Dfoo="bar baz" -DcronSched="0 */7 * * * *" -Dwhere=$(hostname)' \
"$tmpdir/javaexec" "$tmpdir/fake-java" -jar app.jar 2>/dev/null > "$tmpdir/actual.txt"
expected="-Dfoo=bar baz
-DcronSched=0 */7 * * * *
-Dwhere=\$(hostname)
-jar
app.jar"
actual=$(cat "$tmpdir/actual.txt")
if [ "$actual" = "$expected" ]; then
echo " OK: all tokens correct"
else
echo " FAIL: unexpected output"
echo " expected:"
printf '%s\n' "$expected" | sed 's/^/ /'
echo " got:"
printf '%s\n' "$actual" | sed 's/^/ /'
exit 1
fi
echo ""
echo "PASS: source/git buildpack path works."
echo " bin/finalize builds javaexec and passes it via JAVAEXEC_BINARY_PATH."
echo " javaexec tokenizes JAVA_OPTS correctly without shell execution."