public async Task Should_reset_consumer_when_resetting() { await sut.OnActivateAsync(consumerName); await sut.ActivateAsync(); await sut.StopAsync(); await sut.ResetAsync(); state.Should().BeEquivalentTo(new EventConsumerState { IsStopped = false, Position = null, Error = null }); A.CallTo(() => persistence.WriteSnapshotAsync(A <EventConsumerState> .Ignored)) .MustHaveHappened(Repeated.Exactly.Twice); A.CallTo(() => eventConsumer.ClearAsync()) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventSubscription.StopAsync()) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, state.Position)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, null)) .MustHaveHappened(Repeated.Exactly.Once); }
public async Task Should_reset_consumer_when_resetting() { await sut.ActivateAsync(consumerName); await sut.ActivateAsync(); await sut.StopAsync(); await sut.ResetAsync(); grainState.Value.Should().BeEquivalentTo(new EventConsumerState { IsStopped = false, Position = null, Error = null }); A.CallTo(() => grainState.WriteAsync()) .MustHaveHappened(2, Times.Exactly); A.CallTo(() => eventConsumer.ClearAsync()) .MustHaveHappened(1, Times.Exactly); A.CallTo(() => eventSubscription.StopAsync()) .MustHaveHappened(1, Times.Exactly); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, grainState.Value.Position)) .MustHaveHappened(1, Times.Exactly); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, null)) .MustHaveHappened(1, Times.Exactly); }
public async Task Should_reset_consumer_if_resetting() { await sut.ActivateAsync(consumerName); await sut.ActivateAsync(); await sut.StopAsync(); await sut.ResetAsync(); await sut.CompleteAsync(); AssertGrainState(isStopped: false, position: null); A.CallTo(() => grainState.WriteAsync()) .MustHaveHappened(2, Times.Exactly); A.CallTo(() => eventConsumer.ClearAsync()) .MustHaveHappenedOnceExactly(); A.CallTo(() => eventSubscription.Unsubscribe()) .MustHaveHappenedOnceExactly(); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> ._, A <string> ._, grainState.Value.Position)) .MustHaveHappenedOnceExactly(); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> ._, A <string> ._, null)) .MustHaveHappenedOnceExactly(); }
public async Task Should_reset_consumer_when_resetting() { await OnSubscribeAsync(); sutActor.Tell(new StopConsumerMessage()); sutActor.Tell(new ResetConsumerMessage()); sut.Dispose(); A.CallTo(() => eventConsumerInfoRepository.SetAsync(consumerName, consumerInfo.Position, false, null)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventConsumerInfoRepository.SetAsync(consumerName, consumerInfo.Position, true, null)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventConsumerInfoRepository.SetAsync(consumerName, null, false, null)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventConsumer.ClearAsync()) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventSubscription.StopAsync()) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, consumerInfo.Position)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, null)) .MustHaveHappened(Repeated.Exactly.Once); }
public void Should_reset_consumer_when_resetting() { sut.Activate(eventConsumer); sut.Stop(); sut.Reset(); sut.Dispose(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = null, Error = null }); A.CallTo(() => stateHolder.WriteAsync()) .MustHaveHappened(Repeated.Exactly.Twice); A.CallTo(() => eventConsumer.ClearAsync()) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventSubscription.StopAsync()) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, state.Position)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, null)) .MustHaveHappened(Repeated.Exactly.Once); }
public async Task Should_clear_all_consumers() { A.CallTo(() => consumer1.ClearAsync()). Returns(TaskHelper.Done); A.CallTo(() => consumer2.ClearAsync()) .Returns(TaskHelper.Done); var sut = new CompoundEventConsumer("consumer-name", consumer1, consumer2); await sut.ClearAsync(); A.CallTo(() => consumer1.ClearAsync()).MustHaveHappened(); A.CallTo(() => consumer2.ClearAsync()).MustHaveHappened(); }
private async Task ResetAsync() { var consumerName = eventConsumer.Name; var actionId = Guid.NewGuid().ToString(); try { log.LogInformation(w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Started") .WriteProperty("eventConsumer", consumerName)); await eventConsumer.ClearAsync(); await eventConsumerInfoRepository.SetLastHandledEventNumberAsync(consumerName, -1); log.LogInformation(w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Completed") .WriteProperty("eventConsumer", consumerName)); OnReset?.Invoke(); } catch (Exception ex) { log.LogFatal(ex, w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Completed") .WriteProperty("eventConsumer", consumerName)); } }
private async Task ResetAsync(IEventConsumer eventConsumer) { var actionId = Guid.NewGuid().ToString(); try { log.LogInformation(w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Started") .WriteProperty("eventConsumer", eventConsumer.Name)); await eventConsumer.ClearAsync(); await eventConsumerInfoRepository.SetPositionAsync(eventConsumer.Name, null, true); log.LogInformation(w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Completed") .WriteProperty("eventConsumer", eventConsumer.Name)); } catch (Exception ex) { log.LogFatal(ex, w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Completed") .WriteProperty("eventConsumer", eventConsumer.GetType().Name)); throw; } }
public void Should_reset_if_requested() { consumerInfo.IsResetting = true; consumerInfo.Position = "2"; sut.Subscribe(eventConsumer); sut.Refresh(); sut.Dispose(); A.CallTo(() => eventConsumer.On(envelope1)).MustHaveHappened(); A.CallTo(() => eventConsumer.On(envelope2)).MustHaveHappened(); A.CallTo(() => eventConsumer.On(envelope3)).MustHaveHappened(); A.CallTo(() => eventConsumer.ClearAsync()).MustHaveHappened(); }
private async Task ClearAsync() { var logContext = (actionId : Guid.NewGuid().ToString(), consumer : eventConsumer.Name); log.LogInformation(logContext, (ctx, w) => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", ctx.actionId) .WriteProperty("status", "Started") .WriteProperty("eventConsumer", ctx.consumer)); using (log.MeasureTrace(logContext, (ctx, w) => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", ctx.actionId) .WriteProperty("status", "Completed") .WriteProperty("eventConsumer", ctx.consumer))) { await eventConsumer.ClearAsync(); } }
private async Task ClearAsync() { var actionId = Guid.NewGuid().ToString(); log.LogInformation(w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Started") .WriteProperty("eventConsumer", eventConsumer.Name)); using (log.MeasureTrace(w => w .WriteProperty("action", "EventConsumerReset") .WriteProperty("actionId", actionId) .WriteProperty("state", "Completed") .WriteProperty("eventConsumer", eventConsumer.Name))) { await eventConsumer.ClearAsync(); } }
public async Task Should_do_nothing_on_clear() { IEventConsumer consumer = sut; await consumer.ClearAsync(); }