• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Alan-Jowett / sonde / 23980109370
81%
main: 81%

Build:
Build:
LAST BUILD BRANCH: test/e2e-handler-routing
DEFAULT BRANCH: main
Ran 04 Apr 2026 01:47PM UTC
Jobs 1
Files 83
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

04 Apr 2026 01:43PM UTC coverage: 80.749% (-0.3%) from 81.026%
23980109370

push

github

web-flow
fix: always initialize HandlerRouter from DB (GW-1407) (#643)

* fix: always initialize HandlerRouter from DB (GW-1407)

DB-stored handlers added via `sonde-admin handler add` were never
wired to the gateway engine's `HandlerRouter`. The router was only
created when `--handler-config` was provided, so `handle_app_data_core()`
returned `None` at `self.handler_router.as_ref()?` and APP_DATA frames
were silently dropped.

Changes:

**Requirements** (gateway-requirements.md):
- Add GW-1407: gateway MUST always initialize `HandlerRouter` from
  DB at startup, wrapped in `Arc<tokio::sync::RwLock<HandlerRouter>>`
  shared between engine and admin service.
- Add GW-1404 AC5: `ImportState` MUST trigger live reload.
- Add GW-1405 AC5: after bootstrap, router built from DB (YAML is seed).

**Design** (gateway-design.md):
- Update D-485 shared-state pattern to include `HandlerRouter`.
- Update startup sequence steps 6-7 to reference GW-1407.
- Add `ImportState` as a reload trigger in section 19.5.
- Fix pre-existing cross-reference errors (18.6->19.6, 18.5->19.5).

**Implementation**:
- `handler.rs`: add `PartialEq` for `HandlerConfig`/`ProgramMatcher`,
  add `HandlerRouter::reload()` (diffs configs, reuses unchanged
  processes, gracefully shuts down removed handlers with 5s timeout),
  add `HandlerProcess::graceful_shutdown()`.
- `engine.rs`: change `handler_router` from `Option<Arc<HandlerRouter>>`
  to `Arc<tokio::sync::RwLock<HandlerRouter>>`. Update constructors,
  remove `set_handler_router()`. All routing acquires read lock.
- `admin.rs`: add shared router field + `with_handler_router()` builder.
  `reload_handler_configs()` now live-reloads the shared router.
  `import_state` triggers reload after replacing handlers (GW-1404 AC5).
- `gateway.rs`: unified startup — bootstrap YAML to DB first if
  provided, then always build router from DB. Pass shared router to
  both `Gateway` and `AdminService`.

**Validation** (gateway-validation.md, e2e-validation.md)... (continued)

47 of 185 new or added lines in 5 files covered. (25.41%)

18 existing lines in 3 files now uncovered.

19676 of 24367 relevant lines covered (80.75%)

148.18 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
1
78.09
0.03% crates/sonde-e2e/src/harness.rs
6
63.79
-0.6% crates/sonde-gateway/src/admin.rs
36
0.0
0.0% crates/sonde-gateway/src/bin/gateway.rs
37
86.62
1.34% crates/sonde-gateway/src/engine.rs
58
65.38
-6.63% crates/sonde-gateway/src/handler.rs

Uncovered Existing Lines

Lines Coverage ∆ File
1
0.0
0.0% crates/sonde-gateway/src/bin/gateway.rs
1
86.62
1.34% crates/sonde-gateway/src/engine.rs
16
65.38
-6.63% crates/sonde-gateway/src/handler.rs
Jobs
ID Job ID Ran Files Coverage
1 23980109370.1 04 Apr 2026 01:47PM UTC 83
80.75
GitHub Action Run
Source Files on build 23980109370
  • Tree
  • List 83
  • Changed 5
  • Source Changed 5
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #23980109370
  • b9d23fd0 on github
  • Prev Build on main (#23970833457)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc