public void Should_perform_admirably() { var random = new Random(); _count = 50000; _updateValues = Enumerable.Range(0, _count) .Select(x => random.Next(1, 1000)) .Select(x => x > 960 ? 1000 : x) .Select(x => new UpdateValue(x, random.Next(1, 500000) / 100m)) .ToList(); var input = new ChannelAdapter(); using (input.Connect(x => { x.AddConsumerOf <UpdateValue>() .UsingInstance() .Of <TestInstance>() .DistributedBy(msg => msg.Id) .PersistUsingNHibernate() .UsingSessionProvider(m => SessionFactory.OpenSession()) .OnChannel(m => m.UpdateValueChannel) .CreateNewInstanceBy(m => new TestInstance(m.Id)); })) { var complete = new Future <int>(); var latch = new CountdownLatch(_count, complete.Complete); _stopwatch = Stopwatch.StartNew(); UpdateValue.SetReceivedCallback(x => latch.CountDown()); _updateValues.Each(input.Send); complete.WaitUntilCompleted(2.Minutes()).ShouldBeTrue(); _stopwatch.Stop(); } }
void HandleUpdateValue(UpdateValue m) { PreviousValues.Add(new PreviousValue(SystemUtil.UtcNow, Value)); Value += m.Value; m.MarkAsReceived(); }