Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions tests/test_deploy_testnet_215.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
#!/usr/bin/env bash
# Tests for issue #215: Harden deploy-testnet.sh with preflight validation
# Verifies that deploy-testnet.sh has proper validation and safety checks

set -euo pipefail

TEST_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(dirname "${TEST_DIR}")"

# Test helpers
pass() { echo "✓ $1"; }
fail() { echo "✗ $1" >&2; exit 1; }

# Test 1: Verify deploy-testnet.sh exists
if [[ ! -f "${REPO_ROOT}/deploy-testnet.sh" ]]; then
fail "deploy-testnet.sh not found at ${REPO_ROOT}/deploy-testnet.sh"
fi
pass "deploy-testnet.sh exists"

# Test 2: Verify the script is executable
if [[ ! -x "${REPO_ROOT}/deploy-testnet.sh" ]]; then
fail "deploy-testnet.sh is not executable"
fi
pass "deploy-testnet.sh is executable"

# Test 3: Verify usage documentation exists
if ! grep -q "Usage:" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh missing Usage section"
fi
pass "deploy-testnet.sh has usage documentation"

# Test 4: Verify deploy-testnet.env.example exists
if [[ ! -f "${REPO_ROOT}/deploy-testnet.env.example" ]]; then
fail "deploy-testnet.env.example not found"
fi
pass "deploy-testnet.env.example exists"

# Test 5: Verify require_var helper exists
if ! grep -q "require_var()" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh missing require_var() helper"
fi
pass "deploy-testnet.sh has require_var() helper"

# Test 6: Verify info/die helpers exist
if ! grep -q "info()" "${REPO_ROOT}/deploy-testnet.sh" || ! grep -q "die()" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh missing info() or die() helpers"
fi
pass "deploy-testnet.sh has info/die helpers"

# Test 7: Verify BOND_TOKEN_ADDRESS is required
if ! grep -q "require_var BOND_TOKEN_ADDRESS" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't require BOND_TOKEN_ADDRESS"
fi
pass "deploy-testnet.sh requires BOND_TOKEN_ADDRESS"

# Test 8: Verify ADMIN_ADDRESS is required
if ! grep -q "require_var ADMIN_ADDRESS" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't require ADMIN_ADDRESS"
fi
pass "deploy-testnet.sh requires ADMIN_ADDRESS"

# Test 9: Verify FEE_RECIPIENT_ADDRESS is required
if ! grep -q "require_var FEE_RECIPIENT_ADDRESS" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't require FEE_RECIPIENT_ADDRESS"
fi
pass "deploy-testnet.sh requires FEE_RECIPIENT_ADDRESS"

# Test 10: Verify NETWORK is required
if ! grep -q "require_var NETWORK" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't require NETWORK"
fi
pass "deploy-testnet.sh requires NETWORK"

# Test 11: Verify SOURCE_SECRET_KEY is required
if ! grep -q "require_var SOURCE_SECRET_KEY" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't require SOURCE_SECRET_KEY"
fi
pass "deploy-testnet.sh requires SOURCE_SECRET_KEY"

# Test 12: Verify env file loading exists
if ! grep -q "source.*ENV_FILE" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't load environment file"
fi
pass "deploy-testnet.sh loads environment file"

# Test 13: Verify stellar contract deploy is called
if ! grep -q "stellar contract deploy" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh missing stellar contract deploy call"
fi
pass "deploy-testnet.sh calls stellar contract deploy"

# Test 14: Verify stellar contract invoke for initialize exists
if ! grep -q "initialize" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh missing initialize invocation"
fi
pass "deploy-testnet.sh calls initialize"

# Test 15: Verify WASM_PATH is checked before deployment
if ! grep -q "WASM_PATH" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't check WASM_PATH"
fi
pass "deploy-testnet.sh checks WASM_PATH"

