Skip to content

Commit ed521e9

Browse files
Merge pull request #101 from dotindustries/feat/add-signal-handling-integration-tests-for-us-110-ez0j5nzv298zvqutxsoasuf4
feat: add signal handling integration tests (US-110)
2 parents ec3e250 + cd8d1f7 commit ed521e9

File tree

16 files changed

+868
-27
lines changed

16 files changed

+868
-27
lines changed

.codegraph/config.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@
2323
"**/*.kts",
2424
"**/*.dart",
2525
"**/*.svelte",
26-
"**/*.liquid"
26+
"**/*.liquid",
27+
"**/*.pas",
28+
"**/*.dpr",
29+
"**/*.dpk",
30+
"**/*.lpr",
31+
"**/*.dfm",
32+
"**/*.fmx"
2733
],
2834
"exclude": [
2935
"**/.git/**",
@@ -101,6 +107,9 @@
101107
"**/xcuserdata/**",
102108
"**/Carthage/Build/**",
103109
"**/SourcePackages/**",
110+
"**/__history/**",
111+
"**/__recovery/**",
112+
"**/*.dcu",
104113
"**/.composer/**",
105114
"**/storage/framework/**",
106115
"**/bootstrap/cache/**",

crates/warp-runtime/src/instance.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ mod tests {
170170
filesystem: None,
171171
dns: None,
172172
db_proxy: None,
173-
signal_queue: Vec::new(),
173+
signals: warpgrid_host::signals::host::SignalsHost::new(),
174174
threading_model: None,
175175
limiter: Some(limits),
176176
};

crates/warpgrid-host/src/engine.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use crate::dns::host::DnsHost;
2929
use crate::dns::DnsResolver;
3030
use crate::filesystem::host::FilesystemHost;
3131
use crate::filesystem::VirtualFileMap;
32+
use crate::signals::host::SignalsHost;
3233

3334
/// Per-instance host state.
3435
///
@@ -39,8 +40,8 @@ pub struct HostState {
3940
pub filesystem: Option<FilesystemHost>,
4041
pub dns: Option<DnsHost>,
4142
pub db_proxy: Option<DbProxyHost>,
42-
/// Pending signal queue (FIFO).
43-
pub signal_queue: Vec<shim::signals::SignalType>,
43+
/// Signal handling: interest registration, bounded queue, and filtering.
44+
pub signals: SignalsHost,
4445
/// Declared threading model (set by guest).
4546
pub threading_model: Option<shim::threading::ThreadingModel>,
4647
/// Optional resource limiter for memory/table enforcement.
@@ -94,16 +95,11 @@ impl shim::dns::Host for HostState {
9495

9596
impl shim::signals::Host for HostState {
9697
fn on_signal(&mut self, signal: shim::signals::SignalType) -> Result<(), String> {
97-
self.signal_queue.push(signal);
98-
Ok(())
98+
self.signals.on_signal(signal)
9999
}
100100

101101
fn poll_signal(&mut self) -> Option<shim::signals::SignalType> {
102-
if self.signal_queue.is_empty() {
103-
None
104-
} else {
105-
Some(self.signal_queue.remove(0))
106-
}
102+
self.signals.poll_signal()
107103
}
108104
}
109105

@@ -273,7 +269,7 @@ impl WarpGridEngine {
273269
filesystem,
274270
dns,
275271
db_proxy,
276-
signal_queue: Vec::new(),
272+
signals: SignalsHost::new(),
277273
threading_model: None,
278274
limiter: None,
279275
}
@@ -341,7 +337,7 @@ mod tests {
341337
filesystem: None,
342338
dns: None,
343339
db_proxy: None,
344-
signal_queue: Vec::new(),
340+
signals: SignalsHost::new(),
345341
threading_model: None,
346342
limiter: None,
347343
};
@@ -355,19 +351,25 @@ mod tests {
355351
}
356352

357353
#[test]
358-
fn signal_queue_fifo() {
354+
fn signal_fifo() {
359355
let mut state = HostState {
360356
filesystem: None,
361357
dns: None,
362358
db_proxy: None,
363-
signal_queue: Vec::new(),
359+
signals: SignalsHost::new(),
364360
threading_model: None,
365361
limiter: None,
366362
};
367363

364+
// Register interest in both signal types via the Host trait
368365
shim::signals::Host::on_signal(&mut state, shim::signals::SignalType::Terminate).unwrap();
369366
shim::signals::Host::on_signal(&mut state, shim::signals::SignalType::Hangup).unwrap();
370367

368+
// Deliver signals via the host-side API
369+
state.signals.deliver_signal(shim::signals::SignalType::Terminate);
370+
state.signals.deliver_signal(shim::signals::SignalType::Hangup);
371+
372+
// Poll via the Host trait — should return FIFO order
371373
assert_eq!(
372374
shim::signals::Host::poll_signal(&mut state),
373375
Some(shim::signals::SignalType::Terminate)
@@ -392,7 +394,7 @@ mod tests {
392394
filesystem: None,
393395
dns: None,
394396
db_proxy: None,
395-
signal_queue: Vec::new(),
397+
signals: SignalsHost::new(),
396398
threading_model: None,
397399
limiter: None,
398400
};

crates/warpgrid-host/tests/integration_async_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ fn minimal_host_state() -> HostState {
120120
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
121121
dns: None,
122122
db_proxy: None,
123-
signal_queue: Vec::new(),
123+
signals: warpgrid_host::signals::host::SignalsHost::new(),
124124
threading_model: None,
125125
limiter: None,
126126
}

crates/warpgrid-host/tests/integration_fs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ fn test_host_state(etc_hosts: &str) -> HostState {
101101
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
102102
dns: None,
103103
db_proxy: None,
104-
signal_queue: Vec::new(),
104+
signals: warpgrid_host::signals::host::SignalsHost::new(),
105105
threading_model: None,
106106
limiter: None,
107107
}

crates/warpgrid-host/tests/integration_multi_service.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ fn gateway_host_state(runtime_handle: &tokio::runtime::Handle) -> HostState {
290290
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
291291
dns: Some(DnsHost::new(cached, runtime_handle.clone())),
292292
db_proxy: None,
293-
signal_queue: Vec::new(),
293+
signals: warpgrid_host::signals::host::SignalsHost::new(),
294294
threading_model: None,
295295
limiter: None,
296296
}
@@ -318,7 +318,7 @@ fn postgres_host_state(
318318
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
319319
dns: None,
320320
db_proxy: Some(DbProxyHost::new(pool_manager, runtime_handle.clone())),
321-
signal_queue: Vec::new(),
321+
signals: warpgrid_host::signals::host::SignalsHost::new(),
322322
threading_model: None,
323323
limiter: None,
324324
}
@@ -346,7 +346,7 @@ fn redis_host_state(
346346
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
347347
dns: None,
348348
db_proxy: Some(DbProxyHost::new(pool_manager, runtime_handle.clone())),
349-
signal_queue: Vec::new(),
349+
signals: warpgrid_host::signals::host::SignalsHost::new(),
350350
threading_model: None,
351351
limiter: None,
352352
}
@@ -735,7 +735,7 @@ async fn service_error_includes_source_service_header() {
735735
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
736736
dns: Some(DnsHost::new(cached, runtime_handle.clone())),
737737
db_proxy: None,
738-
signal_queue: Vec::new(),
738+
signals: warpgrid_host::signals::host::SignalsHost::new(),
739739
threading_model: None,
740740
limiter: None,
741741
};
@@ -795,7 +795,7 @@ async fn dns_failure_populates_error_source() {
795795
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
796796
dns: Some(DnsHost::new(cached, runtime_handle.clone())),
797797
db_proxy: None,
798-
signal_queue: Vec::new(),
798+
signals: warpgrid_host::signals::host::SignalsHost::new(),
799799
threading_model: None,
800800
limiter: None,
801801
};

crates/warpgrid-host/tests/integration_rust_async_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ fn host_state_with_dns() -> HostState {
128128
filesystem: Some(FilesystemHost::new(Arc::new(file_map))),
129129
dns: Some(dns),
130130
db_proxy: None,
131-
signal_queue: Vec::new(),
131+
signals: warpgrid_host::signals::host::SignalsHost::new(),
132132
threading_model: None,
133133
limiter: None,
134134
}

0 commit comments

Comments
 (0)