NFCcreate-web/linux64_release/test_manual_verify.sh
2025-09-25 19:04:00 +08:00

129 lines
4.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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