#!/bin/bash # 顏色定義 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color EXEC="./nt4h_c_example" PASSED=0 FAILED=0 echo -e "${BLUE}=======================================${NC}" echo -e "${BLUE} 手動驗證模式測試腳本${NC}" echo -e "${BLUE}=======================================${NC}" echo "" # 測試函數 run_test() { local test_name="$1" local command="$2" local expected="$3" local allow_fail="$4" echo -e "${YELLOW}[測試] $test_name${NC}" echo "執行: $command" if output=$(eval $command 2>&1); then if [[ "$output" == *"$expected"* ]]; then echo -e "${GREEN}✓ 通過${NC}" ((PASSED++)) else if [[ "$allow_fail" == "true" ]]; then echo -e "${YELLOW}⚠ 預期失敗${NC}" ((PASSED++)) else echo -e "${RED}✗ 失敗 - 輸出不符合預期${NC}" echo "預期包含: $expected" echo "實際輸出: $output" ((FAILED++)) fi fi else echo -e "${RED}✗ 失敗 - 命令執行錯誤${NC}" echo "錯誤輸出: $output" ((FAILED++)) fi echo "" } # 測試 1: 基本手動驗證(詳細模式) run_test "基本手動驗證 (詳細模式)" \ "$EXEC verify --manual --uid 0456735AD51F90 --ctr 0000B1 --cmac C2DEEE0FF07E7EC4" \ "MAC 驗證成功" # 測試 2: 基本手動驗證(靜默模式) run_test "基本手動驗證 (靜默模式)" \ "$EXEC verify --manual --quiet --uid 0456735AD51F90 --ctr 0000B1 --cmac C2DEEE0FF07E7EC4" \ "SUCCEED" # 測試 3: URL 方式手動驗證 run_test "URL 方式手動驗證" \ "$EXEC verify --manual --url 'https://nodered.contree.app/nfc?uid=0456735AD51F90&ctr=0000B1&cmac=C2DEEE0FF07E7EC4'" \ "MAC 驗證成功" # 測試 4: URL 方式手動驗證(靜默模式) run_test "URL 方式手動驗證 (靜默模式)" \ "$EXEC verify --manual --quiet --url 'https://nodered.contree.app/nfc?uid=0456735AD51F90&ctr=0000B1&cmac=C2DEEE0FF07E7EC4'" \ "SUCCEED" # 測試 5: 錯誤 UID 格式 run_test "錯誤 UID 格式" \ "$EXEC verify --manual --uid 123 --ctr 0000B1 --cmac C2DEEE0FF07E7EC4" \ "UID 格式錯誤" # 測試 6: 錯誤計數器格式 run_test "錯誤計數器格式" \ "$EXEC verify --manual --uid 0456735AD51F90 --ctr 123 --cmac C2DEEE0FF07E7EC4" \ "計數器格式錯誤" # 測試 7: 錯誤 CMAC 格式 run_test "錯誤 CMAC 格式" \ "$EXEC verify --manual --uid 0456735AD51F90 --ctr 0000B1 --cmac 123" \ "CMAC 格式錯誤" # 測試 8: 缺少參數 run_test "缺少參數" \ "$EXEC verify --manual --uid 0456735AD51F90" \ "手動驗證模式需要提供" # 測試 9: 使用不同金鑰索引 (預期失敗,因為 CMAC 是用金鑰 1 計算的) run_test "使用金鑰索引 2 (預期失敗)" \ "$EXEC verify --manual --quiet --key 2 --uid 0456735AD51F90 --ctr 0000B1 --cmac C2DEEE0FF07E7EC4" \ "FAILED" \ "true" # 測試 10: 使用不同 URL 索引 (驗證 URL 索引功能) run_test "使用 URL 索引 2" \ "$EXEC verify --manual --quiet --uid 0456735AD51F90 --ctr 0000B1 --cmac C2DEEE0FF07E7EC4 --url-index 2" \ "SUCCEED" # 測試 11: 使用不同 URL 索引 3 run_test "使用 URL 索引 3" \ "$EXEC verify --manual --quiet --uid 0456735AD51F90 --ctr 0000B1 --cmac C2DEEE0FF07E7EC4 --url-index 3" \ "SUCCEED" # 測試 12: 錯誤的 MAC(應該驗證失敗) run_test "錯誤的 MAC (預期失敗)" \ "$EXEC verify --manual --quiet --uid 0456735AD51F90 --ctr 0000B1 --cmac FFFFFFFFFFFFFFFF" \ "FAILED" \ "true" # 顯示測試結果 echo -e "${BLUE}=======================================${NC}" echo -e "${BLUE} 測試結果${NC}" echo -e "${BLUE}=======================================${NC}" echo -e "${GREEN}通過: $PASSED${NC}" echo -e "${RED}失敗: $FAILED${NC}" echo "" if [[ $FAILED -eq 0 ]]; then echo -e "${GREEN}🎉 所有手動驗證測試都通過了!${NC}" echo -e "${GREEN}✅ 手動驗證模式現在可以在沒有讀卡機的情況下正常工作${NC}" exit 0 else echo -e "${RED}❌ 有測試失敗,請檢查問題${NC}" exit 1 fi