Browse Source

Event consumer actor should handle old events.

pull/164/head
Sebastian Stehle 8 years ago
parent
commit
46f80f05b2
  1. 16
      src/Squidex.Infrastructure/CQRS/Events/Actors/EventConsumerActor.cs
  2. 20
      tests/Squidex.Infrastructure.Tests/CQRS/Events/Actors/EventConsumerActorTests.cs

16
src/Squidex.Infrastructure/CQRS/Events/Actors/EventConsumerActor.cs

@ -99,7 +99,12 @@ namespace Squidex.Infrastructure.CQRS.Events.Actors
return DoAndUpdateStateAsync(async () => return DoAndUpdateStateAsync(async () =>
{ {
await DispatchConsumerAsync(ParseEvent(storedEvent)); var @event = ParseKnownEvent(storedEvent);
if (@event != null)
{
await DispatchConsumerAsync(@event);
}
statusError = null; statusError = null;
statusPosition = storedEvent.EventPosition; statusPosition = storedEvent.EventPosition;
@ -296,7 +301,9 @@ namespace Squidex.Infrastructure.CQRS.Events.Actors
} }
} }
private Envelope<IEvent> ParseEvent(StoredEvent message) private Envelope<IEvent> ParseKnownEvent(StoredEvent message)
{
try
{ {
var @event = formatter.Parse(message.Data); var @event = formatter.Parse(message.Data);
@ -305,5 +312,10 @@ namespace Squidex.Infrastructure.CQRS.Events.Actors
return @event; return @event;
} }
catch (TypeNameNotFoundException)
{
return null;
}
}
} }
} }

20
tests/Squidex.Infrastructure.Tests/CQRS/Events/Actors/EventConsumerActorTests.cs

@ -185,6 +185,26 @@ namespace Squidex.Infrastructure.CQRS.Events.Actors
.MustHaveHappened(Repeated.Exactly.Once); .MustHaveHappened(Repeated.Exactly.Once);
} }
[Fact]
public async Task Should_ignore_old_events()
{
A.CallTo(() => formatter.Parse(eventData, true))
.Throws(new TypeNameNotFoundException());
var @event = new StoredEvent(Guid.NewGuid().ToString(), 123, eventData);
await OnSubscribeAsync();
await OnEventAsync(eventSubscription, @event);
sut.Dispose();
A.CallTo(() => eventConsumerInfoRepository.SetAsync(consumerName, @event.EventPosition, false, null))
.MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => eventConsumer.On(envelope))
.MustNotHaveHappened();
}
[Fact] [Fact]
public async Task Should_not_invoke_and_update_position_when_event_is_from_another_subscription() public async Task Should_not_invoke_and_update_position_when_event_is_from_another_subscription()
{ {

Loading…
Cancel
Save