public async Task CanPublishEndpointEvents() { _messageTypePathMappings.Add(new MessageTypeMessagingEntityMappingDetails(typeof(TestSpecificEvent1), "events/subscriptions/specific-events-1", MessagingEntityType.Subscription)); var mockMessageSender = new Mock <IMessageSender>(); mockMessageSender.Setup(mr => mr.SendAsync(It.IsNotNull <BrokeredMessage>())) .Returns(Task.FromResult(true)); _mockMessagingFactory.Setup(mf => mf.CreateMessageSender(It.IsNotNull <Type>(), It.IsNotNull <string>())) .Returns(mockMessageSender.Object); var endpointProvider = new AzureServiceBusEndpointProvider <TestMessage, TestMessage, TestCommand, TestEvent, TestRequest, TestResponse>( "TestEndpoint", _mockMessagingFactory.Object, new JsonMessageSerializer(), new JsonMessageDeserializerFactory(typeof(JsonMessageDeserializer <>)), _messageTypePathMappings, _testAssemblyFilter, _testMessageTypeFilter, _messagePropertyProviderManager, _mockMessageOutgoingPropertiesTable.Object); var testEvent = new TestSpecificEvent1 { TestId = 1234 }; await endpointProvider.CreateEndpoint().PublishAsync(testEvent); _mockMessagingFactory.Verify(mf => mf.CreateMessageSender(It.Is <Type>(t => t == typeof(TestSpecificEvent1)), It.Is <string>(s => s == "events")), Times.Once()); mockMessageSender.Verify(mr => mr.SendAsync(It.IsAny <BrokeredMessage>()), Times.Once()); }
public async Task CanReceiveEndpointClientEvents() { var testSubscriptionPath = "events/subscriptions/specific-events-1"; _messageTypePathMappings.Add(new MessageTypeMessagingEntityMappingDetails(typeof(TestSpecificEvent1), testSubscriptionPath, MessagingEntityType.Subscription)); var publishedEventBrokeredMessageTaskCompletionSource = new TaskCompletionSource <BrokeredMessage>(); var mockMessageReceiver = new Mock <IMessageReceiver>(); mockMessageReceiver.Setup(mr => mr.ReceiveAsync()) .Returns(() => publishedEventBrokeredMessageTaskCompletionSource.Task); _mockMessagingFactory.Setup(mf => mf.CreateMessageReceiver(It.IsNotNull <Type>(), It.IsNotNull <string>(), It.IsAny <MessageReceiveMode>())) .Returns(mockMessageReceiver.Object); var mockMessageSender = new Mock <IMessageSender>(); mockMessageSender.Setup(mr => mr.SendAsync(It.IsNotNull <BrokeredMessage>())) .Callback <BrokeredMessage>(bm => { publishedEventBrokeredMessageTaskCompletionSource.SetResult(bm); publishedEventBrokeredMessageTaskCompletionSource = new TaskCompletionSource <BrokeredMessage>(); }) .Returns(Task.FromResult(true)); _mockMessagingFactory.Setup(mf => mf.CreateMessageSender(It.IsNotNull <Type>(), It.IsNotNull <string>())) .Returns(mockMessageSender.Object); var endpointProvider = new AzureServiceBusEndpointProvider <TestMessage, TestMessage, TestCommand, TestEvent, TestRequest, TestResponse>( "TestEndpoint", _mockMessagingFactory.Object, new JsonMessageSerializer(), new JsonMessageDeserializerFactory(typeof(JsonMessageDeserializer <>)), _messageTypePathMappings, _testAssemblyFilter, _testMessageTypeFilter, _messagePropertyProviderManager, _mockMessageOutgoingPropertiesTable.Object); var endpointClient = endpointProvider.CreateEndpointClient(); var publishedEvents = endpointClient.Events.Replay(); using (publishedEvents.Connect()) { await endpointProvider.CreateEndpoint().PublishAsync(new TestSpecificEvent1 { TestId = 1234 }); var testEvent = await publishedEvents.FirstOrDefaultAsync(); testEvent.Should().NotBeNull(); testEvent.TestId.Should().Be(1234); } _mockMessagingFactory.Verify(mf => mf.CreateMessageReceiver(It.Is <Type>(it => it == typeof(TestSpecificEvent1)), testSubscriptionPath, It.Is <MessageReceiveMode>(mrm => mrm == MessageReceiveMode.ReceiveAndDelete)), Times.Once()); /* NOTE: it's possible ReceiveAsync will be called up to two times due to concurrency here: * the first time will return the msg for the test, but then it's possible there will be a second call to ReceiveAsync to wait for the next message * before the subscription is shut down. */ mockMessageReceiver.Verify(mr => mr.ReceiveAsync(), Times.AtMost(2)); }