|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +# Run the Restate SDK conformance test suite locally. |
| 5 | +# |
| 6 | +# Prerequisites: |
| 7 | +# - Java 21+ |
| 8 | +# - podman or docker |
| 9 | +# - Gradle wrapper (./gradlew) available |
| 10 | +# |
| 11 | +# Usage: |
| 12 | +# ./.tools/run-sdk-tests.sh # build image + run all default suite tests |
| 13 | +# ./.tools/run-sdk-tests.sh --skip-build # skip image build, reuse existing |
| 14 | +# ./.tools/run-sdk-tests.sh --test-suite=default --test-name=Combinators |
| 15 | +# |
| 16 | +# Any unknown flags are passed through to the test runner. |
| 17 | + |
| 18 | +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" |
| 19 | + |
| 20 | +# ---- Version: single source of truth is the workflow file ---- |
| 21 | +SDK_TEST_SUITE_VERSION="$(grep -m1 'uses: restatedev/e2e/sdk-tests@' \ |
| 22 | + "${REPO_ROOT}/.github/workflows/integration.yaml" | sed 's/.*@//' | tr -d ' ')" |
| 23 | + |
| 24 | +JAR_PATH="${REPO_ROOT}/tmp/sdk-tests-${SDK_TEST_SUITE_VERSION}.jar" |
| 25 | +JAR_URL="https://github.com/restatedev/e2e/releases/download/${SDK_TEST_SUITE_VERSION}/sdk-tests.jar" |
| 26 | +RESTATE_IMAGE="${RESTATE_CONTAINER_IMAGE:-ghcr.io/restatedev/restate:main}" |
| 27 | +REPORT_DIR="${REPO_ROOT}/tmp/test-report" |
| 28 | +SERVICE_IMAGE="localhost/e2e-java-test-services:local" |
| 29 | + |
| 30 | +# ---- Detect container runtime ---- |
| 31 | +if command -v podman &>/dev/null; then |
| 32 | + DOCKER=podman |
| 33 | +elif command -v docker &>/dev/null; then |
| 34 | + DOCKER=docker |
| 35 | +else |
| 36 | + echo "Error: neither podman nor docker found" >&2 |
| 37 | + exit 1 |
| 38 | +fi |
| 39 | + |
| 40 | +# ---- Parse args ---- |
| 41 | +SKIP_BUILD=false |
| 42 | +PASSTHROUGH=() |
| 43 | + |
| 44 | +for arg in "$@"; do |
| 45 | + case "$arg" in |
| 46 | + --skip-build) SKIP_BUILD=true ;; |
| 47 | + *) PASSTHROUGH+=("$arg") ;; |
| 48 | + esac |
| 49 | +done |
| 50 | + |
| 51 | +# ---- 1. Build the service image via Jib ---- |
| 52 | +if [ "$SKIP_BUILD" = false ]; then |
| 53 | + echo "==> Building ${SERVICE_IMAGE} via Jib..." |
| 54 | + cd "${REPO_ROOT}" |
| 55 | + ./gradlew -Djib.console=plain "-Djib.to.image=${SERVICE_IMAGE}" :test-services:jibBuildTar |
| 56 | + "${DOCKER}" load < test-services/build/jib-image.tar |
| 57 | +fi |
| 58 | + |
| 59 | +# ---- 2. Download the test suite JAR (cached by version) ---- |
| 60 | +mkdir -p "$(dirname "$JAR_PATH")" |
| 61 | +if [ ! -f "$JAR_PATH" ]; then |
| 62 | + echo "==> Downloading sdk-test-suite ${SDK_TEST_SUITE_VERSION}..." |
| 63 | + curl -fSL -o "$JAR_PATH" "$JAR_URL" |
| 64 | +else |
| 65 | + echo "==> Using cached sdk-test-suite ${SDK_TEST_SUITE_VERSION}" |
| 66 | +fi |
| 67 | + |
| 68 | +# ---- 3. Pull the Restate runtime image ---- |
| 69 | +echo "==> Pulling Restate image: ${RESTATE_IMAGE}..." |
| 70 | +"${DOCKER}" pull "${RESTATE_IMAGE}" |
| 71 | + |
| 72 | +# ---- 4. Run the tests ---- |
| 73 | +echo "==> Running integration tests (suite ${SDK_TEST_SUITE_VERSION})..." |
| 74 | +rm -rf "${REPORT_DIR}" |
| 75 | +mkdir -p "${REPORT_DIR}" |
| 76 | + |
| 77 | +RESTATE_CONTAINER_IMAGE="${RESTATE_IMAGE}" java -jar "${JAR_PATH}" run \ |
| 78 | + --sequential \ |
| 79 | + --image-pull-policy=CACHED \ |
| 80 | + --report-dir="${REPORT_DIR}" \ |
| 81 | + --service-container-image="${SERVICE_IMAGE}" \ |
| 82 | + "${PASSTHROUGH[@]+"${PASSTHROUGH[@]}"}" |
| 83 | + |
| 84 | +echo "" |
| 85 | +echo "==> Done. Report: ${REPORT_DIR}" |
0 commit comments