예제 #1
0
        public async Task Should_start_after_stop_if_handling_failed()
        {
            var ex = new InvalidOperationException();

            A.CallTo(() => eventConsumer.On(envelope))
            .Throws(ex);

            await sut.ActivateAsync(consumerName);

            await sut.ActivateAsync();

            await OnEventAsync(eventSubscription, storedEvent);

            await sut.CompleteAsync();

            await sut.StopAsync();

            await sut.StartAsync();

            await sut.StartAsync();

            AssertGrainState(isStopped: false, position: initialPosition);

            A.CallTo(() => eventConsumer.On(envelope))
            .MustHaveHappened();

            A.CallTo(() => grainState.WriteAsync())
            .MustHaveHappened(2, Times.Exactly);

            A.CallTo(() => eventSubscription.Unsubscribe())
            .MustHaveHappenedOnceExactly();

            A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> ._, A <string> ._, A <string> ._))
            .MustHaveHappened(2, Times.Exactly);
        }
예제 #2
0
        public async Task Should_start_after_stop_when_handling_failed()
        {
            var exception = new InvalidOperationException();

            A.CallTo(() => eventConsumer.On(envelope))
            .Throws(exception);

            var @event = new StoredEvent("Stream", Guid.NewGuid().ToString(), 123, eventData);

            await sut.ActivateAsync(consumerName);

            await sut.ActivateAsync();

            await OnEventAsync(eventSubscription, @event);

            await sut.CompleteAsync();

            await sut.StopAsync();

            await sut.StartAsync();

            await sut.StartAsync();

            AssetGrainState(new EventConsumerState {
                IsStopped = false, Position = initialPosition, Error = null
            });

            A.CallTo(() => eventConsumer.On(envelope))
            .MustHaveHappened();

            A.CallTo(() => grainState.WriteAsync())
            .MustHaveHappened(2, Times.Exactly);

            A.CallTo(() => eventSubscription.Unsubscribe())
            .MustHaveHappenedOnceExactly();

            A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> ._, A <string> ._, A <string> ._))
            .MustHaveHappened(2, Times.Exactly);
        }