Files
OpenShell/tasks/scripts/test-snap-gateway-wrapper.sh
Jesse JaggarsandDrew Newberry 02b664bb0d refactor(config): normalize and enforce gateway schema v2 (#2814)
* refactor(config): normalize compute driver field names

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* refactor(config): introduce canonical gateway fields

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* refactor(config): enforce gateway schema version 2

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): preserve compute driver runtime guarantees

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): address schema v2 review regressions

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): complete schema v2 migration safeguards

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(config): expand schema v2 regression coverage

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(config): add schema v2 parity manifest

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): correct parity manifest inventory

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* docs(config): record schema v2 intentional changes

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* docs(config): disposition schema v2 parity gaps

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): add dual schema parity harness

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): establish compute lifecycle parity baseline

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): preserve gateway option compatibility

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): record gateway option parity

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* docs(config): close gateway-wide parity gaps

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(podman): apply configured pids limit

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): validate Podman option parity

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): add Kubernetes option parity harness

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): record Kubernetes option parity

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): disposition VM parity lanes

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): add external driver parity lane

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(e2e): preserve external driver pull policy

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): attest parity artifacts and launches

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): require clean parity build sources

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): bind parity runtime artifacts

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(e2e): use isolated supervisor tags

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(e2e): qualify parity image tags

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(e2e): serve parity supervisor locally

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): isolate parity podman services

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): harden parity evidence provenance

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): pin parity sandbox artifacts

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): attest parity runtime inputs

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): bind parity runtime evidence

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): record compute boundary parity

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(e2e): disposition cross-cutting parity lanes

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(packaging): preflight gateway config upgrades

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): preserve rebase integration guarantees

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(ci): isolate temporary git signing config

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): update remaining schema v2 consumers

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(ci): provide e2fs tools to VM tests

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): align preflight with gateway startup

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(vm): preserve rootfs tar configuration

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* chore(config): adopt duration unit constructors

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(packaging): preflight RPM gateway config

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(config): address driver review findings

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(e2e): require fresh semantic parity evidence

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* fix(docker): update tests for renamed sandbox label

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>

* test(gateway): preserve selective driver coverage after rebase

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

---------

Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Co-authored-by: Drew Newberry <anewberry@nvidia.com>
2026-09-11 05:00:24 +00:00

