public void FailoverTransportCreateFailOnCreateTest() { Uri uri = new Uri("failover:(mock://localhost:61616?transport.failOnCreate=true)?" + "transport.useExponentialBackOff=false&transport.maxReconnectAttempts=3&transport.initialReconnectDelay=100"); 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.UseExponentialBackOff); Assert.AreEqual(3, failover.MaxReconnectAttempts); Assert.AreEqual(100, failover.InitialReconnectDelay); transport.Start(); Thread.Sleep(2000); Assert.IsNotEmpty(this.exceptions); Assert.IsFalse(failover.IsConnected); } }
public void OpenWireCommandsTest() { Uri uri = new Uri("failover:(mock://localhost:61616)?transport.randomize=false"); 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); transport.Start(); Thread.Sleep(1000); Assert.IsTrue(failover.IsConnected); ConnectionInfo connection = createConnection(); transport.Request(connection); SessionInfo session1 = createSession(connection); transport.Request(session1); SessionInfo session2 = createSession(connection); transport.Request(session2); ConsumerInfo consumer1 = createConsumer(session1); transport.Request(consumer1); ConsumerInfo consumer2 = createConsumer(session1); transport.Request(consumer2); ConsumerInfo consumer3 = createConsumer(session2); transport.Request(consumer3); ProducerInfo producer1 = createProducer(session2); transport.Request(producer1); // Remove the Producers disposeOf(transport, producer1); // Remove the Consumers disposeOf(transport, consumer1); disposeOf(transport, consumer2); disposeOf(transport, consumer3); // Remove the Session instances. disposeOf(transport, session1); disposeOf(transport, session2); // Indicate that we are done. ShutdownInfo shutdown = new ShutdownInfo(); transport.Oneway(shutdown); } }
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); } }
public void FailoverTransportSendRequestFailTest() { Uri uri = new Uri( "failover:(mock://localhost:61616?transport.failOnSendMessage=true," + "mock://localhost:61618)?transport.randomize=false"); 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; transport.Start(); Thread.Sleep(1000); 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); VerifyCommandHandlerSetting(transport, mock); mock.OutgoingCommand = OnOutgoingCommand; ActiveMQMessage message = new ActiveMQMessage(); int numMessages = 4; for(int i = 0; i < numMessages; ++i) { transport.Request(message); } Thread.Sleep(1000); Assert.AreEqual(numMessages, this.sent.Count); } }
public void FailoverTransportSendOnewayTimeoutTest() { Uri uri = new Uri( "failover:(mock://localhost:61616?transport.failOnCreate=true)?transport.timeout=1000"); 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.AreEqual(1000, failover.Timeout); transport.Start(); Thread.Sleep(1000); ActiveMQMessage message = new ActiveMQMessage(); Assert.Throws<IOException>(delegate() { transport.Oneway(message); }); } }
public void FailoverTransportFailingBackupsTest() { Uri uri = new Uri( "failover:(mock://localhost:61616," + "mock://localhost:61618?transport.failOnCreate=true)?transport.randomize=false&transport.backup=true"); 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); Assert.IsTrue(failover.Backup); transport.Start(); Thread.Sleep(2000); Assert.IsTrue(failover.IsConnected); } }
public void FailoverTransportFailOnSendMessageTest() { Uri uri = new Uri("failover:(mock://localhost:61616?transport.failOnCreate=true)?" + "transport.useExponentialBackOff=false&transport.maxReconnectAttempts=3&transport.initialReconnectDelay=100"); 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.UseExponentialBackOff); Assert.AreEqual(3, failover.MaxReconnectAttempts); Assert.AreEqual(100, failover.InitialReconnectDelay); transport.Start(); ActiveMQMessage message = new ActiveMQMessage(); Assert.Throws<IOException>(delegate() { transport.Oneway(message); }, "Oneway call should block and then throw."); Assert.IsNotEmpty(this.exceptions); Assert.IsFalse(failover.IsConnected); } }