コード例 #1
0
        public Builder WithTransport <TTransport>()
            where TTransport : ITransportConfig
        {
            var transport = Activator.CreateInstance <TTransport>();

            if (null != transport.SenderFactory)
            {
                SenderCache.AddFactory(transport.SenderFactory);
            }

            if (null != transport.ReceiverFactory)
            {
                ReceiverCache.AddFactory(transport.ReceiverFactory);
            }

            if (null != transport.PublisherFactory)
            {
                PublisherCache.AddFactory(transport.PublisherFactory);
            }

            if (null != transport.SubscriberFactory)
            {
                SubscriberCache.AddFactory(transport.SubscriberFactory);
            }

            return(this);
        }
コード例 #2
0
        public Builder WithTransport <TTransport>(TTransport transport, Action <ITransportSetup> config)
            where TTransport : ITransportConfig
        {
            if (null != transport.SenderFactory)
            {
                SenderCache.AddFactory(transport.SenderFactory);
            }

            if (null != transport.ReceiverFactory)
            {
                ReceiverCache.AddFactory(transport.ReceiverFactory);
            }

            if (null != transport.PublisherFactory)
            {
                PublisherCache.AddFactory(transport.PublisherFactory);
            }

            if (null != transport.SubscriberFactory)
            {
                SubscriberCache.AddFactory(transport.SubscriberFactory);
            }

            config(transport.Configurer);

            return(this);
        }
コード例 #3
0
        public void Subscribe_WithNoRouting_ThrowsKeyNotFoundException()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            // Act
            TestDelegate subscribe = () => cache.Subscribe <OtherTopic>();

            // Assert
            Assert.That(subscribe, Throws.TypeOf <KeyNotFoundException>());
        }
コード例 #4
0
        public void AddFactory_WithFactory_AddsMonitorToMonitorCache()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            // Act
            cache.AddFactory(subscriberFactory);

            // Assert
            mockMonitorCache.Verify(m => m.AddMonitor(It.IsIn(monitor)), Times.Once);
        }
コード例 #5
0
        public void Subscribe_WithNoFactory_ThrowsMissingFactoryExcpetion()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            // Act
            TestDelegate subscriberFor = () => cache.Subscribe <Topic>();

            // Assert
            Assert.That(subscriberFor, Throws.TypeOf <MissingFactoryException>());
        }
コード例 #6
0
        public void AddFactory_WithNullFactory_ThrowsArgumentNullException()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            // Act
            TestDelegate addFactory = () => cache.AddFactory(null);

            // Assert
            Assert.That(addFactory, Throws.ArgumentNullException);
        }
コード例 #7
0
        public void AddFactory_WithFactory_AddsToFactoriesCollection()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            // Act
            cache.AddFactory(subscriberFactory);

            // Assert
            CollectionAssert.Contains(cache.SubscriberFactories, subscriberFactory);
            Assert.That(cache.SubscriberFactories.Count, Is.EqualTo(1));
        }
コード例 #8
0
        public void Unsubscribe_WithFactory_ForwardsToSubscriptionsCache()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            cache.AddFactory(subscriberFactory);

            // Act
            cache.Unsubscribe <Topic>();

            // Assert
            mockSubscriptionsCache.Verify(m => m.Remove <Topic>(It.IsIn(subscriber)), Times.Once);
        }
コード例 #9
0
        public void Subscribe_WithSubscriber_AddsSubscriptionToSubscriptionsCache()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            cache.AddFactory(subscriberFactory);

            // Act
            cache.Subscribe <Topic>();

            // Assert
            mockSubscriptionsCache.Verify(m => m.Add <Topic>(It.IsIn(subscriber)), Times.Once);
        }
コード例 #10
0
        public void SubscriberFor_WithRoutingAndFactory_CallsFactoryCreate()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            cache.AddFactory(subscriberFactory);

            // Act
            var subscriber = cache.SubscriberFor <Topic>();

            // Assert
            mockSubscriberFactory.Verify(m => m.CreateSubscriber(It.IsIn(address)), Times.Once);
        }
コード例 #11
0
        public void AddFactory_WithFactoryAlreadyAdded_DoesNothing()
        {
            // Arrange
            var cache = new SubscriberCache(topicRouter, monitorCache, subscriptionsCache);

            cache.AddFactory(subscriberFactory);

            // Act
            cache.AddFactory(subscriberFactory);

            // Assert
            CollectionAssert.Contains(cache.SubscriberFactories, subscriberFactory);
            Assert.That(cache.SubscriberFactories.Count, Is.EqualTo(1));
            mockMonitorCache.Verify(m => m.AddMonitor(It.IsIn(monitor)), Times.Once);
        }
コード例 #12
0
        public Builder(string name)
        {
            this.name          = name;
            TopicRouter        = new TopicRouter();
            MonitorCache       = new MonitorCache();
            RequestRouter      = new RequestRouter();
            PackageFactory     = new PackageFactory();
            TopicDispatcher    = new TopicDispatcher();
            RequestDispatcher  = new RequestDispatcher();
            SubscriptionsCache = new SubscriptionsCache();
            SerializerCache    = new SerializerCache();

            SenderCache     = new SenderCache(RequestRouter, MonitorCache);
            ReceiverCache   = new ReceiverCache(MonitorCache);
            PublisherCache  = new PublisherCache(MonitorCache);
            SubscriberCache = new SubscriberCache(TopicRouter, MonitorCache, SubscriptionsCache);
        }