Apache.NMS.ActiveMQ.Test.FailoverTransportTest.TestFailoverTransportConnectionControlHandling C# (CSharp) Method

TestFailoverTransportConnectionControlHandling() private method

private TestFailoverTransportConnectionControlHandling ( ) : void
return void
        public void TestFailoverTransportConnectionControlHandling()
        {
            Uri uri = new Uri("failover:(mock://localhost:61613)?transport.randomize=false");
            string reconnectTo = "mock://localhost:61616?transport.name=Reconnected";
            string connectedBrokers = "mock://localhost:61617?transport.name=Broker1," +
                                      "mock://localhost:61618?transport.name=Broker2";
            FailoverTransportFactory factory = new FailoverTransportFactory();

            using(ITransport transport = factory.CreateTransport(uri))
            {
                Assert.IsNotNull(transport);
                transport.Command = OnCommand;
                transport.Exception = OnException;

                FailoverTransport failover = transport.Narrow(typeof(FailoverTransport)) as FailoverTransport;
                Assert.IsNotNull(failover);
                Assert.IsFalse(failover.Randomize);

                failover.Resumed = OnResumed;

                const int MAX_ATTEMPTS = 50;

                transport.Start();

                for(int i = 0; i < MAX_ATTEMPTS; ++i)
                {
                    if(failover.IsConnected)
                    {
                        break;
                    }

                    Thread.Sleep(100);
                }

                Assert.IsTrue(failover.IsConnected);

                // Ensure the current mock transport has the correct outgoing command handler
                MockTransport mock = transport.Narrow(typeof(MockTransport)) as MockTransport;
                Assert.IsNotNull(mock);
                Assert.AreEqual(61613, mock.RemoteAddress.Port);
                VerifyCommandHandlerSetting(transport, mock);
                mock.OutgoingCommand = OnOutgoingCommand;

                mock.InjectCommand(new ConnectionControl()
                {
                    FaultTolerant = true,
                    ReconnectTo = reconnectTo,
                    ConnectedBrokers = connectedBrokers
                });

                // Give a bit of time for the Command to actually be processed.
                Thread.Sleep(2000);

                failover.Remove(true, "mock://localhost:61613");

                mock = null;

                for(int i = 0; i < MAX_ATTEMPTS; ++i)
                {
                    mock = transport.Narrow(typeof(MockTransport)) as MockTransport;
                    if(mock != null)
                    {
                        break;
                    }

                    Thread.Sleep(100);
                }

                Assert.IsNotNull(mock, "Error reconnecting to failover broker.");
                Assert.AreEqual(61616, mock.RemoteAddress.Port);
                Assert.AreEqual("Reconnected", mock.Name);
            }
        }