public async Task should_handle_directory_events_during_the_register() { await RegisterSelf(); var otherPeerDescriptor = _otherPeer.ToPeerDescriptor(true, typeof(FakeCommand), typeof(FakeEvent)); otherPeerDescriptor.TimestampUtc = default(DateTime); var peerStarted = new PeerStarted(otherPeerDescriptor); var peerStopped = new PeerStopped(_otherPeer); _bus.AddHandler <RegisterPeerCommand>(x => { var peerDescriptor = _otherPeer.ToPeerDescriptor(true); _directory.Handle(new PeerSubscriptionsForTypesUpdated(_otherPeer.Id, DateTime.UtcNow.AddTicks(1), new MessageTypeId(typeof(FakeEvent)), BindingKey.Empty)); return(new RegisterPeerResponse(new[] { peerDescriptor })); }); var taskStarted = new ManualResetEvent(false); var task = Task.Run(() => { taskStarted.Set(); for (var i = 0; i < 10000; i++) { _directory.Handle(peerStarted); _directory.Handle(peerStopped); } }).WaitForActivation(); taskStarted.WaitOne(5.Seconds()).ShouldBeTrue("Task should be started"); await _directory.RegisterAsync(_bus, _self, otherPeerDescriptor.Subscriptions).ConfigureAwait(true); task.Wait(5.Seconds()).ShouldBeTrue(); }
public void should_handle_directory_events_during_the_register() { var otherPeerDescriptor = _otherPeer.ToPeerDescriptor(true, typeof(FakeCommand), typeof(FakeEvent)); otherPeerDescriptor.TimestampUtc = default(DateTime); var peerStarted = new PeerStarted(otherPeerDescriptor); var peerStopped = new PeerStopped(_otherPeer); _bus.AddHandler <RegisterPeerCommand>(x => { var peerDescriptor = _otherPeer.ToPeerDescriptor(true); _directory.Handle(new PeerSubscriptionsForTypesUpdated(_otherPeer.Id, DateTime.UtcNow.AddTicks(1), new MessageTypeId(typeof(FakeEvent)), BindingKey.Empty)); return(new RegisterPeerResponse(new[] { peerDescriptor })); }); var task = Task.Run(() => { for (var i = 0; i < 10000; i++) { _directory.Handle(peerStarted); _directory.Handle(peerStopped); } }); Wait.Until(() => task.Status == TaskStatus.Running || task.Status == TaskStatus.RanToCompletion, 1.Second()); _directory.Register(_bus, _self, otherPeerDescriptor.Subscriptions); task.Wait(1.Second()); }