public void unsubscribed_client_has_assigned_streams_sent_to_another_client() { var client1Envelope = new FakeEnvelope(); var client2Envelope = new FakeEnvelope(); var reader = new FakeCheckpointReader(); const string subsctiptionStream = "$ce-streamName"; var sub = new Core.Services.PersistentSubscription.PersistentSubscription( PersistentSubscriptionToStreamParamsBuilder.CreateFor(subsctiptionStream, "groupName") .WithEventLoader(new FakeStreamReader()) .WithCheckpointReader(reader) .WithCheckpointWriter(new FakeCheckpointWriter(x => { })) .WithMessageParker(new FakeMessageParker()) .CustomConsumerStrategy(new PinnedPersistentSubscriptionConsumerStrategy(new XXHashUnsafe())) .StartFromCurrent()); reader.Load(null); sub.AddClient(Guid.NewGuid(), Guid.NewGuid(), "connection-1", client1Envelope, 10, "foo", "bar"); var client2Id = Guid.NewGuid(); sub.AddClient(client2Id, Guid.NewGuid(), "connection-2", client2Envelope, 10, "foo", "bar"); sub.NotifyLiveSubscriptionMessage(Helper.BuildLinkEvent(Guid.NewGuid(), subsctiptionStream, 0, Helper.BuildFakeEvent(Guid.NewGuid(), "type", "streamName-1", 0), false)); sub.NotifyLiveSubscriptionMessage(Helper.BuildLinkEvent(Guid.NewGuid(), subsctiptionStream, 1, Helper.BuildFakeEvent(Guid.NewGuid(), "type", "streamName-2", 0), false)); Assert.AreEqual(1, client1Envelope.Replies.Count); Assert.AreEqual(1, client2Envelope.Replies.Count); sub.RemoveClientByCorrelationId(client2Id, false); // Message 2 should be retried on client 1 as it wasn't acked. Assert.AreEqual(2, client1Envelope.Replies.Count); Assert.AreEqual(1, client2Envelope.Replies.Count); }
public void unsubscribing_a_client_retries_inflight_messages_immediately() { var client1Envelope = new FakeEnvelope(); var client2Envelope = new FakeEnvelope(); var fakeCheckpointReader = new FakeCheckpointReader(); var sub = new Core.Services.PersistentSubscription.PersistentSubscription( PersistentSubscriptionParamsBuilder.CreateFor("streamName", "groupName") .WithEventLoader(new FakeStreamReader(x => { })) .WithCheckpointReader(fakeCheckpointReader) .WithMessageParker(new FakeMessageParker()) .PreferRoundRobin() .StartFromCurrent() .WithCheckpointWriter(new FakeCheckpointWriter(x => { }))); fakeCheckpointReader.Load(null); sub.AddClient(Guid.NewGuid(), Guid.NewGuid(), client1Envelope, 10, "foo", "bar"); var client2Id = Guid.NewGuid(); sub.AddClient(client2Id, Guid.NewGuid(), client2Envelope, 10, "foo", "bar"); Assert.IsTrue(sub.HasClients); Assert.AreEqual(2, sub.ClientCount); sub.NotifyLiveSubscriptionMessage(Helper.BuildFakeEvent(Guid.NewGuid(), "type", "streamName", 0)); sub.NotifyLiveSubscriptionMessage(Helper.BuildFakeEvent(Guid.NewGuid(), "type", "streamName", 1)); Assert.AreEqual(1, client1Envelope.Replies.Count); Assert.AreEqual(1, client2Envelope.Replies.Count); sub.RemoveClientByCorrelationId(client2Id, false); Assert.AreEqual(1, sub.ClientCount); // Message 2 should be retried on client 1 as it wasn't acked. Assert.AreEqual(2, client1Envelope.Replies.Count); Assert.AreEqual(1, client2Envelope.Replies.Count); }
public void unsubscribed_client_has_assigned_streams_sent_to_another_client() { var client1Envelope = new FakeEnvelope(); var client2Envelope = new FakeEnvelope(); var reader = new FakeCheckpointReader(); const string subsctiptionStream = "$ce-streamName"; var sub = new Core.Services.PersistentSubscription.PersistentSubscription( PersistentSubscriptionParamsBuilder.CreateFor(subsctiptionStream, "groupName") .WithEventLoader(new FakeStreamReader(x => { })) .WithCheckpointReader(reader) .WithCheckpointWriter(new FakeCheckpointWriter(x => { })) .WithMessageParker(new FakeMessageParker()) .CustomConsumerStrategy(new PinnedPersistentSubscriptionConsumerStrategy(new XXHashUnsafe())) .StartFromCurrent()); reader.Load(null); sub.AddClient(Guid.NewGuid(), Guid.NewGuid(), client1Envelope, 10, "foo", "bar"); var client2Id = Guid.NewGuid(); sub.AddClient(client2Id, Guid.NewGuid(), client2Envelope, 10, "foo", "bar"); sub.NotifyLiveSubscriptionMessage(Helper.BuildLinkEvent(Guid.NewGuid(), subsctiptionStream, 0, Helper.BuildFakeEvent(Guid.NewGuid(), "type", "streamName-1", 0), false)); sub.NotifyLiveSubscriptionMessage(Helper.BuildLinkEvent(Guid.NewGuid(), subsctiptionStream, 1, Helper.BuildFakeEvent(Guid.NewGuid(), "type", "streamName-2", 0), false)); Assert.AreEqual(1, client1Envelope.Replies.Count); Assert.AreEqual(1, client2Envelope.Replies.Count); sub.RemoveClientByCorrelationId(client2Id, false); // Message 2 should be retried on client 1 as it wasn't acked. Assert.AreEqual(2, client1Envelope.Replies.Count); Assert.AreEqual(1, client2Envelope.Replies.Count); }