Files
telfax/docs/PHASE10_V1_TEST_REPORT.md
T
Warren 55bca92691 V1.0: Class 1 fax — real-world 4-page send to external number confirmed
Core features:
- Class 1 T.30 protocol: full send/receive implementation
- HDLC: DLE-stuffing, FCS strip, USR5637 bit-reversal handling
- T.4 MH encoder/decoder (1728px A4 standard)
- Document pipeline: PDF (Ghostscript), PNG, TIFF input
- Width clamping: US Letter 1734px → 1728px fax standard
- Cover page: CJK rasterization (TW/CN/JP/EN), TIFF + HTML output
- OCR verification: Tesseract 5 with eng+chi_tra, CJK space-tolerant
- API server (axum): health, send, jobs, cover, retry, cancel
- Background worker: auto-poll queue, speed fallback, retry policy
- Modem detection, pool management

Real-world test results (2026-07-23):
- V90 → 25153038: 4 pages, V.17 12000 bps, 2:33 ✅
- USR5637 → 25153038: 4 pages, V.17 12000 bps, 2:26 ✅
- Both faxes confirmed received on remote machine

Tested: loopback (100% pixel match), multi-page, all input formats,
cover pages, OCR verify, API endpoints, worker processing.
13 unit tests pass, 0 new clippy warnings.
2026-07-24 18:47:15 +08:00

188 lines
5.9 KiB
Markdown
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.
# Telfax 測試報告 — V1.0 正式版
## 測試日期
2026-07-23
## 測試環境
| 項目 | 規格 |
|---|---|
| **主機** | macOS, Apple Silicon |
| **Modem 1** | Agere USR5637 USB (`/dev/cu.usbmodem00000021`), 電話: 25289852 |
| **Modem 2** | CONEXANT V90 CX93001 USB (`/dev/cu.usbmodem123456781`), 電話: 27486656 |
| **電話線路** | 兩條獨立 POTS 線路 |
| **遠端傳真機** | 電話: 25153038 |
| **作業系統** | 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 (27486656) | USR5637 (25289852) |
|---|---|---|
| **目的地** | 25153038 | 25153038 |
| **協定** | 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) 皆成功送達 25153038
- 4 頁完整傳輸,V.17 12000 bps,全程無錯誤
- API Server、Worker、封面頁、OCR 驗證、PDF 轉換、預覽功能全部正常
- 13 項單元測試全部通過