Example #1
0
        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());
        }