219 lines
6.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
set -euo pipefail
wrapper_input=${1:?Usage: test-snap-gateway-wrapper.sh <wrapper>}
wrapper_dir=$(cd "$(dirname "$wrapper_input")" && pwd)
wrapper="${wrapper_dir}/$(basename "$wrapper_input")"
work=$(mktemp -d "${TMPDIR:-/tmp}/openshell snap wrapper.XXXXXX")
trap 'rm -rf "$work"' EXIT
snap="$work/snap"
common="$work/common"
log="$work/calls"
expected="$work/expected"
mkdir -p "$snap/bin" "$common"
cat >"$snap/bin/openshell-gateway" <<'EOF'
#!/bin/sh
printf '%s\n' "$*" >>"$FAKE_GATEWAY_LOG"
printf 'env:%s|%s|%s\n' \
"${OPENSHELL_GATEWAY_CONFIG:-}" \
"${OPENSHELL_DB_URL:-}" \
"${OPENSHELL_DISABLE_TLS:-}" >>"$FAKE_GATEWAY_LOG"
if [ "${1:-}" = config ] && [ "${2:-}" = preflight ]; then
if [ "${FAKE_PREFLIGHT_FAIL:-}" = 1 ]; then
exit 42
fi
if [ "${FAKE_REJECT_UNPAIRED_RATE:-}" = 1 ]; then
case " $* " in
*" --grpc-rate-limit-requests "*)
case " $* " in
*" --grpc-rate-limit-window-seconds "*) ;;
*) exit 43 ;;
esac
;;
esac
fi
fi
EOF
chmod +x "$snap/bin/openshell-gateway"
run_wrapper() {
local config=$1
local fail=${2:-}
if [ "$config" = unset ]; then
env -u OPENSHELL_GATEWAY_CONFIG \
SNAP="$snap" \
SNAP_COMMON="$common" \
FAKE_GATEWAY_LOG="$log" \
FAKE_PREFLIGHT_FAIL="$fail" \
"$wrapper" --trace
else
env \
SNAP="$snap" \
SNAP_COMMON="$common" \
OPENSHELL_GATEWAY_CONFIG="$config" \
FAKE_GATEWAY_LOG="$log" \
FAKE_PREFLIGHT_FAIL="$fail" \
"$wrapper" --trace
fi
}
assert_log() {
printf '%s\n' "$1" >"$expected"
if ! cmp -s "$expected" "$log"; then
echo "FAIL: unexpected call sequence" >&2
diff -u "$expected" "$log" >&2
exit 1
fi
}
override="$work/override.toml"
printf 'operator override\n' >"$override"
cp "$override" "$work/override-before"
: >"$log"
run_wrapper "$override"
assert_log "config preflight -- --trace
env:$override|sqlite:$common/gateway.db?mode=rwc|true
--trace
env:$override|sqlite:$common/gateway.db?mode=rwc|true"
cmp -s "$work/override-before" "$override"
cli_config="$work/cli.toml"
printf 'CLI override\n' >"$cli_config"
cp "$cli_config" "$work/cli-before"
: >"$log"
env \
SNAP="$snap" \
SNAP_COMMON="$common" \
OPENSHELL_GATEWAY_CONFIG="$override" \
FAKE_GATEWAY_LOG="$log" \
"$wrapper" --trace --config "$cli_config"
assert_log "config preflight -- --trace --config $cli_config
env:$override|sqlite:$common/gateway.db?mode=rwc|true
--trace --config $cli_config
env:$override|sqlite:$common/gateway.db?mode=rwc|true"
cmp -s "$work/cli-before" "$cli_config"
: >"$log"
if env \
SNAP="$snap" \
SNAP_COMMON="$common" \
OPENSHELL_GATEWAY_CONFIG="$override" \
FAKE_GATEWAY_LOG="$log" \
FAKE_PREFLIGHT_FAIL=1 \
"$wrapper" --config="$cli_config"; then
echo "FAIL: CLI-selected config preflight failure reached gateway start" >&2
exit 1
fi
assert_log "config preflight -- --config=$cli_config
env:$override|sqlite:$common/gateway.db?mode=rwc|true"
cmp -s "$work/cli-before" "$cli_config"
: >"$log"
if env \
SNAP="$snap" \
SNAP_COMMON="$common" \
OPENSHELL_GATEWAY_CONFIG="$override" \
FAKE_GATEWAY_LOG="$log" \
FAKE_REJECT_UNPAIRED_RATE=1 \
"$wrapper" --grpc-rate-limit-requests 10; then
echo "FAIL: invalid daemon overrides reached gateway start" >&2
exit 1
fi
assert_log "config preflight -- --grpc-rate-limit-requests 10
env:$override|sqlite:$common/gateway.db?mode=rwc|true"
for invalid_selector in terminator nested-config; do
: >"$log"
if [ "$invalid_selector" = terminator ]; then
invalid_args=(--config --)
else
invalid_args=(--config "--config=$cli_config")
fi
if env \
SNAP="$snap" \
SNAP_COMMON="$common" \
OPENSHELL_GATEWAY_CONFIG="$override" \
FAKE_GATEWAY_LOG="$log" \
"$wrapper" "${invalid_args[@]}"; then
echo "FAIL: invalid $invalid_selector selector reached gateway execution" >&2
exit 1
fi
if [ -s "$log" ]; then
echo "FAIL: invalid $invalid_selector selector reached preflight" >&2
exit 1
fi
done
: >"$log"
env \
SNAP="$snap" \
SNAP_COMMON="$common" \
OPENSHELL_GATEWAY_CONFIG="$override" \
FAKE_GATEWAY_LOG="$log" \
"$wrapper" --config=--dash-leading
assert_log "config preflight -- --config=--dash-leading
env:$override|sqlite:$common/gateway.db?mode=rwc|true
--config=--dash-leading
env:$override|sqlite:$common/gateway.db?mode=rwc|true"
canonical="$common/gateway.toml"
printf 'valid schema-v2\n' >"$canonical"
cp "$canonical" "$work/canonical-before"
: >"$log"
run_wrapper unset
assert_log "config preflight -- --config $canonical --trace
env:|sqlite:$common/gateway.db?mode=rwc|true
--config $canonical --trace
env:|sqlite:$common/gateway.db?mode=rwc|true"
cmp -s "$work/canonical-before" "$canonical"
rm "$canonical"
: >"$log"
run_wrapper unset
assert_log "config preflight -- --trace
env:|sqlite:$common/gateway.db?mode=rwc|true
--trace
env:|sqlite:$common/gateway.db?mode=rwc|true"
assert_preflight_failure() {
local name=$1
: >"$log"
if run_wrapper unset 1; then
echo "FAIL: $name reached gateway start" >&2
exit 1
fi
assert_log "config preflight -- --config $canonical --trace
env:|sqlite:$common/gateway.db?mode=rwc|true"
}
printf 'legacy version = 1\n' >"$canonical"
cp "$canonical" "$work/legacy-before"
assert_preflight_failure legacy
cmp -s "$work/legacy-before" "$canonical"
printf 'not valid TOML = [\n' >"$canonical"
cp "$canonical" "$work/malformed-before"
assert_preflight_failure malformed
cmp -s "$work/malformed-before" "$canonical"
rm "$canonical"
ln -s "$work/missing-target" "$canonical"
readlink "$canonical" >"$work/link-before"
assert_preflight_failure broken-symlink
readlink "$canonical" >"$work/link-after"
cmp -s "$work/link-before" "$work/link-after"
rm "$canonical"
mkdir "$canonical"
printf 'nonregular marker\n' >"$canonical/marker"
cp "$canonical/marker" "$work/marker-before"
assert_preflight_failure nonregular
cmp -s "$work/marker-before" "$canonical/marker"
echo "Snap gateway wrapper tests passed"