public void explicit_nak_with_retry_retries_the_message() { var envelope1 = new FakeEnvelope(); var reader = new FakeCheckpointReader(); var parker = new FakeMessageParker(); var sub = new Core.Services.PersistentSubscription.PersistentSubscription( PersistentSubscriptionParamsBuilder.CreateFor("streamName", "groupName") .WithEventLoader(new FakeStreamReader(x => { })) .WithCheckpointReader(reader) .WithCheckpointWriter(new FakeCheckpointWriter(i => { })) .WithMessageParker(parker) .StartFromBeginning()); reader.Load(null); var corrid = Guid.NewGuid(); sub.AddClient(corrid, Guid.NewGuid(), envelope1, 10, "foo", "bar"); var id1 = Guid.NewGuid(); sub.HandleReadCompleted(new[] { Helper.BuildFakeEvent(id1, "type", "streamName", 0), }, 1, false); envelope1.Replies.Clear(); sub.NotAcknowledgeMessagesProcessed(corrid, new[] { id1 }, NakAction.Retry, "a reason from client."); Assert.AreEqual(1, envelope1.Replies.Count); Assert.AreEqual(id1, ((ClientMessage.PersistentSubscriptionStreamEventAppeared)envelope1.Replies[0]).Event.Event.EventId); Assert.AreEqual(0, parker.ParkedEvents.Count); }
public void explicit_nak_with_park_correctly_tracks_the_available_client_slots() { var envelope1 = new FakeEnvelope(); var reader = new FakeCheckpointReader(); var parker = new FakeMessageParker(); var sub = new Core.Services.PersistentSubscription.PersistentSubscription( PersistentSubscriptionParamsBuilder.CreateFor("streamName", "groupName") .WithEventLoader(new FakeStreamReader(x => { })) .WithCheckpointReader(reader) .WithCheckpointWriter(new FakeCheckpointWriter(i => { })) .WithMessageParker(parker) .WithMaxRetriesOf(0) .WithMessageTimeoutOf(TimeSpan.Zero) .StartFromBeginning()); reader.Load(null); var corrid = Guid.NewGuid(); sub.AddClient(corrid, Guid.NewGuid(), envelope1, 1, "foo", "bar"); var id1 = Guid.NewGuid(); var id2 = Guid.NewGuid(); sub.HandleReadCompleted(new[] { Helper.BuildFakeEvent(id1, "type", "streamName", 0), Helper.BuildFakeEvent(id2, "type", "streamName", 1), Helper.BuildFakeEvent(Guid.NewGuid(), "type", "streamName", 2) }, 1, false); Assert.AreEqual(1, envelope1.Replies.Count); sub.NotAcknowledgeMessagesProcessed(corrid, new[] { id1 }, NakAction.Park, "a reason from client."); Assert.AreEqual(2, envelope1.Replies.Count); sub.NotAcknowledgeMessagesProcessed(corrid, new[] { id2 }, NakAction.Park, "a reason from client."); Assert.AreEqual(3, envelope1.Replies.Count); }
public void explicit_nak_with_retry_correctly_tracks_the_available_client_slots() { var envelope1 = new FakeEnvelope(); var reader = new FakeCheckpointReader(); var parker = new FakeMessageParker(); var sub = new Core.Services.PersistentSubscription.PersistentSubscription( PersistentSubscriptionParamsBuilder.CreateFor("streamName", "groupName") .WithEventLoader(new FakeStreamReader(x => { })) .WithCheckpointReader(reader) .WithCheckpointWriter(new FakeCheckpointWriter(i => { })) .WithMaxRetriesOf(10) .WithMessageParker(parker) .StartFromBeginning()); reader.Load(null); var corrid = Guid.NewGuid(); sub.AddClient(corrid, Guid.NewGuid(), envelope1, 10, "foo", "bar"); var id1 = Guid.NewGuid(); var ev = Helper.BuildFakeEvent(id1, "type", "streamName", 0); sub.HandleReadCompleted(new[] { ev, }, 1, false); for (int i = 1; i < 11; i++) { sub.NotAcknowledgeMessagesProcessed(corrid, new[] { id1 }, NakAction.Retry, "a reason from client."); Assert.AreEqual(i + 1, envelope1.Replies.Count); } Assert.That(parker.ParkedEvents, Has.No.Member(ev)); //This time should be parked sub.NotAcknowledgeMessagesProcessed(corrid, new[] { id1 }, NakAction.Retry, "a reason from client."); Assert.AreEqual(11, envelope1.Replies.Count); Assert.That(parker.ParkedEvents, Has.Member(ev)); }