180 lines
6.7 KiB
Bash
Executable file
180 lines
6.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Regression test suite: xcecli ↔ apiserver
|
|
# Usage:
|
|
# ./run.sh # uses defaults below
|
|
# XCE=/path/to/xce URL=http://host:8080 ./run.sh
|
|
#
|
|
# Requires a running apiserver with builtin test data and config_file auth.
|
|
# Exit code: 0 = all passed, non-zero = failures found.
|
|
|
|
set -euo pipefail
|
|
|
|
XCE="${XCE:-/tmp/xce_static}"
|
|
URL="${URL:-http://localhost:8080}"
|
|
PASS=0
|
|
FAIL=0
|
|
SKIP=0
|
|
|
|
# ── helpers ──────────────────────────────────────────────────────────────────
|
|
|
|
GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
|
|
|
pass() { echo -e "${GREEN}PASS${NC} $1"; PASS=$((PASS+1)); }
|
|
fail() { echo -e "${RED}FAIL${NC} $1 — $2"; FAIL=$((FAIL+1)); }
|
|
skip() { echo -e "${YELLOW}SKIP${NC} $1 — $2"; SKIP=$((SKIP+1)); }
|
|
|
|
# Run command, assert stdout contains expected string
|
|
assert_contains() {
|
|
local desc="$1" expected="$2"; shift 2
|
|
local out
|
|
out=$("$@" 2>&1) || true
|
|
if echo "$out" | grep -qF "$expected"; then
|
|
pass "$desc"
|
|
else
|
|
fail "$desc" "expected '${expected}' in output, got: $(echo "$out" | head -3)"
|
|
fi
|
|
}
|
|
|
|
# Run command, assert stdout does NOT contain string
|
|
assert_not_contains() {
|
|
local desc="$1" unexpected="$2"; shift 2
|
|
local out
|
|
out=$("$@" 2>&1) || true
|
|
if echo "$out" | grep -qF "$unexpected"; then
|
|
fail "$desc" "unexpected '${unexpected}' found in output"
|
|
else
|
|
pass "$desc"
|
|
fi
|
|
}
|
|
|
|
# Assert command exits successfully (any output)
|
|
assert_ok() {
|
|
local desc="$1"; shift
|
|
if "$@" >/dev/null 2>&1; then
|
|
pass "$desc"
|
|
else
|
|
fail "$desc" "command exited non-zero"
|
|
fi
|
|
}
|
|
|
|
# ── setup ────────────────────────────────────────────────────────────────────
|
|
|
|
echo "=== Regression Suite ==="
|
|
echo "XCE : $XCE"
|
|
echo "URL : $URL"
|
|
echo ""
|
|
|
|
if [[ ! -x "$XCE" ]]; then
|
|
echo "ERROR: xce binary not found at $XCE"
|
|
echo "Build with: cd xcecli && CGO_ENABLED=0 go build -o /tmp/xce_static ./cmd/main.go"
|
|
exit 1
|
|
fi
|
|
|
|
# Check server reachable
|
|
if ! "$XCE" login -u admin -p admin --url "$URL" 2>&1 | grep -q "login successfully"; then
|
|
echo "ERROR: cannot login to $URL — is apiserver running?"
|
|
exit 1
|
|
fi
|
|
|
|
echo "--- Auth ---"
|
|
|
|
# ── auth ─────────────────────────────────────────────────────────────────────
|
|
|
|
assert_contains "login admin" "login successfully" $XCE login -u admin -p admin --url "$URL"
|
|
assert_contains "list shows url" "$URL" $XCE list
|
|
assert_contains "whoami returns user" "admin" $XCE users whoami
|
|
assert_contains "logout clears session" "clear login info" $XCE logout --url "$URL"
|
|
|
|
# Re-login for remaining tests
|
|
$XCE login -u admin -p admin --url "$URL" >/dev/null 2>&1
|
|
|
|
echo ""
|
|
echo "--- Permissions ---"
|
|
|
|
assert_contains "permissions list returns data" "job:view" $XCE permissions list
|
|
assert_not_contains "permissions list no error" "failed" $XCE permissions list
|
|
|
|
echo ""
|
|
echo "--- Roles ---"
|
|
|
|
# T1 fix: roles list must not send unknown param
|
|
assert_not_contains "roles list no 400 error" "invalid parameters" $XCE roles list
|
|
assert_not_contains "roles list no unique error" "unique" $XCE roles list
|
|
|
|
# roles add / delete round-trip
|
|
$XCE roles delete -r regression_test_role >/dev/null 2>&1 || true
|
|
assert_contains "roles add" "created successfully" $XCE roles add -r regression_test_role -p "job:view=all"
|
|
assert_contains "roles delete" "deleted successfully" $XCE roles delete -r regression_test_role
|
|
|
|
echo ""
|
|
echo "--- Users ---"
|
|
|
|
# T1 fix: users list must not send unknown param
|
|
assert_not_contains "users list no 400 error" "invalid parameters" $XCE users list
|
|
assert_not_contains "users list no unique error" "unique" $XCE users list
|
|
|
|
assert_contains "users whoami" "admin" $XCE users whoami
|
|
# ensure clean state before assign
|
|
$XCE users unassignrole -u user1 -r basic_user >/dev/null 2>&1 || true
|
|
assert_contains "users assignrole" "assigned roles" $XCE users assignrole -u user1 -r basic_user
|
|
assert_contains "users unassignrole" "deleted successfully" $XCE users unassignrole -u user1 -r basic_user
|
|
|
|
echo ""
|
|
echo "--- Hosts ---"
|
|
|
|
assert_not_contains "hosts list no error" "failed" $XCE hosts list
|
|
assert_contains "hosts open" "open" $XCE hosts open host1
|
|
assert_contains "hosts close" "close" $XCE hosts close host1
|
|
|
|
echo ""
|
|
echo "--- Queues ---"
|
|
|
|
assert_not_contains "queues list no error" "failed" $XCE queues list
|
|
assert_contains "queues open" "open" $XCE queues open normal
|
|
assert_contains "queues close" "close" $XCE queues close normal
|
|
assert_contains "queues active" "active" $XCE queues active normal
|
|
assert_contains "queues deactive" "deactive" $XCE queues deactive normal
|
|
|
|
echo ""
|
|
echo "--- Jobs ---"
|
|
|
|
# submit returns a job ID
|
|
SUBMIT_OUT=$($XCE jobs submit -J regression_test -q normal sleep 1 2>&1)
|
|
if echo "$SUBMIT_OUT" | grep -qE "Job <[0-9]+> is submitted"; then
|
|
pass "jobs submit"
|
|
JOB_ID=$(echo "$SUBMIT_OUT" | grep -oE '[0-9]{10,}' | head -1)
|
|
else
|
|
fail "jobs submit" "unexpected output: $SUBMIT_OUT"
|
|
JOB_ID=""
|
|
fi
|
|
|
|
assert_not_contains "jobs list -u all no error" "failed" $XCE jobs list -u all
|
|
|
|
# Verify submit time is parsed (not showing '-')
|
|
$XCE login -u user1 -p user1 --url "$URL" >/dev/null 2>&1
|
|
assert_not_contains "jobs list submit_time not dash" "- " $XCE jobs list
|
|
$XCE login -u admin -p admin --url "$URL" >/dev/null 2>&1
|
|
|
|
if [[ -n "$JOB_ID" ]]; then
|
|
assert_not_contains "jobs kill by id no crash" "panic" $XCE jobs kill "$JOB_ID"
|
|
else
|
|
skip "jobs kill" "no job ID from submit"
|
|
fi
|
|
|
|
echo ""
|
|
echo "--- Resources ---"
|
|
|
|
assert_not_contains "resources distribution list no error" "failed" $XCE resources distribution list
|
|
assert_not_contains "resources definition list no error" "failed" $XCE resources definition list
|
|
|
|
echo ""
|
|
echo "--- Clusters ---"
|
|
|
|
assert_not_contains "clusters list no error" "failed" $XCE id
|
|
|
|
echo ""
|
|
echo "─────────────────────────────────────────"
|
|
echo -e "Results: ${GREEN}${PASS} passed${NC} ${RED}${FAIL} failed${NC} ${YELLOW}${SKIP} skipped${NC}"
|
|
echo "─────────────────────────────────────────"
|
|
|
|
[[ $FAIL -eq 0 ]]
|