Example #1
0
        public void Test_concurrent_publish()
        {
            //Arrange
            var count        = 0;
            var manualResets = Enumerable.Range(0, 10).Select(_ => new ManualResetEvent(false)).ToArray();

            var dispatcher = new Mock <IMessageDispatcher>();

            dispatcher.Setup(s => s.Subscribe(It.IsAny <SubscriptionIdentifier>(), It.IsAny <MessageBusCallbackDelegate>())).Callback(() => {});

            var messageBus = new MessageBus(GlobalHost.DependencyResolver.Resolve <IMessageBus>(),
                                            dispatcher.Object, GlobalHost.DependencyResolver.Resolve <JsonSerializer>());

            //Act
            Enumerable.Range(0, 10).AsParallel().ForAll(i => messageBus.Subscribe("foo" + i, (key, filter, value) =>
            {
                Interlocked.Increment(ref count);
                manualResets[i].Set();
            }));
            Enumerable.Range(0, 10).AsParallel().ForAll(i => messageBus.Publish("foo" + i, "{\"message\":\"blah\"}"));
            WaitHandle.WaitAll(manualResets, 100);

            //Assert
            dispatcher.Verify(g => g.Subscribe(It.Is <SubscriptionIdentifier>(s => s.Topic.StartsWith("foo") && s.Filter == null), It.IsAny <MessageBusCallbackDelegate>()), Times.Exactly(10));
            dispatcher.Verify(g => g.DispatchMessage(It.IsAny <IMagicHubMessage>()), Times.Exactly(10));
        }
Example #2
0
        public void Test_unsubscribe()
        {
            //Arrange
            var waitEvent = new ManualResetEvent(false);

            var callback = new MessageBusCallbackDelegate((key, fltr, value) =>
            {
                waitEvent.Set();
            });

            var dispatcher = new Mock <IMessageDispatcher>();

            dispatcher.Setup(s => s.Subscribe(It.IsAny <SubscriptionIdentifier>(), It.IsAny <MessageBusCallbackDelegate>())).Callback(() => { });

            var messageBus = new MessageBus(GlobalHost.DependencyResolver.Resolve <IMessageBus>(),
                                            dispatcher.Object, GlobalHost.DependencyResolver.Resolve <JsonSerializer>());

            //Act
            messageBus.Subscribe("foo", callback);
            messageBus.Publish("foo", "{\"message\":\"blah\"}");
            messageBus.Unsubscribe("foo");
            waitEvent.WaitOne(100);

            //Assert
            dispatcher.Verify(g => g.Subscribe(It.Is <SubscriptionIdentifier>(s => s.Topic == "foo" && s.Filter == null), callback), Times.Once());
            dispatcher.Verify(g => g.DispatchMessage(It.Is <IMagicHubMessage>(m => (string)m.Context["Topic"] == "foo")), Times.Once());
            dispatcher.Verify(g => g.Unsubscribe(It.Is <SubscriptionIdentifier>(s => s.Topic == "foo" && s.Filter == null)), Times.Once());
        }
Example #3
0
        public void Test_publish()
        {
            //Arrange
            var mockSignalRMessageBus = new Mock <IMessageBus>();
            var mockDispatcher        = new Mock <IMessageDispatcher>();

            mockSignalRMessageBus.Setup(b => b.Publish(It.IsAny <Message>())).Verifiable();
            var messageBus = new MessageBus(mockSignalRMessageBus.Object, mockDispatcher.Object, JsonSerializer.Create(new JsonSerializerSettings()));

            //Act
            messageBus.Publish("foo", "{\"message\":\"blah\", \"tracing_enabled\":false}");

            //Assert
            mockSignalRMessageBus.VerifyAll();
        }