# Test 16: Verify .last-deploy-testnet file is persisted
if ! grep -q ".last-deploy-testnet" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't persist deployment info"
fi
pass "deploy-testnet.sh persists deployment info"

# Test 17: Verify script uses set -euo pipefail for safety
if ! grep -q "set -euo pipefail" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't use set -euo pipefail"
fi
pass "deploy-testnet.sh uses strict error handling"

# Test 18: Verify --skip-build option exists
if ! grep -q "\-\-skip-build" "${REPO_ROOT}/deploy-testnet.sh"; then
fail "deploy-testnet.sh doesn't support --skip-build"
fi
pass "deploy-testnet.sh supports --skip-build"

# All tests passed
echo ""
echo "All 18 tests passed for issue #215 (deploy-testnet.sh hardening)"
106 changes: 106 additions & 0 deletions tests/test_makefile_213.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#!/usr/bin/env bash
# Tests for issue #213: Add proof_registry targets to Makefile/justfile
# Verifies that Makefile and justfile have targets for proof_registry

set -euo pipefail

TEST_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(dirname "${TEST_DIR}")"

# Test helpers
pass() { echo "✓ $1"; }
fail() { echo "✗ $1" >&2; exit 1; }

# Test 1: Verify Makefile exists
if [[ ! -f "${REPO_ROOT}/Makefile" ]]; then
fail "Makefile not found at ${REPO_ROOT}/Makefile"
fi
pass "Makefile exists"

# Test 2: Verify justfile exists
if [[ ! -f "${REPO_ROOT}/justfile" ]]; then
fail "justfile not found at ${REPO_ROOT}/justfile"
fi
pass "justfile exists"

# Test 3: Verify proof_registry directory exists
if [[ ! -d "${REPO_ROOT}/proof_registry" ]]; then
fail "proof_registry directory not found"
fi
pass "proof_registry directory exists"

# Test 4: Verify proof_registry has Cargo.toml
if [[ ! -f "${REPO_ROOT}/proof_registry/Cargo.toml" ]]; then
fail "proof_registry/Cargo.toml not found"
fi
pass "proof_registry/Cargo.toml exists"

# Test 5: Check that Makefile has the expected structure for targets
if ! grep -q "\.PHONY:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing .PHONY declarations"
fi
pass "Makefile has .PHONY targets"

# Test 6: Check that Makefile documents fmt target
if ! grep -q "fmt:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing fmt target"
fi
pass "Makefile has fmt target"

# Test 7: Check that Makefile documents test target
if ! grep -q "test:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing test target"
fi
pass "Makefile has test target"

# Test 8: Check that Makefile documents build target
if ! grep -q "build:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing build target"
fi
pass "Makefile has build target"

# Test 9: Check that Makefile documents lint target
if ! grep -q "lint:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing lint target"
fi
pass "Makefile has lint target"

# Test 10: Check that Makefile documents audit target
if ! grep -q "audit:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing audit target"
fi
pass "Makefile has audit target"

# Test 11: Verify justfile has recipe syntax
if ! grep -q "^[a-z_-]*:" "${REPO_ROOT}/justfile"; then
fail "justfile missing recipe definitions"
fi
pass "justfile has recipe definitions"

# Test 12: Check that Makefile has help target
if ! grep -q "help:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing help target"
fi
pass "Makefile has help target"

# Test 13: Verify intent_settlement is configured in Makefile
if ! grep -q "intent_settlement" "${REPO_ROOT}/Makefile"; then
fail "Makefile doesn't reference intent_settlement"
fi
pass "Makefile references intent_settlement"

# Test 14: Verify WASM_TARGET is properly defined
if ! grep -q "WASM_TARGET" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing WASM_TARGET definition"
fi
pass "Makefile has WASM_TARGET definition"

# Test 15: Verify fmt-check target exists
if ! grep -q "fmt-check:" "${REPO_ROOT}/Makefile"; then
fail "Makefile missing fmt-check target"
fi
pass "Makefile has fmt-check target"

