Summary
DeserializationGuard has no dedicated unit test file — only indirect coverage via
integration tests. Add Rasp.Core.Tests/Guard/DeserializationGuardTests.cs covering its own
block/audit/no-threat/no-op branches in isolation.
Background
Every *DetectionEngine has a dedicated test file; most Guard classes don't. This is one
of five identical-shaped issues — see docs/good-first-issues-dotnet.md for the full list
and the shared rationale (this is about naming concrete gaps, not chasing a coverage
percentage).
Pattern to copy
Rasp.Core.Tests/Guard/SqlSinkGuardTaintTests.cs — NoOpRaspMetrics fake, a real
RaspAlertBus, Options.Create(new RaspOptions {...}), NullLogger<T>.Instance.
What to test
AnalyzeType(Type? typeToDeserialize, context)
(src/Rasp.Core/Guard/DeserializationGuard.cs), gated by RaspOptions.BlockOnDetection:
Summary
DeserializationGuardhas no dedicated unit test file — only indirect coverage viaintegration tests. Add
Rasp.Core.Tests/Guard/DeserializationGuardTests.cscovering its ownblock/audit/no-threat/no-op branches in isolation.
Background
Every
*DetectionEnginehas a dedicated test file; mostGuardclasses don't. This is oneof five identical-shaped issues — see
docs/good-first-issues-dotnet.mdfor the full listand the shared rationale (this is about naming concrete gaps, not chasing a coverage
percentage).
Pattern to copy
Rasp.Core.Tests/Guard/SqlSinkGuardTaintTests.cs—NoOpRaspMetricsfake, a realRaspAlertBus,Options.Create(new RaspOptions {...}),NullLogger<T>.Instance.What to test
AnalyzeType(Type? typeToDeserialize, context)(
src/Rasp.Core/Guard/DeserializationGuard.cs), gated byRaspOptions.BlockOnDetection:RaspAlertBus, no exception thrown.RaspSecurityExceptionthrown, alert still pushed before the throw.nulltype never reaches the engine or calls_metrics.RecordInspection.