verstak/test_smoke_sync.sh

58 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
echo "=== Verstak Sync E2E Smoke Test ==="
SERVER_PORT=18999
SDIR=$(mktemp -d)
VD=$(mktemp -d)
cleanup() { kill "$SPID" 2>/dev/null || true; rm -rf "$SDIR" "$VD"; }
trap cleanup EXIT
echo ":: Build"
go build -o /tmp/vs-server ./cmd/verstak-server/
go build -o /tmp/vs-cli ./cmd/verstak/
echo ":: Start server"
/tmp/vs-server --port "$SERVER_PORT" --data "$SDIR" --admin-user admin --admin-pass pass > /dev/null 2>&1 &
SPID=$!
sleep 2
echo ":: Health"
curl -sf "http://localhost:$SERVER_PORT/api/v1/health" | grep -q '"ok"' && echo " OK"
echo ":: Register device"
REG=$(curl -sf -X POST "http://localhost:$SERVER_PORT/api/v1/device/register" \
-H "Content-Type: application/json" -d '{"name":"smoke"}')
DID=$(echo "$REG" | python3 -c "import sys,json;print(json.load(sys.stdin)['device_id'])")
AKEY=$(echo "$REG" | python3 -c "import sys,json;print(json.load(sys.stdin)['api_key'])")
echo " device=$DID"
echo ":: Init vault"
/tmp/vs-cli init --vault "$VD"
echo ":: Configure sync"
cat > "$VD/.verstak/config.yml" <<YML
sync:
server_url: http://localhost:$SERVER_PORT
api_key: $AKEY
device_id: $DID
auto_sync: false
YML
echo ":: Insert sync op (simulate recorded op)"
sqlite3 "$VD/.verstak/index.db" \
"INSERT INTO sync_ops (id, op_id, device_id, entity_type, entity_id, op_type, payload_json, created_at) VALUES ('e1','e1','$DID','node','n1','create','{\"title\":\"t\"}',datetime('now'));"
echo ":: Push"
/tmp/vs-cli sync push --vault "$VD" | grep -q "Pushed 1" && echo " OK"
echo ":: Pull"
/tmp/vs-cli sync pull --vault "$VD" | grep -q "Pulled" && echo " OK"
echo ":: Status"
/tmp/vs-cli sync status --vault "$VD"
echo ""
echo "=== ALL TESTS PASSED ==="