Ejemplo n.º 1
0
        public void construct()
        {
            var md = BusinessEventMetadata.Empty;
            var e  = new TestBusinessEvent(md);

            Assert.Equal(md, e._Metadata);
        }
Ejemplo n.º 2
0
        public async Task await_throttle_and_run_handler_when_stream_state_does_not_have_error()
        {
            var cts                    = new CancellationTokenSource();
            var mockAwaiter            = new Mock <IHandlingManagerAwaiter>();
            var mockTaskCollection     = new Mock <IHandlingManagerTaskCollection>();
            var mockQueue              = new Mock <IHandlingQueue>();
            var mockStreamStateRepo    = new Mock <IStreamStateRepo>();
            var mockHandlerRunner      = new Mock <IHandlingManagerHandlerRunner>();
            var manager                = new HandlingManager(NullStandardLogger.Instance, mockAwaiter.Object, mockStreamStateRepo.Object, mockQueue.Object, mockHandlerRunner.Object, mockTaskCollection.Object);
            var businessEvent          = new TestBusinessEvent();
            var subscriberEvent        = new SubscriberEvent(null, null, 0, null, null);
            var parallelKey            = "x";
            var queueItem              = new HandlingQueueItem(parallelKey, subscriberEvent);
            var streamState            = new StreamState(0, false);  // Does NOT have error.
            var awaitingThrottleSignal = new ManualResetEventSlim(false);

            mockQueue.Setup(x => x.IsEventsAvailable).Returns(true);
            mockQueue.Setup(x => x.TryDequeue(It.IsAny <IList <string> >())).Returns(queueItem);
            mockQueue.Setup(x => x.AwaitEnqueueSignalAsync()).Callback(() => cts.Cancel()).Returns(Task.CompletedTask);             // Ensures manager can't get into an infinite loop.
            mockStreamStateRepo.Setup(x => x.LoadStreamStateAsync(It.IsAny <string>())).ReturnsAsync(streamState);
            mockAwaiter.Setup(x => x.AwaitThrottleAsync()).Callback(() => awaitingThrottleSignal.Set()).Returns(Task.CompletedTask);
            mockHandlerRunner.Setup(x => x.TryRunHandlerAsync(It.IsAny <SubscriberEvent>(), It.IsAny <CancellationToken>())).Callback(() => cts.Cancel()).Returns(Task.CompletedTask);

            var manageTask = manager.ManageAsync(cts.Token);

            var timeoutToken1 = new CancellationTokenSource(10000).Token;
            await Task.WhenAny(new[] { awaitingThrottleSignal.WaitHandle.AsTask(), timeoutToken1.WaitHandle.AsTask() });

            if (timeoutToken1.IsCancellationRequested)
            {
                cts.Cancel();
                throw new TimeoutException();
            }

            var timeoutToken2 = new CancellationTokenSource(10000).Token;
            await Task.WhenAny(new[] { manageTask, timeoutToken2.WaitHandle.AsTask() });

            cts.Cancel();
            if (timeoutToken2.IsCancellationRequested)
            {
                throw new TimeoutException();
            }

            mockHandlerRunner.Verify(x => x.TryRunHandlerAsync(subscriberEvent, cts.Token));
        }
Ejemplo n.º 3
0
        public void construct_with_event_resolved()
        {
            var regionId          = "r";
            var streamId          = "s";
            var position          = 1;
            var eventType         = "x";
            var resolvedEventType = typeof(TestBusinessEvent);
            var resolvedEvent     = new TestBusinessEvent();

            var e = new SubscriberEvent(regionId, streamId, position, eventType, resolvedEvent);

            Assert.Equal(regionId, e.RegionId);
            Assert.Equal(streamId, e.StreamId);
            Assert.Equal(position, e.Position);
            Assert.Equal(streamId, e.SubscriptionStreamId);
            Assert.Equal(position, e.SubscriptionPosition);
            Assert.Equal(eventType, e.EventType);
            Assert.Equal(resolvedEventType, e.ResolvedEventType);
            Assert.Equal(resolvedEvent, e.ResolvedEvent);
            Assert.True(e.IsResolved);
        }