Repository navigation
Expand file tree
/
Copy pathverify_example.sh
More file actions
executable file
·86 lines (79 loc) · 2.55 KB
/
Copy pathverify_example.sh
File metadata and controls
executable file
·86 lines (79 loc) · 2.55 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash -e
EXAMPLE_NAME="${1}"
EXAMPLE_DIR="${2}"
CHECK_PORT_MANIFESTS="${TEST_SRCDIR}/${TEST_WORKSPACE}/${3}"
# $HOME may be unset (or read-only) under `bazel test`
WORKDIR="${TEST_TMPDIR:-${HOME:-/tmp}}"
TMPOUT=$(mktemp -p "${WORKDIR}")
RUNDIR=$(mktemp -d -p "${WORKDIR}")
if [[ -n "${TEST_UNDECLARED_OUTPUTS_DIR:-}" ]]; then
PORT_MANIFEST_DIR="${TEST_UNDECLARED_OUTPUTS_DIR}"
mkdir -p "$PORT_MANIFEST_DIR"
else
PORT_MANIFEST_DIR="$(mktemp -d -p "${WORKDIR}")"
CLEANUP_MANIFESTS=1
fi
export PORT_MANIFEST_DIR
export COMPOSE_INTERACTIVE_NO_CLI=1
export COMPOSE_PROGRESS=quiet
merge_manifests () {
local out manifests=()
out="${TEST_UNDECLARED_OUTPUTS_DIR:-${PORT_MANIFEST_DIR}}/${EXAMPLE_NAME}.ports.json"
shopt -s nullglob
manifests=("$PORT_MANIFEST_DIR"/*.ports.json)
shopt -u nullglob
if [[ ${#manifests[@]} -gt 0 ]]; then
jq -s --arg example "$EXAMPLE_NAME" 'add | map(.example = $example)' \
"${manifests[@]}" > "${out}.merged"
mv "${out}.merged" "$out"
else
echo '[]' > "$out"
fi
}
complete () {
local trapcode=$? exitcode
set +e
exitcode="$(tail -n 1 "${TMPOUT}" | grep -oP '(?<=COMMAND_EXIT_CODE=")[0-9]+')"
[[ "$trapcode" == 0 || "$exitcode" != 0 ]] || exitcode="$trapcode"
echo "${EXAMPLE_NAME}: ${exitcode}:${TIME}"
tail -n 1 "$TMPOUT"
echo
echo
if [[ "$exitcode" != 0 ]]; then
cat "$TMPOUT"
fi
echo
echo
rm -rf "$RUNDIR"
rm -rf "$TMPOUT"
[[ -n "${CLEANUP_MANIFESTS:-}" ]] && rm -rf "$PORT_MANIFEST_DIR"
if [[ -z "$exitcode" ]]; then
# Could not parse the example's exit code: always fail
exit "$(( trapcode != 0 ? trapcode : 1 ))"
fi
exit "$exitcode"
}
verify () {
tar xf "$EXAMPLE_DIR" -C "$RUNDIR"
export DOCKER_NO_PULL=1
export DOCKER_RMI_CLEANUP=1
# This is set to simulate an environment where users have shared home drives protected
# by a strong umask (ie only group readable by default).
umask 027
chmod -R u+w,o-rwx "$RUNDIR"
cd "$RUNDIR"
dirlist=$(ls .)
if [[ "$dirlist" == "external" ]]; then
cd "external/envoy_examples/${EXAMPLE_NAME}"
else
cd "${EXAMPLE_NAME}"
fi
script -q -c "./verify.sh" "$TMPOUT" >/dev/null </dev/null
}
trap complete EXIT
TIME=$({ time verify; } 2>&1 | grep real | cut -dl -f2)
merge_manifests
MERGED_MANIFEST="${TEST_UNDECLARED_OUTPUTS_DIR:-${PORT_MANIFEST_DIR}}/${EXAMPLE_NAME}.ports.json"
if jq -e 'length > 0' "$MERGED_MANIFEST" > /dev/null; then
"$CHECK_PORT_MANIFESTS" "$MERGED_MANIFEST"
fi