public async Task TestCantDeleteTemporaryQueueWithConsumers() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); testPeer.ExpectBegin(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); string dynamicAddress = "myTempTopicAddress"; testPeer.ExpectTempTopicCreationAttach(dynamicAddress); ITemporaryTopic topic = await session.CreateTemporaryTopicAsync(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlow(); IMessageConsumer consumer = await session.CreateConsumerAsync(topic); Assert.CatchAsync <IllegalStateException>(async() => await topic.DeleteAsync(), "should not be able to delete temporary topic with active consumers"); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); await consumer.CloseAsync(); // Now it should be allowed testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); await topic.DeleteAsync(); testPeer.ExpectClose(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(2000); } }
public void TestCantDeleteTemporaryQueueWithConsumers() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = EstablishConnection(testPeer); connection.Start(); testPeer.ExpectBegin(); ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); string dynamicAddress = "myTempQueueAddress"; testPeer.ExpectTempQueueCreationAttach(dynamicAddress); ITemporaryQueue temporaryQueue = session.CreateTemporaryQueue(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlow(); IMessageConsumer consumer = session.CreateConsumer(temporaryQueue); Assert.Catch <IllegalStateException>(() => temporaryQueue.Delete(), "should not be able to delete temporary queue with active consumers"); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); consumer.Close(); // Now it should be allowed testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); temporaryQueue.Delete(); testPeer.ExpectClose(); connection.Close(); testPeer.WaitForAllMatchersToComplete(2000); } }
public async Task TestSendWorksAfterConnectionStopped() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); IQueue destination = await session.GetQueueAsync("myQueue"); IMessageProducer producer = await session.CreateProducerAsync(destination); testPeer.ExpectTransfer(Assert.IsNotNull); await connection.StopAsync(); await producer.SendAsync(await session.CreateMessageAsync()); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); testPeer.ExpectClose(); await producer.CloseAsync(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCloseDurableTopicSubscriberDetachesWithCloseFalse() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = EstablishNMSContext(testPeer); context.Start(); testPeer.ExpectBegin(); string topicName = "myTopic"; string subscriptionName = "mySubscription"; ITopic topic = context.GetTopic(topicName); testPeer.ExpectDurableSubscriberAttach(topicName, subscriptionName); testPeer.ExpectLinkFlow(); var durableConsumer = context.CreateDurableConsumer(topic, subscriptionName, null, false); testPeer.ExpectDetach(expectClosed: false, sendResponse: true, replyClosed: false); durableConsumer.Close(); testPeer.ExpectEnd(); testPeer.ExpectClose(); context.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCloseDurableTopicSubscriberDetachesWithCloseFalse() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = EstablishConnection(testPeer); connection.Start(); testPeer.ExpectBegin(); ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); string topicName = "myTopic"; string subscriptionName = "mySubscription"; ITopic topic = session.GetTopic(topicName); testPeer.ExpectDurableSubscriberAttach(topicName, subscriptionName); testPeer.ExpectLinkFlow(); IMessageConsumer durableConsumer = session.CreateDurableConsumer(topic, subscriptionName, null, false); testPeer.ExpectDetach(expectClosed: false, sendResponse: true, replyClosed: false); durableConsumer.Close(); testPeer.ExpectClose(); connection.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public async Task TestSendWorksAfterConnectionStopped() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = await EstablishNMSContextAsync(testPeer); await context.StartAsync(); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); IQueue destination = await context.GetQueueAsync("myQueue"); var producer = await context.CreateProducerAsync(); testPeer.ExpectTransfer(Assert.IsNotNull); await context.StopAsync(); await producer.SendAsync(destination, await context.CreateMessageAsync()); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); testPeer.ExpectEnd(); testPeer.ExpectClose(); await producer.CloseAsync(); await context.CloseAsync(); testPeer.WaitForAllMatchersToComplete(1000); } }
public async Task TestCloseSender() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await base.EstablishConnectionAsync(testPeer); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); IQueue queue = await session.GetQueueAsync("myQueue"); IMessageProducer producer = await session.CreateProducerAsync(); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); testPeer.ExpectClose(); await producer.CloseAsync(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCreateProducerAfterConnectionDrops() { using (TestAmqpPeer originalPeer = new TestAmqpPeer()) using (TestAmqpPeer finalPeer = new TestAmqpPeer()) { ManualResetEvent originalConnected = new ManualResetEvent(false); ManualResetEvent finalConnected = new ManualResetEvent(false); // Create a peer to connect to, then one to reconnect to var originalUri = CreatePeerUri(originalPeer); var finalUri = CreatePeerUri(finalPeer); // Connect to the first peer originalPeer.ExpectSaslAnonymous(); originalPeer.ExpectOpen(); originalPeer.ExpectBegin(); originalPeer.ExpectBegin(); originalPeer.DropAfterLastMatcher(); NmsConnection connection = EstablishAnonymousConnection(originalPeer, finalPeer); Mock <INmsConnectionListener> connectionListener = new Mock <INmsConnectionListener>(); connectionListener .Setup(listener => listener.OnConnectionEstablished(It.Is <Uri>(uri => originalUri == uri.ToString()))) .Callback(() => { originalConnected.Set(); }); connectionListener .Setup(listener => listener.OnConnectionRestored(It.Is <Uri>(uri => finalUri == uri.ToString()))) .Callback(() => { finalConnected.Set(); }); connection.AddConnectionListener(connectionListener.Object); connection.Start(); Assert.True(originalConnected.WaitOne(TimeSpan.FromSeconds(5)), "Should connect to original peer"); // Post Failover Expectations of FinalPeer finalPeer.ExpectSaslAnonymous(); finalPeer.ExpectOpen(); finalPeer.ExpectBegin(); finalPeer.ExpectBegin(); finalPeer.ExpectSenderAttach(); finalPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); finalPeer.ExpectClose(); ISession session = connection.CreateSession(); IQueue queue = session.GetQueue("myQueue"); IMessageProducer producer = session.CreateProducer(queue); Assert.True(finalConnected.WaitOne(TimeSpan.FromSeconds(5)), "Should connect to final peer"); producer.Close(); connection.Close(); finalPeer.WaitForAllMatchersToComplete(1000); } }
public async Task TestUnsubscribeExclusiveDurableSubWhileActiveThenInactive() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); testPeer.ExpectBegin(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); String topicName = "myTopic"; ITopic dest = await session.GetTopicAsync("myTopic"); String subscriptionName = "mySubscription"; // Attach the durable exclusive receiver testPeer.ExpectDurableSubscriberAttach(topicName: topicName, subscriptionName: subscriptionName); testPeer.ExpectLinkFlow(); IMessageConsumer consumer = await session.CreateDurableConsumerAsync(dest, subscriptionName, null, false); Assert.NotNull(consumer, "TopicSubscriber object was null"); // Now try to unsubscribe, should fail Assert.CatchAsync <NMSException>(async() => session.DeleteDurableConsumer(subscriptionName)); // Now close the subscriber testPeer.ExpectDetach(expectClosed: false, sendResponse: true, replyClosed: false); await consumer.CloseAsync(); // Try to unsubscribe again, should work now testPeer.ExpectDurableSubUnsubscribeNullSourceLookup(failLookup: false, shared: false, subscriptionName: subscriptionName, topicName: topicName, hasClientId: true); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); session.DeleteDurableConsumer(subscriptionName); testPeer.WaitForAllMatchersToComplete(1000); testPeer.ExpectClose(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCloseDurableSubscriberWithUnackedAndUnconsumedPrefetchedMessages() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = EstablishConnection(testPeer); connection.Start(); testPeer.ExpectBegin(); ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); string topicName = "myTopic"; string subscriptionName = "mySubscription"; ITopic topic = session.GetTopic(topicName); int messageCount = 5; // Create a consumer and fill the prefetch with some messages, // which we will consume some of but ack none of. testPeer.ExpectDurableSubscriberAttach(topicName, subscriptionName); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), count: messageCount); IMessageConsumer durableConsumer = session.CreateDurableConsumer(topic, subscriptionName, null, false); int consumeCount = 2; IMessage receivedMessage = null; for (int i = 1; i <= consumeCount; i++) { receivedMessage = durableConsumer.Receive(); Assert.NotNull(receivedMessage); Assert.IsInstanceOf <NmsTextMessage>(receivedMessage); } // Expect the messages that were not delivered to be released. for (int i = 1; i <= consumeCount; i++) { testPeer.ExpectDispositionThatIsAcceptedAndSettled(); } receivedMessage.Acknowledge(); testPeer.ExpectDetach(expectClosed: false, sendResponse: true, replyClosed: false); for (int i = consumeCount + 1; i <= messageCount; i++) { testPeer.ExpectDispositionThatIsReleasedAndSettled(); } testPeer.ExpectEnd(); durableConsumer.Close(); session.Close(); testPeer.ExpectClose(); connection.Close(); testPeer.WaitForAllMatchersToComplete(3000); } }
public async Task TestMessageListenerClosesItsConsumer() { var latch = new ManualResetEvent(false); var exceptionListenerFired = new ManualResetEvent(false); using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); connection.ExceptionListener += _ => exceptionListenerFired.Set(); testPeer.ExpectBegin(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); IQueue destination = await session.GetQueueAsync("myQueue"); await connection.StartAsync(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), 1); IMessageConsumer consumer = await session.CreateConsumerAsync(destination); testPeer.ExpectLinkFlow(drain: true, sendDrainFlowResponse: true, creditMatcher: credit => Assert.AreEqual(99, credit)); // Not sure if expected credit is right testPeer.ExpectDispositionThatIsAcceptedAndSettled(); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); Exception exception = null; consumer.Listener += message => { try { consumer.Close(); latch.Set(); } catch (Exception e) { exception = e; } }; Assert.True(latch.WaitOne(TimeSpan.FromMilliseconds(1000)), "Process not completed within given timeout"); Assert.IsNull(exception, "No error expected during close"); testPeer.WaitForAllMatchersToComplete(2000); testPeer.ExpectClose(); await connection.CloseAsync(); Assert.False(exceptionListenerFired.WaitOne(20), "Exception listener shouldn't have fired"); testPeer.WaitForAllMatchersToComplete(2000); } }
public async Task TestMessageListenerCallsSessionCloseThrowsIllegalStateException() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); testPeer.ExpectBegin(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); IQueue destination = await session.GetQueueAsync("myQueue"); await connection.StartAsync(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), 1); IMessageConsumer consumer = await session.CreateConsumerAsync(destination); testPeer.ExpectDispositionThatIsAcceptedAndSettled(); ManualResetEvent latch = new ManualResetEvent(false); Exception exception = null; consumer.Listener += message => { try { session.Close(); } catch (Exception e) { exception = e; } latch.Set(); }; Assert.True(latch.WaitOne(3000), "Messages not received within given timeout."); Assert.IsNotNull(exception); Assert.IsInstanceOf <IllegalStateException>(exception); testPeer.WaitForAllMatchersToComplete(2000); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); await consumer.CloseAsync(); testPeer.ExpectClose(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(2000); } }
public void TestMessageListenerCallsSessionCloseThrowsIllegalStateException() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = EstablishNMSContext(testPeer); context.Start(); testPeer.ExpectBegin(); IQueue destination = context.GetQueue("myQueue"); context.Start(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), 1); var consumer = context.CreateConsumer(destination); testPeer.ExpectDispositionThatIsAcceptedAndSettled(); ManualResetEvent latch = new ManualResetEvent(false); Exception exception = null; consumer.Listener += message => { try { context.Close(); } catch (Exception e) { exception = e; } latch.Set(); }; Assert.True(latch.WaitOne(3000), "Messages not received within given timeout."); Assert.IsNotNull(exception); Assert.IsInstanceOf <IllegalStateException>(exception); testPeer.WaitForAllMatchersToComplete(2000); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); consumer.Close(); testPeer.ExpectEnd(); // testPeer.ExpectClose(); context.Close(); testPeer.WaitForAllMatchersToComplete(2000); } }
public async Task TestConsumerCloseWaitsForAsyncDeliveryToComplete() { ManualResetEvent latch = new ManualResetEvent(false); using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); testPeer.ExpectBegin(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); IQueue destination = await session.GetQueueAsync("myQueue"); await connection.StartAsync(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), count: 1); IMessageConsumer consumer = await session.CreateConsumerAsync(destination); testPeer.ExpectDispositionThatIsAcceptedAndSettled(); consumer.Listener += _ => { latch.Set(); Task.Delay(TimeSpan.FromMilliseconds(100)).GetAwaiter().GetResult(); }; Assert.True(latch.WaitOne(TimeSpan.FromMilliseconds(3000)), "Messages not received within given timeout."); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); await consumer.CloseAsync(); testPeer.WaitForAllMatchersToComplete(2000); testPeer.ExpectClose(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(2000); } }
public async Task TestSetMessageListenerAfterStartAndSend() { int messageCount = 4; CountdownEvent latch = new CountdownEvent(messageCount); using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); testPeer.ExpectBegin(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); IQueue destination = await session.GetQueueAsync("myQueue"); await connection.StartAsync(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), messageCount); IMessageConsumer consumer = await session.CreateConsumerAsync(destination); for (int i = 0; i < messageCount; i++) { testPeer.ExpectDispositionThatIsAcceptedAndSettled(); } consumer.Listener += message => latch.Signal(); Assert.True(latch.Wait(4000), "Messages not received within given timeout. Count remaining: " + latch.CurrentCount); testPeer.WaitForAllMatchersToComplete(2000); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); await consumer.CloseAsync(); testPeer.ExpectClose(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(2000); } }
public async Task TestCreateProducerInOnMessage() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = await EstablishConnectionAsync(testPeer); await connection.StartAsync(); testPeer.ExpectBegin(); ISession session = await connection.CreateSessionAsync(AcknowledgementMode.AutoAcknowledge); IQueue destination = await session.GetQueueAsync("myQueue"); IQueue outbound = await session.GetQueueAsync("ForwardDest"); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), 1); testPeer.ExpectSenderAttach(); testPeer.ExpectTransfer(messageMatcher: Assert.NotNull); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); testPeer.ExpectDispositionThatIsAcceptedAndSettled(); IMessageConsumer consumer = await session.CreateConsumerAsync(destination); consumer.Listener += message => { IMessageProducer producer = session.CreateProducer(outbound); producer.Send(message); producer.Close(); }; testPeer.WaitForAllMatchersToComplete(10_000); testPeer.ExpectClose(); await connection.CloseAsync(); testPeer.WaitForAllMatchersToComplete(2000); } }
public void TestSetMessageListenerAfterStartAndSend() { int messageCount = 4; CountdownEvent latch = new CountdownEvent(messageCount); using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = EstablishNMSContext(testPeer); context.Start(); testPeer.ExpectBegin(); IQueue destination = context.GetQueue("myQueue"); context.Start(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), messageCount); var consumer = context.CreateConsumer(destination); for (int i = 0; i < messageCount; i++) { testPeer.ExpectDispositionThatIsAcceptedAndSettled(); } consumer.Listener += message => latch.Signal(); Assert.True(latch.Wait(4000), "Messages not received within given timeout. Count remaining: " + latch.CurrentCount); testPeer.WaitForAllMatchersToComplete(2000); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); consumer.Close(); testPeer.ExpectEnd(); testPeer.ExpectClose(); context.Close(); testPeer.WaitForAllMatchersToComplete(2000); } }
public void TestConsumerCloseWaitsForAsyncDeliveryToComplete() { ManualResetEvent latch = new ManualResetEvent(false); using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = EstablishNMSContext(testPeer); context.Start(); testPeer.ExpectBegin(); IQueue destination = context.GetQueue("myQueue"); context.Start(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), count: 1); var consumer = context.CreateConsumer(destination); testPeer.ExpectDispositionThatIsAcceptedAndSettled(); consumer.Listener += _ => { latch.Set(); Task.Delay(TimeSpan.FromMilliseconds(100)).GetAwaiter().GetResult(); }; Assert.True(latch.WaitOne(TimeSpan.FromMilliseconds(3000)), "Messages not received within given timeout."); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); consumer.Close(); testPeer.WaitForAllMatchersToComplete(2000); testPeer.ExpectEnd(); testPeer.ExpectClose(); context.Close(); testPeer.WaitForAllMatchersToComplete(2000); } }
public void TestCreateProducer() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = EstablishNMSContext(testPeer); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); var producer = context.CreateProducer(); testPeer.ExpectDetach(true, true, true); testPeer.ExpectEnd(); testPeer.ExpectClose(); producer.Close(); context.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCloseSender() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = base.EstablishNMSContext(testPeer); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); IQueue queue = context.GetQueue("myQueue"); var producer = context.CreateProducer(); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); testPeer.ExpectEnd(); testPeer.ExpectClose(); producer.Close(); context.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCloseConsumer() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = EstablishConnection(testPeer); testPeer.ExpectBegin(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlow(); ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); IQueue queue = session.GetQueue("myQueue"); IMessageConsumer consumer = session.CreateConsumer(queue); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); consumer.Close(); testPeer.ExpectClose(); connection.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCreateProducerInOnMessage() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = EstablishNMSContext(testPeer); context.Start(); testPeer.ExpectBegin(); IQueue destination = context.GetQueue("myQueue"); IQueue outbound = context.GetQueue("ForwardDest"); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlowRespondWithTransfer(message: CreateMessageWithContent(), 1); testPeer.ExpectSenderAttach(); testPeer.ExpectTransfer(messageMatcher: Assert.NotNull); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); testPeer.ExpectDispositionThatIsAcceptedAndSettled(); var consumer = context.CreateConsumer(destination); consumer.Listener += message => { var producer = context.CreateProducer(); producer.Send(outbound, message); producer.Close(); }; testPeer.WaitForAllMatchersToComplete(10_000); testPeer.ExpectEnd(); testPeer.ExpectClose(); context.Close(); testPeer.WaitForAllMatchersToComplete(2000); } }
public void TestSendWorksWhenConnectionNotStarted() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = EstablishNMSContext(testPeer); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); IQueue destination = context.GetQueue("myQueue"); var producer = context.CreateProducer(); testPeer.ExpectTransfer(Assert.IsNotNull); producer.Send(destination, context.CreateMessage()); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); producer.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public async Task TestCreateProducer() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = await EstablishNMSContextAsync(testPeer); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); var producer = await context.CreateProducerAsync(); testPeer.ExpectDetach(true, true, true); testPeer.ExpectEnd(); testPeer.ExpectClose(); await producer.CloseAsync(); await context.CloseAsync(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestSendWorksWhenConnectionNotStarted() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { IConnection connection = EstablishConnection(testPeer); testPeer.ExpectBegin(); testPeer.ExpectSenderAttach(); ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); IQueue destination = session.GetQueue("myQueue"); IMessageProducer producer = session.CreateProducer(destination); testPeer.ExpectTransfer(Assert.IsNotNull); producer.Send(session.CreateMessage()); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); producer.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestCreateConsumerFailsWhenLinkRefused() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { testPeer.ExpectSaslAnonymous(); testPeer.ExpectOpen(); testPeer.ExpectBegin(); NmsConnection connection = EstablishAnonymousConnection(testPeer); connection.Start(); testPeer.ExpectBegin(); ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); string topicName = "myTopic"; ITopic topic = session.GetTopic(topicName); // Expect a link to a topic node, which we will then refuse testPeer.ExpectReceiverAttach(sourceMatcher: source => { Assert.AreEqual(topicName, source.Address); Assert.IsFalse(source.Dynamic); Assert.AreEqual((uint)TerminusDurability.NONE, source.Durable); }, targetMatcher: Assert.NotNull, linkNameMatcher: Assert.NotNull, refuseLink: true); //Expect the detach response to the test peer closing the consumer link after refusal. testPeer.ExpectDetach(expectClosed: true, sendResponse: false, replyClosed: false); Assert.Catch <NMSException>(() => session.CreateConsumer(topic)); // Shut it down testPeer.ExpectClose(); connection.Close(); testPeer.WaitForAllMatchersToComplete(1000); } }
public async Task TestCloseConsumer() { using (TestAmqpPeer testPeer = new TestAmqpPeer()) { var context = await EstablishNMSContextAsync(testPeer); testPeer.ExpectBegin(); testPeer.ExpectReceiverAttach(); testPeer.ExpectLinkFlow(); IQueue queue = await context.GetQueueAsync("myQueue"); var consumer = await context.CreateConsumerAsync(queue); testPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); await consumer.CloseAsync(); testPeer.ExpectEnd(); testPeer.ExpectClose(); await context.CloseAsync(); testPeer.WaitForAllMatchersToComplete(1000); } }
public void TestTempDestinationRecreatedAfterConnectionFailsOver() { using (TestAmqpPeer originalPeer = new TestAmqpPeer()) using (TestAmqpPeer finalPeer = new TestAmqpPeer()) { ManualResetEvent originalConnected = new ManualResetEvent(false); ManualResetEvent finalConnected = new ManualResetEvent(false); // Create a peer to connect to, then one to reconnect to var originalUri = CreatePeerUri(originalPeer); var finalUri = CreatePeerUri(finalPeer); originalPeer.ExpectSaslAnonymous(); originalPeer.ExpectOpen(); originalPeer.ExpectBegin(); originalPeer.ExpectBegin(); string dynamicAddress1 = "myTempTopicAddress"; originalPeer.ExpectTempTopicCreationAttach(dynamicAddress1); originalPeer.DropAfterLastMatcher(); NmsConnection connection = EstablishAnonymousConnection(originalPeer, finalPeer); Mock <INmsConnectionListener> connectionListener = new Mock <INmsConnectionListener>(); connectionListener .Setup(listener => listener.OnConnectionEstablished(It.Is <Uri>(uri => originalUri == uri.ToString()))) .Callback(() => { originalConnected.Set(); }); connectionListener .Setup(listener => listener.OnConnectionRestored(It.Is <Uri>(uri => finalUri == uri.ToString()))) .Callback(() => { finalConnected.Set(); }); connection.AddConnectionListener(connectionListener.Object); connection.Start(); Assert.True(originalConnected.WaitOne(TimeSpan.FromSeconds(5)), "Should connect to original peer"); // Post Failover Expectations of FinalPeer finalPeer.ExpectSaslAnonymous(); finalPeer.ExpectOpen(); finalPeer.ExpectBegin(); String dynamicAddress2 = "myTempTopicAddress2"; finalPeer.ExpectTempTopicCreationAttach(dynamicAddress2); // Session is recreated after previous temporary destinations are recreated on failover. finalPeer.ExpectBegin(); ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); ITemporaryTopic temporaryTopic = session.CreateTemporaryTopic(); Assert.True(finalConnected.WaitOne(TimeSpan.FromSeconds(5)), "Should connect to final peer"); // Delete the temporary Topic and close the session. finalPeer.ExpectDetach(expectClosed: true, sendResponse: true, replyClosed: true); finalPeer.ExpectEnd(); temporaryTopic.Delete(); session.Close(); // Shut it down finalPeer.ExpectClose(); connection.Close(); originalPeer.WaitForAllMatchersToComplete(2000); finalPeer.WaitForAllMatchersToComplete(1000); } }