Example #1
0
 /// <summary>
 /// Return a default development environment messaging configuration with no compression or encryption.
 /// </summary>
 /// <returns>The messaging configuration.</returns>
 public static WireConfiguration Development()
 {
     return(new WireConfiguration(
                "1.0",
                CompressionCodec.None,
                EncryptionSettings.None(),
                new Label("test-service")));
 }
Example #2
0
        internal void GivenDisconnectMessage_WhenConnected_SendsDisconnectedToSender()
        {
            // Arrange
            var server = new MessageServerFacade(
                this.container,
                this.messagingAdapter,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            server.Start().Wait();

            var dealer = new TestDealer(
                this.container,
                this.headerSerializer,
                this.requestSerializer,
                this.responseSerializer,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress,
                "001");

            dealer.Start().Wait();

            var connect = new Connect(
                dealer.ClientId,
                "None",
                Guid.NewGuid(),
                StubZonedDateTime.UnixEpoch());

            dealer.Send(connect);
            var response1 = (Connected)dealer.Receive();

            var disconnect = new Disconnect(
                dealer.ClientId,
                response1.SessionId,
                Guid.NewGuid(),
                StubZonedDateTime.UnixEpoch());

            dealer.Send(disconnect);
            var response2 = (Disconnected)dealer.Receive();

            // Assert
            Assert.Equal(typeof(Connected), response1.Type);
            Assert.Equal(typeof(Disconnected), response2.Type);
            Assert.Equal(2, server.ReceivedCount);
            Assert.Equal(2, server.SentCount);
            Assert.Equal("TestDealer-001 connected to test-server session None", response1.Message);
            Assert.Equal("TestDealer-001 disconnected from test-server session None", response2.Message);

            // Tear Down
            dealer.Stop().Wait();
            server.Stop().Wait();
            dealer.Dispose();
            server.Dispose();
        }
Example #3
0
        internal void InitializedPublisher_IsInCorrectState()
        {
            // Arrange
            // Act
            var publisher = new MockDataPublisher(
                this.container,
                DataBusFactory.Create(this.container),
                EncryptionSettings.None(),
                ZmqNetworkAddress.LocalHost(new Port(55555)));

            // Assert
            Assert.Equal(ComponentState.Initialized, publisher.ComponentState);
            Assert.Equal(0, publisher.SentCount);
        }
Example #4
0
        internal void InstantiatedServer_IsInCorrectState()
        {
            // Arrange
            // Act
            var server = new MessageServerFacade(
                this.container,
                this.messagingAdapter,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            // Assert
            Assert.Equal(ComponentState.Initialized, server.ComponentState);
            Assert.Equal(0, server.ReceivedCount);
            Assert.Equal(0, server.SentCount);
        }
Example #5
0
        public DataPublisherTests(ITestOutputHelper output)
            : base(output)
        {
            // Fixture Setup
            var container = TestComponentryContainer.Create(output);

            this.barSerializer        = new BarSerializer();
            this.instrumentSerializer = new InstrumentSerializer();

            this.publisher = new DataPublisher(
                container,
                DataBusFactory.Create(container),
                this.instrumentSerializer,
                new BypassCompressor(),
                EncryptionSettings.None(),
                new Port(55511));
        }
Example #6
0
        public TickPublisherTests(ITestOutputHelper output)
            : base(output)
        {
            // Fixture Setup
            var container = TestComponentryContainer.Create(output);

            this.publisher = new TickPublisher(
                container,
                DataBusFactory.Create(container),
                new QuoteTickSerializer(),
                new TradeTickSerializer(),
                new BypassCompressor(),
                EncryptionSettings.None(),
                new Port(55606));

            this.publisher.Start().Wait();
        }
Example #7
0
        internal void Test_can_publish_events()
        {
            // Arrange
            const string testAddress = "tcp://127.0.0.1:56601";

            var publisher = new EventPublisher(
                this.container,
                new MsgPackEventSerializer(),
                new BypassCompressor(),
                EncryptionSettings.None(),
                new Label("test-publisher"),
                new Port(56601));

            publisher.Start().Wait();

            var subscriber = new SubscriberSocket(testAddress);

            subscriber.Connect(testAddress);
            subscriber.Subscribe("Event:Trade:TESTER-001");

            Task.Delay(100).Wait(); // Allow socket to subscribe

            var serializer = new MsgPackEventSerializer();
            var order      = new StubOrderBuilder().BuildMarketOrder();
            var rejected   = StubEventMessageProvider.OrderRejectedEvent(order);
            var tradeEvent = new TradeEvent(TraderId.FromString("TESTER-001"), rejected);

            // Act
            publisher.Endpoint.Send(tradeEvent);
            this.Output.WriteLine("Waiting for published events...");

            var topic   = subscriber.ReceiveFrameBytes();
            var message = subscriber.ReceiveFrameBytes();
            var @event  = serializer.Deserialize(message);

            // Assert
            Assert.Equal("Event:Trade:TESTER-001", Encoding.UTF8.GetString(topic));
            Assert.Equal(typeof(OrderRejected), @event.GetType());

            // Tear Down
            subscriber.Disconnect(testAddress);
            subscriber.Dispose();
            publisher.Stop().Wait();
            publisher.Dispose();
        }
Example #8
0
        internal void Given1000Messages_StoresAndSendsResponsesToSenderInOrder()
        {
            // Arrange
            var server = new MessageServerFacade(
                this.container,
                this.messagingAdapter,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            server.Start().Wait();

            var dealer = new TestDealer(
                this.container,
                this.headerSerializer,
                this.requestSerializer,
                this.responseSerializer,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress,
                "001");

            dealer.Start().Wait();

            // Act
            for (var i = 0; i < 1000; i++)
            {
                var request = new DataRequest(
                    new Dictionary <string, string> {
                    { "Payload", $"TEST-{i}" }
                },
                    Guid.NewGuid(),
                    StubZonedDateTime.UnixEpoch());
                dealer.Send(request);
                dealer.Receive();
            }

            // Assert
            Assert.Equal(1000, server.ReceivedMessages.Count);
            Assert.Equal(1000, server.ReceivedCount);
            Assert.Equal(1000, server.SentCount);
            Assert.Equal("TEST-999", server.ReceivedMessages[^ 1].Query.FirstOrDefault().Value);
Example #9
0
        internal void GivenMessage_WhichIsInvalidForThisPort_RespondsWithMessageRejected()
        {
            // Arrange
            var server = new MessageServerFacade(
                this.container,
                this.messagingAdapter,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            server.Start().Wait();

            var dealer = new TestDealer(
                this.container,
                this.headerSerializer,
                this.requestSerializer,
                this.responseSerializer,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            dealer.Start().Wait();

            // Act
            dealer.SendRaw(
                Encoding.UTF8.GetBytes("WOW"),
                BitConverter.GetBytes(3),
                Encoding.UTF8.GetBytes("Payload"));

            var response = dealer.Receive();

            // Assert
            Assert.Equal(typeof(MessageRejected), response.Type);
            Assert.Equal(1, server.ReceivedCount);
            Assert.Equal(1, server.SentCount);

            // Tear Down
            dealer.Stop().Wait();
            server.Stop().Wait();
            dealer.Dispose();
            server.Dispose();
        }
Example #10
0
        internal void StartedServer_IsInCorrectState()
        {
            // Arrange
            // Act
            var server = new MessageServerFacade(
                this.container,
                this.messagingAdapter,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            server.Start().Wait();

            // Assert
            Assert.Equal(ComponentState.Running, server.ComponentState);

            // Tear Down
            server.Stop().Wait();
        }
Example #11
0
        internal void GivenMessage_WhichIsEmptyBytes_RespondsWithMessageRejected()
        {
            // Arrange
            var server = new MessageServerFacade(
                this.container,
                this.messagingAdapter,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            server.Start().Wait();

            var dealer = new TestDealer(
                this.container,
                this.headerSerializer,
                this.requestSerializer,
                this.responseSerializer,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            dealer.Start().Wait();

            // Act
            dealer.SendString(string.Empty);
            var response = dealer.Receive();

            // Assert
            Assert.Equal(typeof(MessageRejected), response.Type);
            Assert.Equal(1, server.ReceivedCount);
            Assert.Equal(1, server.SentCount);

            // Tear Down
            dealer.Stop().Wait();
            server.Stop().Wait();
            dealer.Dispose();
            server.Dispose();
        }
Example #12
0
        internal void GivenMessageToPublish_WhenMessageValid_PublishesToSubscriber()
        {
            // Arrange
            var publisher = new MockDataPublisher(
                this.container,
                DataBusFactory.Create(this.container),
                EncryptionSettings.None(),
                ZmqNetworkAddress.LocalHost(new Port(55555)));

            publisher.Start().Wait();

            const string testAddress = "tcp://localhost:55555";
            var          subscriber  = new SubscriberSocket(testAddress);

            subscriber.Connect(testAddress);
            subscriber.Subscribe(TestTopic);

            Task.Delay(100).Wait(); // Allow sockets to subscribe

            // Act
            const string toSend = "1234,1234";

            publisher.Endpoint.SendAsync((TestTopic, toSend));

            var topic   = subscriber.ReceiveFrameBytes();
            var message = subscriber.ReceiveFrameBytes();

            // Assert
            Assert.Equal(TestTopic, Encoding.UTF8.GetString(topic));
            Assert.Equal(toSend, Encoding.UTF8.GetString(message));
            Assert.Equal(ComponentState.Running, publisher.ComponentState);
            Assert.Equal(1, publisher.SentCount);

            // Tear Down
            subscriber.Disconnect(testAddress);
            subscriber.Dispose();
            publisher.Stop().Wait();
            publisher.Dispose();
        }
Example #13
0
        internal void GivenMultipleMessages_StoresAndSendsResponsesToCorrectSender()
        {
            // Arrange
            var server = new MessageServerFacade(
                this.container,
                this.messagingAdapter,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress);

            server.Start().Wait();

            var dealer1 = new TestDealer(
                this.container,
                this.headerSerializer,
                this.requestSerializer,
                this.responseSerializer,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress,
                "001");

            dealer1.Start().Wait();

            var dealer2 = new TestDealer(
                this.container,
                this.headerSerializer,
                this.requestSerializer,
                this.responseSerializer,
                this.compressor,
                EncryptionSettings.None(),
                this.testRequestAddress,
                this.testResponseAddress,
                "002");

            dealer2.Start().Wait();

            // Act
            var connect1 = new Connect(
                dealer1.ClientId,
                "None",
                Guid.NewGuid(),
                StubZonedDateTime.UnixEpoch());

            var connect2 = new Connect(
                dealer2.ClientId,
                "None",
                Guid.NewGuid(),
                StubZonedDateTime.UnixEpoch());

            dealer1.Send(connect1);
            dealer2.Send(connect2);
            var response1 = (Connected)dealer1.Receive();
            var response2 = (Connected)dealer2.Receive();

            // Assert
            Assert.Equal("TestDealer-001 connected to test-server session None", response1.Message);
            Assert.Equal("TestDealer-002 connected to test-server session None", response2.Message);
            Assert.Equal(2, server.ReceivedCount);
            Assert.Equal(2, server.SentCount);

            // Tear Down
            dealer1.Stop().Wait();
            dealer2.Stop().Wait();
            server.Stop().Wait();
            dealer1.Dispose();
            dealer2.Dispose();
            server.Dispose();
        }