129 lines
4.2 KiB
Bash
129 lines
4.2 KiB
Bash
#!/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 |