87 lines
2.5 KiB
Bash
Executable File
87 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
NSIGNER_BIN="${NSIGNER_BIN:-./build/nsigner}"
|
|
|
|
if [[ ! -x "$NSIGNER_BIN" ]]; then
|
|
echo "[error] nsigner binary not found or not executable at: $NSIGNER_BIN"
|
|
echo " Build it first with: make dev"
|
|
exit 1
|
|
fi
|
|
|
|
echo "n_signer interactive smoke test"
|
|
echo "Using binary: $NSIGNER_BIN"
|
|
echo
|
|
|
|
default_socket=""
|
|
if [[ -r /proc/net/unix ]]; then
|
|
default_socket="$(awk '/@nsigner_/ {sub(/^@/, "", $8); print $8; exit}' /proc/net/unix || true)"
|
|
fi
|
|
|
|
if [[ -n "$default_socket" ]]; then
|
|
read -r -p "Signer socket name (without @) [${default_socket}]: " socket_name
|
|
socket_name="${socket_name:-$default_socket}"
|
|
else
|
|
read -r -p "Signer socket name (without @, e.g. nsigner_hairy_dog): " socket_name
|
|
fi
|
|
|
|
if [[ -z "${socket_name}" ]]; then
|
|
echo "[error] socket name is required"
|
|
exit 1
|
|
fi
|
|
|
|
run_request() {
|
|
local req="$1"
|
|
"$NSIGNER_BIN" --socket-name "$socket_name" client "$req" || true
|
|
}
|
|
|
|
echo
|
|
echo "[1/5] get_public_key"
|
|
req_get='{"id":"1","method":"get_public_key","params":[""]}'
|
|
resp_get="$(run_request "$req_get")"
|
|
echo "request : $req_get"
|
|
echo "response: $resp_get"
|
|
pubkey="$(printf '%s' "$resp_get" | sed -n 's/.*"result":"\([0-9a-fA-F]\{64\}\)".*/\1/p')"
|
|
if [[ -n "$pubkey" ]]; then
|
|
echo "pubkey : $pubkey"
|
|
else
|
|
echo "[warn] could not parse pubkey from response"
|
|
fi
|
|
|
|
echo
|
|
echo "[2/5] sign_event"
|
|
now_ts="$(date +%s)"
|
|
event_json='{"kind":1,"content":"hello from tests/test.sh","tags":[],"created_at":__TS__}'
|
|
event_json="${event_json/__TS__/${now_ts}}"
|
|
escaped_event_json="${event_json//\"/\\\"}"
|
|
req_sign="{\"id\":\"2\",\"method\":\"sign_event\",\"params\":[\"${escaped_event_json}\",{\"role\":\"main\"}]}"
|
|
resp_sign="$(run_request "$req_sign")"
|
|
echo "request : $req_sign"
|
|
echo "response: $resp_sign"
|
|
if printf '%s' "$resp_sign" | grep -q '"result"'; then
|
|
echo "[ok] sign_event returned result"
|
|
else
|
|
echo "[warn] sign_event did not return result"
|
|
fi
|
|
|
|
echo
|
|
echo "[3/5] sign_event with nostr_index=0"
|
|
req_sign_idx="{\"id\":\"3\",\"method\":\"sign_event\",\"params\":[\"${escaped_event_json}\",{\"nostr_index\":0}]}"
|
|
resp_sign_idx="$(run_request "$req_sign_idx")"
|
|
echo "request : $req_sign_idx"
|
|
echo "response: $resp_sign_idx"
|
|
|
|
echo
|
|
echo "[4/5] role selector error case (unknown role)"
|
|
req_bad_role='{"id":"4","method":"sign_event","params":["{}",{"role":"does_not_exist"}]}'
|
|
resp_bad_role="$(run_request "$req_bad_role")"
|
|
echo "request : $req_bad_role"
|
|
echo "response: $resp_bad_role"
|
|
|
|
echo
|
|
echo "[5/5] list currently running signers"
|
|
list_resp="$($NSIGNER_BIN list || true)"
|
|
echo "$list_resp"
|
|
|
|
echo
|
|
echo "Smoke test complete." |