58 lines
1.7 KiB
Bash
Executable File
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","username":"admin","password":"pass"}')
|
|
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 ==="
|