| 05-cable-test-integration |
01 |
testing |
| go |
| tester |
| mock |
| usb |
| cable-testing |
| interface |
| streaming |
| channels |
|
| phase |
provides |
| 04-usb-manager-label-printing |
DeviceRole, DeviceSpec, KnownDevices map in internal/usb/device.go |
|
|
| TesterDriver interface (Connect/Read/Disconnect) |
| StreamingTesterDriver interface (embeds TesterDriver + Stream()) |
| TestResult struct with all cable measurement fields |
| LiveReading struct for streaming power/protocol data |
| MockUSBDriver, MockDPDriver, MockHDMIDriver (deterministic discrete mocks) |
| MockFNB58Driver (streaming mock with context-based cancellation) |
| KnownDevices extended with 4 RoleCableTester placeholder entries |
|
| 05-02-backend-endpoints |
| 05-03-cable-test-ui |
| 06-real-driver-impl |
|
| added |
patterns |
|
|
| TDD red-green for Go interface + mock drivers |
| context.WithCancel for goroutine lifetime in streaming drivers |
| Buffered channel (size 8) with pre-closed channel idiom for Stream() before Connect() |
| Idempotent Disconnect() via bool guard |
| Compile-time interface assertions: var _ Interface = (*Impl)(nil) |
|
|
| created |
modified |
| internal/tester/driver.go |
| internal/tester/mock_drivers.go |
| internal/tester/driver_test.go |
|
|
|
| MockFNB58Driver.Stream() before Connect() returns pre-closed channel (not nil) — avoids nil-channel deadlock risk in callers |
| FNB58 goroutine uses context.WithCancel stored on struct so Disconnect() cancels early — satisfies T-05-02 DoS mitigation |
| Placeholder VID:PIDs use dead0:000N pattern — easy to grep, clearly fake, TODO comment dated 2026-04-13 |
| StreamingTesterDriver embeds TesterDriver — real FNB58 driver must satisfy both Read() and Stream() |
|
| Streaming driver pattern: Connect() launches goroutine, stores cancelFunc, Disconnect() cancels it |
| Mock driver struct has single bool connected field — minimal state for test clarity |
| Pre-closed channel idiom: ch := make(chan T); close(ch); return ch — for not-ready Stream() |
|
| CBL-01 |
| CBL-02 |
| CBL-03 |
| CBL-04 |
| CBL-07 |
|
12min |
2026-04-10 |