A few Middleware functionality for Asp.Net Web Api Projects to simulate Resiliance problems
$ dotnet add package ResistanceIt is a library containing functions that create a chaotic environment for durability tests in web app environments.
In distributed systems, it is important that the whole is durable. The functions in this package can be added to an Asp.Net Runtime Middleware line. The following situations can be simulated in server or service environments.
By default, all simulation behaviors are disabled. These values can be enabled via appSettings. For more detailed settings, the Middleware function is used.
{
"ResistanceFlags": {
"NetworkFailureIsActive": true,
"LatencyIsActive": false,
"ResourceRaceIsActive": true,
"OutageIsActive": false,
"DataInconsistencyIsActive": false
}
}
Code example;
// For appSettings based options
builder.Services.Configure<ResistanceFlags>(builder.Configuration.GetSection("ResistanceFlags"));
app.UseResistance(new ResistanceOptions
{
// Network Failure (HTTP 500 Internal Service Error with %25 probility)
NetworkFailureProbability = NetworkFailureProbability.Percent25,
// For 5 requests coming from the same IP every 10 seconds, the HTTP 429 Too Many Requests scenario is generated.
ResourceRacePeriod = new ResourceRacePeriod
{
DueTime = TimeSpan.FromSeconds(5),
Period = TimeSpan.FromSeconds(5),
RequestLimit = 5
},
// Manipulating response data with %50 probability
DataInconsistencyProbability = DataInconsistencyProbability.Percent20,
// Produce HTTP 503 Service Unavailable 10 seconds per minute
OutagePeriod = new OutagePeriod
{
Duration = TimeSpan.FromSeconds(10),
Frequency = TimeSpan.FromMinutes(1)
},
// Latency 500 millisecdons - 2500 milliseconds
LatencyPeriod = new LatencyPeriod
{
MinDelayMs = TimeSpan.FromMilliseconds(500),
MaxDelayMs = TimeSpan.FromMilliseconds(2500)
}
});