cd6ff8830c
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 27s
acc-tests Cucumber test report
CI Feature / Cucumber tests (push) Failing after 51s
unit-tests Bats test report
CI Feature / Bats tests (push) Failing after 1m32s
CI Feature / Report Summary (push) Successful in 5s
126 lines
3.1 KiB
Bash
126 lines
3.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
MOCK_PORT=""
|
|
MOCK_PID=""
|
|
MOCK_REQUEST_FILE=""
|
|
MOCK_RESPONSE_CODE=201
|
|
MOCK_STATE_FILE="/tmp/mock_api_state"
|
|
MOCK_SEQUENCE_FILE=""
|
|
MOCK_CONFIG_FILE=""
|
|
|
|
_free_port() {
|
|
python3 -c "import socket; s=socket.socket(); s.bind(('',0)); print(s.getsockname()[1]); s.close()"
|
|
}
|
|
|
|
_wait_port_ready() {
|
|
local i=0
|
|
while [ $i -lt 10 ]; do
|
|
if nc -z localhost "$MOCK_PORT" 2>/dev/null; then
|
|
return 0
|
|
fi
|
|
sleep 0.1
|
|
i=$((i + 1))
|
|
done
|
|
return 1
|
|
}
|
|
|
|
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_PORT=$(_free_port)
|
|
export MOCK_PORT
|
|
MOCK_URL="http://localhost:${MOCK_PORT}"
|
|
export SERVER_URL="$MOCK_URL"
|
|
export GITEA_API_URL="$MOCK_URL"
|
|
|
|
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
|
|
|
|
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=$!
|
|
_wait_port_ready
|
|
}
|
|
|
|
mock_stop() {
|
|
[ -n "${MOCK_PID:-}" ] && kill -9 "$MOCK_PID" 2>/dev/null || true
|
|
[ -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
|
|
}
|