* Add near-miss diagnostics and request count/unmatched admin endpoints (#171)
Add IWireMockServer.FindUnmatchedLogEntries, FindNearMisses and
FindNearMissesForUnmatchedRequests, which rank the mappings that
partially match a request by score.
Expose them through the admin API (POST requests/count,
GET requests/unmatched, GET requests/unmatched/near-misses and
GET requests/{guid}/near-misses), the RestClient and the OpenAPI document.
* Make scenario delay tests independent of server warm-up time
The two *_StateTransitions_BeforeDelayCompletes tests waited a fixed
100 ms for the scenario state to change, which fails on a cold server.
Poll server.Scenarios until the expected state is reached instead.
---------
Co-authored-by: Mattias <13809209+Quattordici@users.noreply.github.com>
- Add WireMockServerSettings.ScribanRegistrationCallback
(Action<object, IFileSystemHandler>?) so code-configured servers can add
functions, objects or variables to Scriban and Scriban-DotLiquid templates.
- Pass the settings to ScribanContextFactory, which invokes the callback with
a new ScriptObject per transformer context.
- Push the custom globals beneath the template model in ScribanContext so
request, response, mapping and data take precedence; keep the original
Template.Render call when no callback is configured.
- Add the strongly typed WithScribanRegistration extension method.
- Add a Scriban example to the .NET 8 console app.
- Make the proxy tests use a local target server instead of www.google.com,
and skip the IPv6 loopback test when the OS has no IPv6 support.
Co-authored-by: Mattias <13809209+Quattordici@users.noreply.github.com>
* Fix DateTime in Response
* // Set the DateTime from the Response to the current DateTime
---------
Co-authored-by: Stef Heyenrath <stef.heyenrath@apg.nl>
* Fix FormUrlEncodedMatcher
* tests
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* fix comments
---------
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* feat(request matchers): Add support for early mismatch in mapping processing
* test(request matchers): Add unit test for early mismatch functionality
* test(grpc): Add test for grpc requests early mismatch and error logging (Issue #1442)
* feat(request matchers): RequestMatcherType
Add `RequestMatcherType` to request matchers for improved type
identification
Closes#1442
* refactor(request matchers): Request
Replace `EarlyMatcherSelector` with `EarlyMatcherType` for improved
clarity and consistency
Closes#1442
* feat(request): conversion
Add EarlyMatcherType support in request models and mapping conversion
Closes#1442
* test(mapping): new tests
add unit tests for EarlyMatcherType in mapping conversion and
serialization
Closes#1442
* refactor(request matchers): RequestMessageEarlyMatcher
Replaced inline `EarlyMatcherType` logic with the new
`RequestMessageEarlyMatcher` class to support cases when several
matchers of the same type are present. For instance - Header, Cookie,
Param
Closes#1442
* test(request matchers): Early Mismatch
add unit tests for early mismatch scenarios with several matchers of
same type. Currently, headers and parameters
Closes#1442
* refactor(mapping): RequestModel.EarlyMatcherType
use fully qualified enum for EarlyMatcherType in serialization
Closes#1442
* style(review): fixes
- removed unused method
- added missing curly brackets
Closes#1442
* feat/1421 added feature to enable and disable mappings
* feat/1421 updated test constants to reflect 2 new admin endpoints /enable and /disable
* feat/1421 updated tests to fix flakyness - removed delay before assertion that is causing upstream connection from proxy to teardown prematurely before test ends
* feat/1421 addressing PR comments - Updated logic to represent IsDisable insted of IsEnabled
* Move ScenarioState to Abstractions and add IScenarioStateStore interface
ScenarioState is moved to the Abstractions project so it can be referenced
by the new IScenarioStateStore interface. The interface defines the contract
for storing and retrieving scenario states, enabling distributed implementations.
* Add InMemoryScenarioStateStore default implementation
Wraps ConcurrentDictionary with OrdinalIgnoreCase comparer, preserving
exact current behavior. The Update method encapsulates read-modify-write
so distributed implementations can make it atomic.
* Wire IScenarioStateStore into middleware options, settings, and consumers
Replace direct ConcurrentDictionary<string, ScenarioState> usage with
IScenarioStateStore across all consumer files. The store is injectable
via WireMockServerSettings.ScenarioStateStore, defaulting to the
InMemoryScenarioStateStore for backward compatibility.
* Add FileBasedScenarioStateStore for persistent scenario state
In-memory ConcurrentDictionary backed by JSON file persistence in
__admin/scenarios/. Reads from cache, mutations write through to disk.
Constructor loads existing state from disk on startup.
* Make ScenarioStateStore non-nullable with default InMemoryScenarioStateStore
Move InMemoryScenarioStateStore from WireMock.Net.Minimal to
WireMock.Net.Shared so it lives alongside WireMockServerSettings.
This allows WireMockServerSettings.ScenarioStateStore to be
non-nullable with a default value, following the same pattern as
DefaultJsonSerializer. The null-coalescing fallback in
WireMockMiddlewareOptionsHelper is no longer needed.
* Update aspire to 13.1 (examples + code)
Allows usage of aspire CLI which is very useful for dev in codespaces (for my next PR).
* Add OTEL support
* Initial PR feedback
* PR feedback
* PR feedback
* PR feedback
* Cleanup.
* Cleanup
* Fix
* Fix
* Rename stuff around to be more accurate
* PR feedback
* Update WireMock.Net.OpenTelemetry.csproj
Update <Authors>
* PR feedback parser
* PR feedback package versions
* Status code feedback.
* Update preprocessor directives to to Activity Tracing instead of OpenTelemetry. Is more descriptive.
* Add tests
* Improve tests
---------
Co-authored-by: Stef Heyenrath <Stef.Heyenrath@gmail.com>
Pass AllowedHandlebarsHelpers configuration to Handlebars.Net.Helpers so that optional handlebars helpers can be enabled.
Co-authored-by: Sam Latham <sam.latham@citrix.com>
* Add property UseHttp2 to WireMockServerArguments
* .
* additionalUrls
* ok?
* WireMockServerArguments
* fx
* AddProtoDefinition
* ...
* FIX
* Always add the lifecycle hook to support dynamic mappings and proto definitions