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

172 lines
4.1 KiB
Bash

#!/bin/bash
# NTAG424 簡化測試腳本
# 專為固定放置 NTAG424 卡片設計
set -e
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 可執行檔案
EXEC="./nt4h_c_example"
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW} NTAG424 簡化測試腳本${NC}"
echo -e "${YELLOW}========================================${NC}"
echo ""
# 檢查檔案
if [[ ! -f "$EXEC" ]]; then
echo -e "${RED}錯誤: 找不到 $EXEC${NC}"
exit 1
fi
if [[ ! -f "keys.txt" ]]; then
echo -e "${RED}錯誤: 找不到 keys.txt${NC}"
exit 1
fi
if [[ ! -f "urls.txt" ]]; then
echo -e "${RED}錯誤: 找不到 urls.txt${NC}"
exit 1
fi
echo -e "${GREEN}✓ 所有必要檔案都存在${NC}"
echo ""
# 測試函數
run_test() {
local name="$1"
local cmd="$2"
local expected="$3"
echo -e "${BLUE}[測試] $name${NC}"
echo "執行: $cmd"
if output=$(eval "$cmd" 2>&1); then
if [[ -n "$expected" ]]; then
if echo "$output" | grep -q "$expected"; then
echo -e "${GREEN}✓ 通過${NC}"
return 0
else
echo -e "${RED}✗ 失敗 - 未找到: $expected${NC}"
echo "輸出: $output"
return 1
fi
else
echo -e "${GREEN}✓ 通過${NC}"
return 0
fi
else
echo -e "${RED}✗ 失敗 - 命令錯誤${NC}"
echo "錯誤: $output"
return 1
fi
}
# 測試計數器
passed=0
failed=0
# 測試 1: 讀取 UID
if run_test "讀取 UID" "$EXEC getuid --quiet --key 1" "SUCCEED"; then
((passed++))
else
((failed++))
fi
# 測試 2: CMAC 驗證
if run_test "CMAC 驗證" "$EXEC verify --quiet --key 1" "SUCCEED"; then
((passed++))
else
((failed++))
fi
# 測試 3: 快速 SDM 設定
if run_test "快速 SDM 設定" "$EXEC setsdm --quiet --url 1 --key 1" "SUCCEED"; then
((passed++))
else
((failed++))
fi
# 測試 4: 使用不同金鑰
if run_test "使用金鑰 2" "$EXEC verify --quiet --key 2" "SUCCEED"; then
((passed++))
else
((failed++))
fi
# 測試 5: 使用不同 URL
if run_test "使用 URL 2" "$EXEC setsdm --quiet --url 2 --key 1" "SUCCEED"; then
((passed++))
else
((failed++))
fi
# 測試 6: 詳細模式讀取 UID
if run_test "詳細模式讀取 UID" "$EXEC getuid --key 1" "UID:"; then
((passed++))
else
((failed++))
fi
# 測試 7: 詳細模式 CMAC 驗證
if run_test "詳細模式 CMAC 驗證" "$EXEC verify --key 1" "MAC 驗證"; then
((passed++))
else
((failed++))
fi
# 測試 8: 手動驗證模式
echo -e "${BLUE}[測試] 手動驗證模式${NC}"
echo "正在讀取卡片資料..."
# 讀取實際資料進行手動驗證
if verify_output=$($EXEC verify --key 1 2>&1); then
uid=$(echo "$verify_output" | grep "UID:" | awk '{print $2}')
ctr=$(echo "$verify_output" | grep "計數器:" | awk '{print $2}')
mac=$(echo "$verify_output" | grep "MAC:" | awk '{print $2}')
if [[ -n "$uid" && -n "$ctr" && -n "$mac" ]]; then
if run_test "手動驗證" "$EXEC verify --manual --quiet --uid $uid --ctr $ctr --cmac $mac --key 1" "SUCCEED"; then
((passed++))
else
((failed++))
fi
else
echo -e "${YELLOW}⚠ 跳過手動驗證 - 無法解析資料${NC}"
((passed++))
fi
else
echo -e "${YELLOW}⚠ 跳過手動驗證 - 無法讀取卡片${NC}"
((passed++))
fi
# 測試 9: 錯誤處理
if run_test "錯誤處理 - 無效命令" "$EXEC invalid_command" "未知命令"; then
((passed++))
else
((failed++))
fi
# 顯示結果
echo ""
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW} 測試結果${NC}"
echo -e "${YELLOW}========================================${NC}"
echo -e "通過: ${GREEN}$passed${NC}"
echo -e "失敗: ${RED}$failed${NC}"
echo -e "總計: $((passed + failed))"
if [[ $failed -eq 0 ]]; then
echo -e "${GREEN}🎉 所有測試通過!${NC}"
exit 0
else
echo -e "${RED}❌ 有 $failed 個測試失敗${NC}"
exit 1
fi