public async Task Messages_with_the_same_timestamp_have_repeatedly_same_order() { var now = DateTime.Now; var msg1 = new MsmqSubscriptionMessage { ArrivedTime = now, Id = Guid.NewGuid().ToString(), Body = "SomeMessageType, Version=1.0.0", Label = "address|endpoint" }; var msg2 = new MsmqSubscriptionMessage { ArrivedTime = now, Id = Guid.NewGuid().ToString(), Body = "SomeMessageType, Version=1.0.0", Label = "address|endpoint" }; var queue1 = new FakeStorageQueue(); queue1.Messages.AddRange(new[] { msg1, msg2, }); var queue2 = new FakeStorageQueue(); queue2.Messages.AddRange(new[] { msg2, // inverted order msg1, }); var storage1 = new MsmqSubscriptionStorage(queue1); var storage2 = new MsmqSubscriptionStorage(queue2); //GetSubscriberAddressesForMessage ensures storage is initialized _ = await storage1.GetSubscriberAddressesForMessage(new MessageType[0], new ContextBag()); _ = await storage2.GetSubscriberAddressesForMessage(new MessageType[0], new ContextBag()); // both endpoints should delete the same message although they have the same timestamp and are read in different order from the queue. Assert.That(queue1.Messages.Count, Is.EqualTo(1), "Message count"); Assert.AreEqual(queue1.Messages.Single(), queue2.Messages.Single()); }
public async Task Should_ignore_message_version_on_subscriptions() { var subscriptionMessage = new MsmqSubscriptionMessage { ArrivedTime = DateTime.UtcNow, Id = Guid.NewGuid().ToString(), Body = "SomeMessage, Version=1.0.0", Label = "subscriberA@server1|subscriberA" }; var storageQueue = new FakeStorageQueue(); storageQueue.Messages.Add(subscriptionMessage); var subscriptionStorage = new MsmqSubscriptionStorage(storageQueue); var subscribers = await subscriptionStorage.GetSubscriberAddressesForMessage(new[] { new MessageType("SomeMessage", "2.0.0") }, new ContextBag()); Assert.AreEqual("subscriberA", subscribers.Single().Endpoint); }
public async Task Should_ignore_message_version_on_subscriptions() { var subscriptionMessage = new MsmqSubscriptionMessage { ArrivedTime = DateTime.UtcNow, Id = Guid.NewGuid().ToString(), Body = "SomeMessage, Version=1.0.0", Label = "subscriberA@server1|subscriberA" }; var storageQueue = new FakeStorageQueue(); var subscriptionStorage = new MsmqSubscriptionStorage(storageQueue); storageQueue.Messages.Add(subscriptionMessage); subscriptionStorage.Init(); var subscribers = await subscriptionStorage.GetSubscriberAddressesForMessage(new[] { new MessageType("SomeMessage", "2.0.0") }, new ContextBag()); Assert.AreEqual("subscriberA", subscribers.Single().Endpoint); }
public void Messages_with_the_same_timestamp_have_repeatedly_same_order() { var now = DateTime.Now; var msg1 = new MsmqSubscriptionMessage { ArrivedTime = now, Id = Guid.NewGuid().ToString(), Body = "SomeMessageType, Version=1.0.0", Label = "address|endpoint" }; var msg2 = new MsmqSubscriptionMessage { ArrivedTime = now, Id = Guid.NewGuid().ToString(), Body = "SomeMessageType, Version=1.0.0", Label = "address|endpoint" }; var queue1 = new FakeStorageQueue(); var storage1 = new MsmqSubscriptionStorage(queue1); queue1.Messages.AddRange(new [] { msg1, msg2, }); var queue2 = new FakeStorageQueue(); var storage2 = new MsmqSubscriptionStorage(queue2); queue2.Messages.AddRange(new[] { msg2, // inverted order msg1, }); storage1.Init(); storage2.Init(); // both endpoints should delete the same message although they have the same timestamp and are read in different order from the queue. Assert.That(queue1.Messages.Count, Is.EqualTo(1)); Assert.AreEqual(queue1.Messages.Single(), queue2.Messages.Single()); }