Esempio n. 1
0
        public void SameClientSubscribesTwiceShouldOnlyCreateOneSubscribtion(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            string messageTypeString)
        {
            var client       = new Address("testqueue.publisher", "localhost");
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString, "1.0.0.0")
            };

            sut.Subscribe(client, messageTypes);
            sut.Subscribe(client, messageTypes);

            var subscriptions = storage.GetSubscriptions(messageTypes).ToList();

            subscriptions.Should().HaveCount(messageTypes.Count);

            var subscription = subscriptions.First();

            subscription.MessageType.Should().Be(messageTypes.First());
            subscription.Clients.Should().HaveCount(1);
            subscription.Clients.First().Should().Be(client);
        }
Esempio n. 2
0
        public void SubscribeTwoMessageTypesShouldCreateTwoSubscriptions(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Address client,
            string messageTypeString1,
            string messageTypeString2)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString1, "1.0.0.0"),
                new MessageType(messageTypeString2, "1.0.0.0")
            };

            sut.Subscribe(client, messageTypes);

            var subscriptions = storage.GetSubscriptions(messageTypes).ToList();

            subscriptions.Should().HaveCount(messageTypes.Count);

            subscriptions.ForEach(s =>
            {
                s.Clients.Should().HaveCount(1);
                s.Clients.First().Should().Be(client);
            });
        }
Esempio n. 3
0
        public void UnsubscribeWhenThereAreSubscriptionsShouldRemoveClientsAddress(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Address client,
            Address otherClient1,
            Address otherClient2,
            string messageTypeString1)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString1, "1.0.0.0"),
            };

            sut.Subscribe(client, messageTypes);
            sut.Subscribe(otherClient1, messageTypes);
            sut.Subscribe(otherClient2, messageTypes);
            sut.GetSubscriberAddressesForMessage(messageTypes).Should().HaveCount(3);

            sut.Unsubscribe(client, messageTypes);
            var clients = sut.GetSubscriberAddressesForMessage(messageTypes).ToList();

            clients.Should().HaveCount(2);
            clients.First().Should().Be(otherClient1);
            clients.Last().Should().Be(otherClient2);
        }
Esempio n. 4
0
        public void UnsubscribeWhenThereAreSubscriptionsShouldRemoveClientsAddress(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Subscriber subscriber,
            Subscriber otherSubscriber1,
            Subscriber otherSubscriber2,
            ContextBag context,
            string messageTypeString)
        {
            var sut         = storage as ISubscriptionStorage;
            var messageType = new MessageType(messageTypeString, "1.0.0.0");

            sut.Subscribe(subscriber, messageType, context).Wait();
            sut.Subscribe(otherSubscriber1, messageType, context).Wait();
            sut.Subscribe(otherSubscriber2, messageType, context).Wait();
            sut.GetSubscriberAddressesForMessage(new List <MessageType>()
            {
                messageType
            }, context)
            .Result.Should()
            .HaveCount(3);

            sut.Unsubscribe(subscriber, messageType, context).Wait();
            var clients =
                sut.GetSubscriberAddressesForMessage(new List <MessageType>()
            {
                messageType
            }, context).Result.ToList();

            clients.Should().HaveCount(2);
            clients.First().ShouldBeEquivalentTo(otherSubscriber1);
            clients.Last().ShouldBeEquivalentTo(otherSubscriber2);
        }
Esempio n. 5
0
        public void SameClientSubscribesTwiceShouldOnlyCreateOneSubscribtion(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Subscriber subscriber,
            ContextBag context,
            string messageTypeString)
        {
            var sut         = storage as ISubscriptionStorage;
            var messageType = new MessageType(messageTypeString, "1.0.0.0");

            sut.Subscribe(subscriber, messageType, context).Wait();
            sut.Subscribe(subscriber, messageType, context).Wait();

            var subscriptions = storage.GetSubscription(messageType).Result.ToList();

            subscriptions.Should().HaveCount(1);

            var subscription = subscriptions.First();

            subscription.Id.TypeName.Should().Be(messageType.TypeName);
            subscription.Subscribers.Should().HaveCount(1);

            var firstSubscriber = subscription.Subscribers.First();

            firstSubscriber.ShouldBeEquivalentTo(subscriber);
        }
