test-kepr-build-helpers.sh

3.8 KB · raw

1#!/bin/sh2# Hermetic negative-path tests for the sourceable Kepr release-gate helpers.3# No Android SDK, Gradle project, signing key, network, or APK is required.4set -eu56SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)7# shellcheck source=scripts/kepr-build-helpers.sh8. "$SCRIPT_DIR/kepr-build-helpers.sh"910TEMP_ROOT=$(mktemp -d "${TMPDIR:-/tmp}/peach-kepr-helper-tests.XXXXXX")11trap 'trash "$TEMP_ROOT"' EXIT HUP INT TERM1213fail() {14    printf 'FAIL: %s\n' "$1" >&215    exit 116}1718expect_failure() {19    if "$@"; then20        fail "expected failure: $*"21    fi22}2324touch_tools() {25    mkdir -p "$TEMP_ROOT/sdk/build-tools/$1"26    : > "$TEMP_ROOT/sdk/build-tools/$1/apksigner"27    : > "$TEMP_ROOT/sdk/build-tools/$1/aapt2"28    chmod +x "$TEMP_ROOT/sdk/build-tools/$1/apksigner" "$TEMP_ROOT/sdk/build-tools/$1/aapt2"29}3031touch_tools 34.0.032touch_tools 35.0.033touch_tools 35.1.0-preview34touch_tools 36.0.0-rc135touch_tools latest36touch_tools arbitrary3738selected=$(find_stable_build_tools_dir "$TEMP_ROOT/sdk")39[ "$selected" = "$TEMP_ROOT/sdk/build-tools/35.0.0" ] ||40    fail "stable build-tools selection chose '$selected'"41for rejected in latest 35.1.0-preview 36.0.0-rc1 arbitrary 35 35.0; do42    expect_failure is_stable_build_tools_basename "$rejected"43done4445printf '2.8.4\n' > "$TEMP_ROOT/VERSION"46[ "$(read_root_semver "$TEMP_ROOT/VERSION")" = "2.8.4" ] || fail "valid VERSION was rejected"47printf '2.8.4\n2.8.5\n' > "$TEMP_ROOT/VERSION.ambiguous"48expect_failure read_root_semver "$TEMP_ROOT/VERSION.ambiguous"49printf '2.8\n' > "$TEMP_ROOT/VERSION.malformed"50expect_failure read_root_semver "$TEMP_ROOT/VERSION.malformed"5152cat > "$TEMP_ROOT/metadata.json" <<'JSON'53{54  "applicationId": "com.peachpasswords",55  "elements": [56    {"versionCode": 240146, "versionName": "2.8.4", "outputFile": "app-arm64-v8a-release.apk"},57    {"versionCode": 240146, "versionName": "2.8.4", "outputFile": "app-x86_64-release.apk"}58  ]59}60JSON61printf "package: name='com.peachpasswords' versionCode='240146' versionName='2.8.4'\nnative-code: 'arm64-v8a'\n" > "$TEMP_ROOT/badging"62validate_release_metadata "$TEMP_ROOT/metadata.json" "$TEMP_ROOT/badging" 2.8.4 com.peachpasswords app-arm64-v8a-release.apk arm64-v8a6364printf '{"applicationId":"com.peachpasswords",' > "$TEMP_ROOT/metadata.malformed"65expect_failure validate_release_metadata "$TEMP_ROOT/metadata.malformed" "$TEMP_ROOT/badging" 2.8.4 com.peachpasswords app-arm64-v8a-release.apk arm64-v8a66cat > "$TEMP_ROOT/metadata.duplicate.json" <<'JSON'67{"applicationId":"com.peachpasswords","applicationId":"com.peachpasswords","elements":[{"versionCode":240146,"versionName":"2.8.4"}]}68JSON69expect_failure validate_release_metadata "$TEMP_ROOT/metadata.duplicate.json" "$TEMP_ROOT/badging" 2.8.4 com.peachpasswords app-arm64-v8a-release.apk arm64-v8a70cat > "$TEMP_ROOT/metadata.ambiguous.json" <<'JSON'71{"applicationId":"com.peachpasswords","elements":[{"versionCode":240146,"versionName":"2.8.4"},{"versionCode":240147,"versionName":"2.8.4"}]}72JSON73expect_failure validate_release_metadata "$TEMP_ROOT/metadata.ambiguous.json" "$TEMP_ROOT/badging" 2.8.4 com.peachpasswords app-release.apk arm64-v8a74expect_failure validate_release_metadata "$TEMP_ROOT/metadata.json" "$TEMP_ROOT/badging" 2.8.5 com.peachpasswords app-arm64-v8a-release.apk arm64-v8a75printf "package: name='com.peachpasswords' versionCode='240146' versionName='2.8.5'\n" > "$TEMP_ROOT/badging.mismatch"76printf "native-code: 'arm64-v8a'\n" >> "$TEMP_ROOT/badging.mismatch"77expect_failure validate_release_metadata "$TEMP_ROOT/metadata.json" "$TEMP_ROOT/badging.mismatch" 2.8.4 com.peachpasswords app-arm64-v8a-release.apk arm64-v8a78expect_failure validate_release_metadata "$TEMP_ROOT/metadata.json" "$TEMP_ROOT/badging" 2.8.4 com.peachpasswords app-arm64-v8a-release.apk x86_647980printf 'PASS: stable tool selection, malformed/ambiguous metadata, and semantic-version mismatch gates\n'