188 lines
5.9 KiB
Markdown
188 lines
5.9 KiB
Markdown
# Telfax 測試報告 — V1.0 正式版
|
||
|
||
## 測試日期
|
||
|
||
2026-07-23
|
||
|
||
## 測試環境
|
||
|
||
| 項目 | 規格 |
|
||
|---|---|
|
||
| **主機** | macOS, Apple Silicon |
|
||
| **Modem 1** | Agere USR5637 USB (`/dev/cu.usbmodem00000021`), 電話: 2528**** |
|
||
| **Modem 2** | CONEXANT V90 CX93001 USB (`/dev/cu.usbmodem123456781`), 電話: 2748**** |
|
||
| **電話線路** | 兩條獨立 POTS 線路 |
|
||
| **遠端傳真機** | 電話: 2515**** |
|
||
| **作業系統** | macOS (Darwin) |
|
||
| **編譯器** | Rust 1.95, release profile |
|
||
|
||
## 測試項目與結果
|
||
|
||
### 1. Modem 偵測
|
||
|
||
| 測試 | 結果 |
|
||
|---|---|
|
||
| USR5637 偵測 (`AT+GMI`) | ✅ Agere Systems U.S. Robotics 56K FAX |
|
||
| V90 CX93001 偵測 (`AT+GMI`) | ✅ CONEXANT V92 |
|
||
| Class 1 支援 | ✅ 兩台皆支援 |
|
||
| TX/RX 速率查詢 | ✅ V.21/V.27ter/V.29/V.17 |
|
||
|
||
### 2. 單頁迴圈測試 (Modem ↔ Modem)
|
||
|
||
| 測試 | 方向 | 連結數 | 結果 |
|
||
|---|---|---|---|
|
||
| test15 | V90 → USR5637 | 2 | ✅ 100% 像素吻合 |
|
||
| test20 | USR5637 → V90 | 2 | ✅ 100% 像素吻合 |
|
||
|
||
### 3. 多頁迴圈測試 (Modem ↔ Modem)
|
||
|
||
| 測試 | 方向 | 頁數 | 結果 |
|
||
|---|---|---|---|
|
||
| test_multi_forward | V90 → USR5637 | 4 | ✅ 4/4 頁 100% 像素吻合 |
|
||
| test_multi_reverse | USR5637 → V90 | 4 | ✅ 4/4 頁 100% 像素吻合 |
|
||
|
||
### 4. 不同輸入格式
|
||
|
||
| 格式 | 測試檔 | 頁數 | 結果 |
|
||
|---|---|---|---|
|
||
| TIFF | `fax_full.tif` | 4 | ✅ 直接傳輸成功 |
|
||
| PDF | `Warren113114.pdf` | 3 | ✅ Ghostscript 轉換 + 傳輸成功 |
|
||
| PNG | `Screenshot 2026-04-01.png` | 1 | ✅ 縮放至 1728px + 傳輸成功 |
|
||
|
||
### 5. 標準解析度傳輸
|
||
|
||
| 測試 | 檔案 | 解析度 | 結果 |
|
||
|---|---|---|---|
|
||
| cover_cn.tif | `cover_cn.tif` | Standard | ✅ 100% 像素吻合 |
|
||
|
||
### 6. 封面頁 (Cover Page)
|
||
|
||
| 測試 | 格式 | 結果 |
|
||
|---|---|---|
|
||
| cover-create | TIFF | ✅ 1728×2291, 3,959,094 bytes |
|
||
| cover-create | HTML | ✅ 正確產生 HTML 預覽 |
|
||
| cover-create | Both | ✅ 同時產生 TIFF + HTML |
|
||
| 中文內容 | 張三/測試文件 | ✅ CJK 字型正確渲染 |
|
||
|
||
### 7. OCR 封面頁驗證
|
||
|
||
| 測試 | 結果 |
|
||
|---|---|
|
||
| Tesseract OCR 安裝 | ✅ v5.5.2, 含 eng/chi_tra/chi_sim/jpn |
|
||
| PSM 參數正確分離 | ✅ `--psm 3` 修正為 `--psm` + `3` |
|
||
| 多語言 OCR | ✅ eng + chi_tra 預設啟用 |
|
||
| CJK 空格處理 | ✅ `張 三` → `張三` 比對成功 |
|
||
| 全欄位驗證 | ✅ FACSIMILE, TO, FROM, DATE, PAGES, SUBJECT, NOTES 全部通過 |
|
||
|
||
### 8. PDF 轉換
|
||
|
||
| 測試 | 結果 |
|
||
|---|---|
|
||
| Ghostscript 可用 | ✅ GPL Ghostscript 10.07.1 |
|
||
| 3 頁 PDF 轉換 | ✅ 1728×2291, 3 pages |
|
||
| 寬度 clamping (1734→1728) | ✅ 修正 US Letter 寬度溢位 |
|
||
| Pixel re-encoding | ✅ 超寬頁面自動裁切 |
|
||
|
||
### 9. 預覽功能
|
||
|
||
| 測試 | 結果 |
|
||
|---|---|
|
||
| preview 命令 | ✅ 產生 HTML 預覽, base64 內嵌圖片 |
|
||
|
||
### 10. API Server
|
||
|
||
| 端點 | 方法 | 結果 |
|
||
|---|---|---|
|
||
| `/api/health` | GET | ✅ 回傳 modem 狀態 + 佇列統計 |
|
||
| `/api/fax/send` | POST | ✅ 佇列工作成功 |
|
||
| `/api/fax/jobs` | GET | ✅ 列出所有工作 |
|
||
| `/api/fax/jobs/{id}` | GET | ✅ 取得工作詳情 |
|
||
| `/api/fax/jobs/{id}/cover` | PUT | ✅ 更新封面頁欄位 (含中文) |
|
||
| `/api/fax/jobs/{id}/retry` | POST | ✅ 重設為 Queued 狀態 |
|
||
| `/api/fax/jobs/{id}` | DELETE | ✅ 取消工作 |
|
||
| Worker 自動啟動 | — | ✅ 收到佇列任務後自動撥號傳輸 |
|
||
|
||
### 11. ⭐ 正式外線傳真測試 (Real-World)
|
||
|
||
| 項目 | V90 (2748****) | USR5637 (2528****) |
|
||
|---|---|---|
|
||
| **目的地** | 2515**** | 2515**** |
|
||
| **協定** | Class 1 | Class 1 |
|
||
| **解析度** | Fine (196 LPI) | Fine (196 LPI) |
|
||
| **談判速率** | V.17 12000 bps | V.17 12000 bps |
|
||
| **頁數** | 4/4 | 4/4 |
|
||
| **時間** | ~2:33 | ~2:26 |
|
||
| **DIS 收到** | ✅ | ✅ (跳過 NSF/CSI 直接收到) |
|
||
| **DCS + TCF 發送** | ✅ | ✅ |
|
||
| **CFR 確認** | ✅ | ✅ |
|
||
| **每頁 MCF** | ✅ 4/4 | ✅ 4/4 |
|
||
| **EOP + DCN** | ✅ | ✅ |
|
||
| **遠端確認收到** | ✅ **確認收到** | ✅ **確認收到** |
|
||
|
||
#### 傳輸時序 (V90)
|
||
|
||
```
|
||
01:17:47 撥號開始
|
||
01:18:04 連線建立 (CONNECT)
|
||
01:18:13 DIS 收到 → V17_12000 談判
|
||
01:18:19 CFR 確認 → Page 1 開始 (14,217 bytes)
|
||
01:18:29 Page 1 完成 → MCF
|
||
01:18:33 Page 2 開始 (49,391 bytes)
|
||
01:19:06 Page 2 完成 → MCF
|
||
01:19:10 Page 3 開始 (43,273 bytes)
|
||
01:19:39 Page 3 完成 → MCF
|
||
01:19:43 Page 4 開始 (49,558 bytes)
|
||
01:20:16 Page 4 完成 → MCF
|
||
01:20:20 EOP → MCF → DCN
|
||
01:20:22 傳輸完成
|
||
```
|
||
|
||
### 12. 單元測試
|
||
|
||
```
|
||
test result: ok. 13 passed; 0 failed; 0 ignored
|
||
```
|
||
|
||
| 測試名稱 | 結果 |
|
||
|---|---|
|
||
| test_compute_fcs | ✅ |
|
||
| test_compute_fcs_known | ✅ |
|
||
| test_hdlc_build_and_parse | ✅ |
|
||
| test_dle_roundtrip | ✅ |
|
||
| test_dle_unstuff_stops_at_dle_etx | ✅ |
|
||
| test_parse_hdlc_strips_dle_etx_and_trailing_crlf | ✅ |
|
||
| test_parse_hdlc_with_dle_in_fif | ✅ |
|
||
| test_t4_group4_decode_simple | ✅ |
|
||
| test_document_from_image | ✅ |
|
||
| test_mh_encode_decode_roundtrip | ✅ |
|
||
| test_mh_encode_single_line | ✅ |
|
||
| test_mh_encode_all_white | ✅ |
|
||
| test_mh_encode_all_black | ✅ |
|
||
|
||
### 13. Clippy 品質
|
||
|
||
```
|
||
lib: 6 warnings (pre-existing: deprecated base64, unused config fields)
|
||
bin: 3 warnings (pre-existing: too-many-args, clone ref)
|
||
```
|
||
|
||
本次修改引入的警告已全部修正: 0 new warnings.
|
||
|
||
## 已知限制
|
||
|
||
| 項目 | 說明 |
|
||
|---|---|
|
||
| Class 2 (V90) | 發送失敗 — FDT 返回 OK 但內部 T.30 協定失敗 (FHNG:025) |
|
||
| 解析度旗標 | `-r` 參數僅影響 PDF/GS 轉換,對已有 TIFF 無效 |
|
||
| Worker 設定 | 使用舊版 `FaxConfig`,尚未整合至新版 `AppConfig` |
|
||
|
||
## 結論
|
||
|
||
**Telfax V1.0 第一版正式通過全部測試。**
|
||
|
||
- 單頁 / 多頁迴圈測試: 100% 像素吻合
|
||
- 正式外線傳真: 兩台 modem (USR5637 + V90) 皆成功送達 2515****
|
||
- 4 頁完整傳輸,V.17 12000 bps,全程無錯誤
|
||
- API Server、Worker、封面頁、OCR 驗證、PDF 轉換、預覽功能全部正常
|
||
- 13 項單元測試全部通過
|