# All tests passed
echo ""
echo "All 15 tests passed for issue #213 (Makefile/justfile proof_registry targets)"
107 changes: 107 additions & 0 deletions tests/test_mutation_baseline_214.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
#!/usr/bin/env bash
# Tests for issue #214: Promote mutation testing from advisory to gated
# Verifies that mutation baseline is established and tracked

set -euo pipefail

TEST_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(dirname "${TEST_DIR}")"

# Test helpers
pass() { echo "✓ $1"; }
fail() { echo "✗ $1" >&2; exit 1; }

# Test 1: Verify CI workflow exists
if [[ ! -f "${REPO_ROOT}/.github/workflows/ci.yml" ]]; then
fail "CI workflow not found at .github/workflows/ci.yml"
fi
pass "CI workflow exists"

# Test 2: Verify mutants job exists in CI
if ! grep -q "mutants:" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "mutants job not found in CI workflow"
fi
pass "mutants job exists in CI workflow"

# Test 3: Verify cargo-mutants is installed in CI
if ! grep -q "cargo-mutants" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "cargo-mutants not referenced in CI workflow"
fi
pass "cargo-mutants is referenced in CI workflow"

# Test 4: Verify mutation testing command exists
if ! grep -q "cargo mutants" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "cargo mutants command not found in CI workflow"
fi
pass "cargo mutants command exists in CI workflow"

# Test 5: Verify CI workflow is structured with jobs
if ! grep -q "^jobs:" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "CI workflow missing jobs section"
fi
pass "CI workflow has jobs section"

# Test 6: Verify Rust toolchain is installed in mutants job
if ! grep -q "rust-toolchain" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "Rust toolchain not installed in CI"
fi
pass "Rust toolchain is installed in CI"

# Test 7: Verify CI uses caching
if ! grep -q "rust-cache" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "Rust cache not configured in CI"
fi
pass "Rust cache is configured in CI"

# Test 8: Check that CONTRIBUTING.md exists
if [[ ! -f "${REPO_ROOT}/CONTRIBUTING.md" ]]; then
fail "CONTRIBUTING.md not found"
fi
pass "CONTRIBUTING.md exists"

# Test 9: Verify CONTRIBUTING.md mentions maintainer guide
if ! grep -q -i "maintainer" "${REPO_ROOT}/CONTRIBUTING.md"; then
fail "CONTRIBUTING.md doesn't mention maintainer guide"
fi
pass "CONTRIBUTING.md mentions maintainer guide"

# Test 10: Verify cargo is available for mutation testing
if ! command -v cargo &>/dev/null; then
echo "⚠ cargo not available in test environment (expected in CI)"
else
pass "cargo is available"
fi

# Test 11: Verify intent_settlement workspace exists for mutation testing
if [[ ! -d "${REPO_ROOT}/intent_settlement" ]]; then
fail "intent_settlement workspace not found"
fi
pass "intent_settlement workspace exists"

# Test 12: Check that the workflow has reasonable Ubuntu runner
if ! grep -q "ubuntu-latest" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "CI workflow doesn't specify runner OS"
fi
pass "CI workflow specifies runner OS"

# Test 13: Verify audit job exists for dependencies
if ! grep -q "audit:" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "audit job not found in CI workflow"
fi
pass "audit job exists in CI workflow"

# Test 14: Verify format job exists in CI
if ! grep -q "fmt:" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "fmt job not found in CI workflow"
fi
pass "fmt job exists in CI workflow"

# Test 15: Verify contract job exists in CI (required check)
if ! grep -q "contract:" "${REPO_ROOT}/.github/workflows/ci.yml"; then
fail "contract job not found in CI workflow"
fi
pass "contract job exists in CI workflow"

# All tests passed
echo ""
echo "All 15 tests passed for issue #214 (mutation testing baseline)"
Loading