#!/bin/bash # SPT C# Server Mod Test Script (Robust Version) SERVER_URL="https://127.0.0.1:6969" USERNAME="testuser_$(date +%s)" PASSWORD="testpassword" WRONG_PASSWORD="wrongpassword123" # Helper function for curl call_api() { local endpoint=$1 local data=$2 local cookie=$3 local headers=(-H "Content-Type: application/json" -H "requestcompressed: 0" -H "responsecompressed: 0") if [ ! -z "$cookie" ]; then headers+=(-H "Cookie: PHPSESSID=$cookie") fi curl -k -s -i -X POST "$SERVER_URL$endpoint" "${headers[@]}" -d "$data" } get_body() { echo "$1" | awk '/^\r?$/ {p=1; next} p {print}' | xargs } echo "=== [테스트 시작: $USERNAME] ===" echo "1. 회원가입 테스트 (신규 가입)" REG_RESP=$(call_api "/launcher/profile/register" "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\",\"edition\":\"Edge Of Darkness\"}") REG_BODY=$(get_body "$REG_RESP") echo "결과: $REG_BODY" if [[ "$REG_BODY" == "FAILED" ]]; then echo "오류: 신규 가입이 실패했습니다." exit 1 fi echo -e "\n2. 중복 회원가입 테스트 (이미 존재하는 아이디)" DUP_REG_RESP=$(call_api "/launcher/profile/register" "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\",\"edition\":\"Edge Of Darkness\"}") DUP_REG_BODY=$(get_body "$DUP_REG_RESP") echo "결과: $DUP_REG_BODY (예상: FAILED)" if [[ "$DUP_REG_BODY" != "FAILED" ]]; then echo "오류: 중복 가입이 허용되었습니다!" exit 1 fi echo -e "\n3. 로그인 테스트 (틀린 비밀번호)" WRONG_LOGIN_RESP=$(call_api "/launcher/profile/login" "{\"username\":\"$USERNAME\",\"password\":\"$WRONG_PASSWORD\"}") WRONG_LOGIN_BODY=$(get_body "$WRONG_LOGIN_RESP") echo "결과: $WRONG_LOGIN_BODY (예상: FAILED)" if [[ "$WRONG_LOGIN_BODY" != "FAILED" ]]; then echo "오류: 틀린 비밀번호로 로그인이 성공했습니다!" exit 1 fi echo -e "\n4. 로그인 테스트 (정상 로그인)" LOGIN_RESP=$(call_api "/launcher/profile/login" "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}") SESSION_ID=$(get_body "$LOGIN_RESP") echo "결과: $SESSION_ID (세션 ID 전송됨)" if [[ "$SESSION_ID" == "FAILED" || -z "$SESSION_ID" ]]; then echo "오류: 정상 로그인이 실패했습니다." exit 1 fi echo -e "\n5. 프로필 목록 조회 테스트" PROF_RESP=$(call_api "/launcher/profiles" "{}" "$SESSION_ID") PROF_BODY=$(get_body "$PROF_RESP") # 앞 15글자만 출력 TRUNCATED_BODY="${PROF_BODY:0:15}..." echo "결과 (앞 15자): $TRUNCATED_BODY" if [[ "$PROF_BODY" == "["* ]]; then echo "성공: 정상적인 프로필 리스트(JSON Array)가 수신되었습니다." else echo "오류: 프로필 조회 응답이 올바르지 않습니다." echo "전체 응답: $PROF_BODY" exit 1 fi echo -e "\n=== [모든 테스트 통과!] ==="