Esempio n. 6
0
        public void UnsubscribeWhenClientSubscriptionIsTheOnlyOneShouldRemoveOnlyClient(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Subscriber subscriber,
            ContextBag context,
            string messageTypeString)
        {
            var sut         = storage as ISubscriptionStorage;
            var messageType = new MessageType(messageTypeString, "1.0.0.0");

            sut.Subscribe(subscriber, messageType, context).Wait();
            storage.GetSubscription(messageType).Result.Should().HaveCount(1);
            sut.GetSubscriberAddressesForMessage(new List <MessageType>()
            {
                messageType
            }, context)
            .Result.Should()
            .HaveCount(1);

            sut.Unsubscribe(subscriber, messageType, context).Wait();
            storage.GetSubscription(messageType).Result.Should().HaveCount(1);

            sut.GetSubscriberAddressesForMessage(new List <MessageType>()
            {
                messageType
            }, context)
            .Result.Should()
            .HaveCount(0);
        }
Esempio n. 7
0
        public void SubscribeTwoMessageTypesShouldCreateTwoDifferentSubscriptions(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Subscriber subscriber,
            ContextBag context,
            string messageTypeString1,
            string messageTypeString2)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageType1 = new MessageType(messageTypeString1, "1.0.0.0");
            var messageType2 = new MessageType(messageTypeString2, "1.0.0.0");

            sut.Subscribe(subscriber, messageType1, context).Wait();
            sut.Subscribe(subscriber, messageType2, context).Wait();

            var subscriptions = storage.GetSubscription(messageType1).Result.ToList();

            subscriptions.Should().HaveCount(1);

            var subscription = subscriptions.First();

            subscription.Id.TypeName.Should().Be(messageType1.TypeName);
            subscription.Subscribers.Should().HaveCount(1);

            subscriptions = storage.GetSubscription(messageType2).Result.ToList();
            subscriptions.Should().HaveCount(1);

            subscription = subscriptions.First();
            subscription.Id.TypeName.Should().Be(messageType2.TypeName);
            subscription.Subscribers.Should().HaveCount(1);
        }
Esempio n. 8
0
        public void UnsubscribeWhenThereIsNoSubscriptionShouldNotCreateSubscription(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Address client,
            string messageTypeString1)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString1, "1.0.0.0"),
            };

            sut.Unsubscribe(client, messageTypes);
            storage.GetSubscriptions(messageTypes).Should().BeEmpty();
        }
Esempio n. 9
0
        public void UnsubscribeWhenThereIsNoSubscriptionShouldNotCreateSubscription(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Subscriber subscriber,
            ContextBag context,
            string messageTypeString)
        {
            var sut         = storage as ISubscriptionStorage;
            var messageType = new MessageType(messageTypeString, "1.0.0.0");

            sut.Unsubscribe(subscriber, messageType, context).Wait();

            var subscriptions = storage.GetSubscription(messageType).Result.ToList();

            subscriptions.Should().BeEmpty();
        }
Esempio n. 10
0
        public void UnsubscribeWhenClientSubscriptionIsTheOnlyOneShouldRemoveOnlyClient(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Address client,
            string messageTypeString1)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString1, "1.0.0.0"),
            };

            sut.Subscribe(client, messageTypes);
            storage.GetSubscriptions(messageTypes).Should().HaveCount(1);
            sut.GetSubscriberAddressesForMessage(messageTypes).Should().HaveCount(1);

            sut.Unsubscribe(client, messageTypes);
            storage.GetSubscriptions(messageTypes).Should().HaveCount(1);

            sut.GetSubscriberAddressesForMessage(messageTypes).Should().HaveCount(0);
        }
