public void ProcessSlaTimeouts_should_be_thread_safe() { var actionsCount = 50000; var groupSize = 100; var messagesInGroup = groupSize - 1; SlaDefinitionBuilder.AddSla <Request, Response>(TimeSpan.FromTicks(1), r => r.Id, r => r.Id, _slaProvider); _slaProcessor = new TestableSlaProcessor(_slaProvider, actionsCount); Action purge = () => _slaProcessor.ProcessSlaTimeouts(); Action add = () => _slaProcessor.ProcessOutgoingMessage(new Request { Id = Guid.NewGuid() }); Enumerable.Range(0, actionsCount) .Select(index => ((index % groupSize) >= messagesInGroup) ? purge : add) .AsParallel() .WithDegreeOfParallelism(64) .ForAll(action => action.Invoke()); _slaProcessor.ProcessSlaTimeouts(); var expectedMessagesCount = messagesInGroup * actionsCount / groupSize; Assert.That(_slaProcessor.Timeouts.Count, Is.EqualTo(expectedMessagesCount), "Processor should timeout all messages"); }
public void ProcessSlaTimeouts_should_remove_requests_only_if_the_longest_sla_timed_out() { var lowerSlaInMs = 20; var higherSlaInMs = 50; var slaMultiplier = 2; var lowerTimeout = lowerSlaInMs * slaMultiplier + WaitDeltaMs; var higherTimeout = higherSlaInMs * slaMultiplier + WaitDeltaMs; SlaDefinitionBuilder .For <Request>(req => req.Id) .AddSla <Response>(TimeSpan.FromMilliseconds(lowerSlaInMs), rsp => rsp.Id) .AddSla <Response2>(TimeSpan.FromMilliseconds(higherSlaInMs), rsp => rsp.Id) .Configure(_slaProvider); _slaProcessor = new TestableSlaProcessor(_slaProvider); _slaProcessor.ProcessOutgoingMessage(new Request { Id = Guid.NewGuid() }); Thread.Sleep(lowerTimeout); _slaProcessor.ProcessSlaTimeouts(); Assert.That(_slaProcessor.Timeouts.Count, Is.EqualTo(0), "None of messages should time out yet"); Thread.Sleep(higherTimeout - lowerSlaInMs); _slaProcessor.ProcessSlaTimeouts(); Assert.That(_slaProcessor.Timeouts.Count, Is.EqualTo(1), "Message should time out now"); }
public void ProcessSlaTimeouts_should_remove_all_timedout_requests() { var slaInMs = 50; var slaMultiplier = 2; SlaDefinitionBuilder.AddSla <Request, Response>(TimeSpan.FromMilliseconds(slaInMs), req => req.Id, rsp => rsp.Id, _slaProvider); SlaDefinitionBuilder.AddSla <Request2, Response2>(TimeSpan.FromMinutes(2), req => req.Id, rsp => rsp.Id, _slaProvider); _slaProcessor = new TestableSlaProcessor(_slaProvider); _slaProcessor.ProcessOutgoingMessage(new Request { Id = Guid.NewGuid() }); _slaProcessor.ProcessOutgoingMessage(new Request { Id = Guid.NewGuid() }); _slaProcessor.ProcessOutgoingMessage(new Request2 { Id = Guid.NewGuid() }); _slaProcessor.ProcessOutgoingMessage(new Request2 { Id = Guid.NewGuid() }); _slaProcessor.ProcessSlaTimeouts(); Assert.That(_slaProcessor.Timeouts.Count, Is.EqualTo(0), "None of messages should time out yet"); Thread.Sleep(TimeSpan.FromMilliseconds(slaInMs * slaMultiplier + WaitDeltaMs)); _slaProcessor.ProcessSlaTimeouts(); Assert.That(_slaProcessor.Timeouts.Count, Is.EqualTo(2), "Two messages should timeout"); Assert.That(_slaProcessor.Timeouts.Count(m => m.Item1.Type == typeof(Request)), Is.EqualTo(2), "Messages of Request type should timeout"); }
public void SlaDefinition_ToString_should_return_meaningful_information() { var provider = new SlaProvider(); SlaDefinitionBuilder.AddSla <IRequest, IResponse>(TimeSpan.FromSeconds(1), r => r.RequestId, r => r.ResponseId, provider); Assert.That(provider.Definitions.First().ToString(), Is.EqualTo("Wonga.SLAMonitor.Tests.Asynchronous.SlaDefinitionBuilderTests+IRequest -> Wonga.SLAMonitor.Tests.Asynchronous.SlaDefinitionBuilderTests+IResponse: 00:00:01")); }
public void SetUp() { _provider = new SlaProvider(); SlaDefinitionBuilder.For <Request>(r => r.Id) .AddSla <Response>(_sla, r => r.Id) .Configure(_provider); _appender = InjectInMemoryAppender(); }
private void ConfigureSla() { SlaDefinitionBuilder.For <Request>(r => r.Id) .AddSla <Response>(TimeSpan.FromSeconds(1), r => r.Id) .AddSla <ErrorResponse>(TimeSpan.FromSeconds(1), r => r.Id) .Configure(_slaProvider); SlaDefinitionBuilder.For <Request2>(r => r.Id) .AddSla <Response2>(TimeSpan.FromSeconds(1), r => r.Id) .AddSla <ErrorResponse2>(TimeSpan.FromSeconds(1), r => r.Id) .Configure(_slaProvider); }
public void It_should_create_definitions() { var provider = new SlaProvider(); SlaDefinitionBuilder.For <IRequest>(x => x.RequestId) .AddSla <IResponse>(TimeSpan.FromSeconds(1), x => x.ResponseId) .AddSla <IErrorResponse>(TimeSpan.FromSeconds(2), x => x.ResponseId) .Configure(provider); Assert.That(provider.GetRequestDefinitions(new Mock <IRequest>().Object).Count(), Is.EqualTo(1), "request mapping"); Assert.That(provider.GetSlaDefinitionsFor(new Mock <IResponse>().Object).Single().Sla, Is.EqualTo(TimeSpan.FromSeconds(1))); Assert.That(provider.GetSlaDefinitionsFor(new Mock <IErrorResponse>().Object).Single().Sla, Is.EqualTo(TimeSpan.FromSeconds(2))); }