#!/usr/bin/env bash # RTGS 검증 하니스 공통 함수 (복원력방안 부록A 재현: S1/S2/S4) # 포터블 Git Bash에서 실행. 실행 중인 DC1 스택(인프라+6서비스)을 전제로 한다. set -u PG_BIN="/c/ai-dev/apps/postgresql-16.4/bin/psql.exe" KAFKA_PROD="/c/ai-dev/apps/kafka-3.8.1/bin/windows/kafka-console-producer.bat" JPS="/c/ai-dev/apps/jdk-21/bin/jps" JAVA="C:\\ai-dev\\apps\\jdk-21\\bin\\java.exe" JAR_DIR="C:\\ai-dev\\workspace\\rtgs\\backend" CHANEL="http://localhost:8091" NS="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08" PSQL() { PGCLIENTENCODING=UTF8 "$PG_BIN" -h localhost -p 5433 -U rtgs -d rtgs "$@"; } q() { PSQL -t -A -c "$1" | tr -d '[:space:]'; } # 스칼라 결과(공백 제거) pass() { echo " [PASS] $1"; } fail() { echo " [FAIL] $1"; FAILED=1; } hr() { echo "------------------------------------------------------------"; } # 정식 pacs.008.001.08 전문 생성 후 접수(curl). 인자: from to amount bmi submit() { local from=$1 to=$2 amt=$3 bmi=$4 local xml="\ $bmi2026-07-10T12:00:001\ CLRG\ $bmi$amt\ SLEVBANK-$from\ ACC-$from\ $from\ $to\ BANK-$toACC-$to\ " curl -s -m 8 -X POST "$CHANEL/pay/customer" -H "Content-Type: application/xml" --data-binary "$xml" >/dev/null } # 22자리 유일 BMI 생성. 인자: 기관코드(4) 인덱스 mkbmi() { printf '20260710%04d%010d' "$1" "$(( ($(date +%s) % 1000000) * 100 + $2 ))"; } # 미완결(PDNG/ACSP) 잔류가 0이 될 때까지 대기(최대 초). 인자: timeout_sec wait_drain() { local t=${1:-40} n for ((i=0;i