public void sends_after_delay()
{
var metric = new Counting() { Name = "testMetric", ValueAsInt = 5 };
DateTime timeCalled = DateTime.MaxValue;
var udpStub = MockRepository.GenerateStub<IStatsdUDP>();
udpStub.Stub(x => x.Send(Arg<string>.Is.Anything))
.WhenCalled(m => timeCalled = DateTime.Now);
var sender = new ThreadSafeConsumerProducerSender(new ThreadSafeConsumerProducerSender.Configuration() { MaxSendDelayMS = 2000 });
sender.StatsdUDP = udpStub;
DateTime startTime = DateTime.Now;
sender.Send(metric);
Thread.Sleep(3000);
IList<object[]> argsPerCall = udpStub.GetArgumentsForCallsMadeOn(x => x.Send(Arg<string>.Is.Anything));
Assert.That(argsPerCall.Count, Is.EqualTo(1));
Assert.That(((string)argsPerCall[0][0]), Is.EqualTo(metric.Command));
var sendDelay = (timeCalled - startTime).TotalMilliseconds;
Assert.That(sendDelay, Is.GreaterThanOrEqualTo(2000));
}