Files
gitea-ci-library/tests/helpers/mock-api.sh
T
moilanik 7b99392dd7
CI / load-config (push) Successful in 11s
ci-cucumber Cucumber tests passed
ci-bats Bats tests
ci-build Build complete
CI / feature (push) Successful in 2m15s
CI / main (push) Has been skipped
katetaan puuttuva testit
2026-06-13 19:39:01 +03:00

124 lines
3.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
MOCK_PORT=18080
MOCK_PID=""
MOCK_REQUEST_FILE=""
MOCK_RESPONSE_CODE=201
MOCK_STATE_FILE="/tmp/mock_api_state"
MOCK_SEQUENCE_FILE=""
MOCK_CONFIG_FILE=""
_kill_port() {
local pids
pids=$(lsof -ti ":$MOCK_PORT" 2>/dev/null) || true
[ -n "$pids" ] && kill -9 $pids 2>/dev/null || true
sleep 0.5
}
_wait_port_free() {
local i=0
while lsof -ti ":$MOCK_PORT" >/dev/null 2>&1 && [ $i -lt 50 ]; do
sleep 0.1
i=$((i + 1))
done
}
mock_set_sequence() {
MOCK_SEQUENCE_FILE=$(mktemp)
echo "$1" | jq -c '.' > "$MOCK_SEQUENCE_FILE"
echo "0" > "${MOCK_SEQUENCE_FILE}.idx"
}
mock_clear_sequence() {
MOCK_SEQUENCE_FILE=""
}
mock_start() {
MOCK_RESPONSE_CODE="${MOCK_RESPONSE_CODE:-201}"
MOCK_REQUEST_FILE=$(mktemp)
echo "$MOCK_REQUEST_FILE" > "$MOCK_STATE_FILE"
MOCK_CONFIG_FILE=$(mktemp)
if [ -n "${MOCK_SEQUENCE_FILE:-}" ] && [ -f "$MOCK_SEQUENCE_FILE" ]; then
echo "SEQUENCE" > "$MOCK_CONFIG_FILE"
cat "$MOCK_SEQUENCE_FILE" >> "$MOCK_CONFIG_FILE"
printf '%s' "${MOCK_SEQUENCE_FILE}.idx" >> "$MOCK_CONFIG_FILE"
else
echo "SINGLE" > "$MOCK_CONFIG_FILE"
echo "$MOCK_RESPONSE_CODE" >> "$MOCK_CONFIG_FILE"
fi
_kill_port
_wait_port_free
nohup python3 "$(dirname "${BASH_SOURCE[0]}")/mock-server.py" "$MOCK_PORT" "$MOCK_CONFIG_FILE" "$MOCK_REQUEST_FILE" \
</dev/null >/dev/null 2>&1 &
MOCK_PID=$!
sleep 0.5
}
mock_stop() {
[ -n "${MOCK_PID:-}" ] && kill -9 "$MOCK_PID" 2>/dev/null || true
_kill_port
_wait_port_free
[ -n "${MOCK_REQUEST_FILE:-}" ] && rm -f "${MOCK_REQUEST_FILE}" 2>/dev/null || true
[ -n "${MOCK_SEQUENCE_FILE:-}" ] && rm -f "${MOCK_SEQUENCE_FILE}" 2>/dev/null || true
[ -n "${MOCK_SEQUENCE_FILE:-}" ] && rm -f "${MOCK_SEQUENCE_FILE}.idx" 2>/dev/null || true
[ -n "${MOCK_CONFIG_FILE:-}" ] && rm -f "${MOCK_CONFIG_FILE}" 2>/dev/null || true
rm -f "$MOCK_STATE_FILE"
MOCK_PID=""
MOCK_SEQUENCE_FILE=""
MOCK_CONFIG_FILE=""
}
mock_set_response() {
MOCK_RESPONSE_CODE="${1:-201}"
}
_get_request_file() {
if [ -f "$MOCK_STATE_FILE" ]; then
cat "$MOCK_STATE_FILE"
elif [ -n "${MOCK_REQUEST_FILE:-}" ]; then
echo "$MOCK_REQUEST_FILE"
else
echo "/dev/null"
fi
}
mock_get_request_body() {
local rf
rf=$(_get_request_file)
[ -f "$rf" ] && tail -1 "$rf" 2>/dev/null || true
}
mock_get_request_path() {
local rf
rf=$(_get_request_file)
[ -f "$rf" ] && tail -2 "$rf" 2>/dev/null | head -1 | awk '{print $2}' || true
}
mock_get_first_request_path() {
local rf
rf=$(_get_request_file)
[ -f "$rf" ] && head -1 "$rf" 2>/dev/null | awk '{print $2}' || true
}
mock_get_first_request_method() {
local rf
rf=$(_get_request_file)
[ -f "$rf" ] && head -1 "$rf" 2>/dev/null | awk '{print $1}' || true
}
mock_get_first_request_body() {
local rf
rf=$(_get_request_file)
[ -f "$rf" ] && sed -n '2p' "$rf" 2>/dev/null || true
}
mock_get_request_method() {
local rf
rf=$(_get_request_file)
[ -f "$rf" ] && tail -2 "$rf" 2>/dev/null | head -1 | awk '{print $1}' || true
}