Esempio n. 11
0
        public void UnsubscribeFromAllMessages(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Address client,
            string messageTypeString1,
            string messageTypeString2,
            string messageTypeString3)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString1, "1.0.0.0"),
                new MessageType(messageTypeString2, "1.0.0.0"),
                new MessageType(messageTypeString3, "1.0.0.0"),
            };

            sut.Subscribe(client, messageTypes);
            storage.GetSubscriptions(messageTypes).Should().HaveCount(3);

            sut.Unsubscribe(client, messageTypes);
            storage.GetSubscriptions(messageTypes).ToList().ForEach(s => s.Clients.Should().HaveCount(0));
        }
Esempio n. 12
0
        public void SubscribeTwoClientsOneMessageTypeShouldCreateOneSubscriptionWithMultipleAddresses(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Address client1,
            Address client2,
            string messageTypeString1)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString1, "1.0.0.0"),
            };

            sut.Subscribe(client1, messageTypes);
            sut.Subscribe(client2, messageTypes);

            var clients = sut.GetSubscriberAddressesForMessage(messageTypes).ToList();

            clients.Should().HaveCount(2);
            clients.Should().ContainSingle(a => client1 == a);
            clients.Should().ContainSingle(a => client2 == a);
        }
Esempio n. 13
0
        public void SingleSubscriptionShouldOnlyCreateOneSubscription(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Address client,
            string messageTypeString)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString, "1.0.0.0")
            };

            sut.Subscribe(client, messageTypes);

            var subscriptions = storage.GetSubscriptions(messageTypes).ToList();

            subscriptions.Should().HaveCount(messageTypes.Count);

            var subscription = subscriptions.First();

            subscription.MessageType.Should().Be(messageTypes.First());
            subscription.Clients.Should().HaveCount(1);
            subscription.Clients.First().Should().Be(client);
        }
Esempio n. 14
0
        public void UnsubscribeFromAllMessages(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Subscriber subscriber,
            ContextBag context,
            string messageTypeString1,
            string messageTypeString2,
            string messageTypeString3)
        {
            var sut          = storage as ISubscriptionStorage;
            var messageTypes = new List <MessageType>()
            {
                new MessageType(messageTypeString1, "1.0.0.0"),
                new MessageType(messageTypeString2, "1.0.0.0"),
                new MessageType(messageTypeString3, "1.0.0.0"),
            };

            messageTypes.ForEach(mt => sut.Subscribe(subscriber, mt, context).Wait());
            storage.GetSubscriptions(messageTypes).Result.Should().HaveCount(3);

            messageTypes.ForEach(mt => sut.Unsubscribe(subscriber, mt, context).Wait());

            storage.GetSubscriptions(messageTypes).Result.ToList().ForEach(s => s.Subscribers.Should().HaveCount(0));
        }
Esempio n. 15
0
        public void SubscribeTwoClientsOneMessageTypeShouldCreateOneSubscriptionWithMultipleAddresses(
            MongoSubscriptionPersister storage,
            MongoDatabaseFactory factory,
            Subscriber subscriber1,
            Subscriber subscriber2,
            ContextBag context,
            string messageTypeString)
        {
            var sut         = storage as ISubscriptionStorage;
            var messageType = new MessageType(messageTypeString, "1.0.0.0");

            sut.Subscribe(subscriber1, messageType, context).Wait();
            sut.Subscribe(subscriber2, messageType, context).Wait();

            var subscribers =
                sut.GetSubscriberAddressesForMessage(new List <MessageType> {
                messageType
            }, context).Result.ToList();

            subscribers.Should().HaveCount(2);

            subscribers.Should().ContainSingle(a => subscriber1.TransportAddress == a.TransportAddress);
            subscribers.Should().ContainSingle(a => subscriber2.TransportAddress == a.TransportAddress);
        }
Esempio n. 16
0
 public void BasicMongoSubscriptionStorageConstruction(MongoDatabaseFactory factory)
 {
     var sut = new MongoSubscriptionPersister(factory);
 }