public async Task ReceivesAndSendsMessagesHighPerformance() { var inputSubscription = nameof(ReceivesAndSendsMessagesHighPerformance); await CreateEndToEndTestSubscriptionsAsync(inputSubscription); var services = new ServiceCollection(); services.AddHostedService <MessageBusHostedService>() .AddSingleton <IMessageTracker, MessageTracker>() .AddMessageBus(new AzureServiceBusAdminClient(Configuration["Hostname"], Configuration["Topic"], inputSubscription, Configuration["TenantId"]), CreateHighPerformanceClient(inputSubscription)) .SubscribeToMessage <CreateNewFlightPlan, CreateNewFlightPlanHandler>() .SubscribeToMessage <AircraftTakenOff, AircraftTakenOffHandler>() .SubscribeToMessage <AircraftLeftRunway, AircraftLeftRunwayHandlerDeadLetter>(); _serviceProvider = services.BuildServiceProvider(); await StartMessageBusHostedServiceAsync(_serviceProvider); var count = 25; var createNewFlightPlanCommand = new CreateNewFlightPlan { Destination = Guid.NewGuid().ToString() }; var aircraftTakenOffEvent1 = BuildAircraftTakenOffEvent(); var aircraftTakenOffEvent2 = BuildAircraftTakenOffEvent(); var aircraftLeftRunwayEvent1 = new AircraftLeftRunway { RunwayId = Guid.NewGuid().ToString() }; var aircraftLeftRunwayEvent2 = new AircraftLeftRunway { RunwayId = Guid.NewGuid().ToString() }; var tasks = new List <Task> { SendMessagesAsync(createNewFlightPlanCommand, nameof(CreateNewFlightPlan), count), SendMessagesAsync(aircraftTakenOffEvent1, nameof(AircraftTakenOff), count), SendMessagesAsync(aircraftTakenOffEvent2, nameof(AircraftTakenOff), count), SendMessagesAsync(aircraftLeftRunwayEvent1, nameof(AircraftLeftRunway), count), SendMessagesAsync(aircraftLeftRunwayEvent2, nameof(AircraftLeftRunway), count) }; await Task.WhenAll(tasks); await Task.Delay(TimeSpan.FromSeconds(4)); Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(inputSubscription), m => m.Body.ToObjectFromJson <AircraftTakenOff>().AircraftId == aircraftTakenOffEvent1.AircraftId); var messages = await ReceiveMessagesForSubscriptionAsync($"{inputSubscription}-Output"); var deadLetterMessages = await ReceiveMessagesForSubscriptionAsync($"{inputSubscription}", deadLetter : true); Assert.Equal(count, messages.Count(m => m.Subject == nameof(StartEngines) && m.Body.ToObjectFromJson <StartEngines>().EngineId == createNewFlightPlanCommand.Destination)); Assert.Equal(count, messages.Count(m => m.Subject == nameof(AircraftLeftAirspace) && m.Body.ToObjectFromJson <AircraftLeftAirspace>().AircraftIdentifier == aircraftTakenOffEvent1.AircraftId)); Assert.Equal(count, messages.Count(m => m.Subject == nameof(AircraftLeftAirspace) && m.Body.ToObjectFromJson <AircraftLeftAirspace>().AircraftIdentifier == aircraftTakenOffEvent2.AircraftId)); Assert.Equal(count, deadLetterMessages.Count(m => m.Subject == nameof(AircraftLeftRunway) && m.DeadLetterReason == aircraftLeftRunwayEvent1.RunwayId)); Assert.Equal(count, deadLetterMessages.Count(m => m.Subject == nameof(AircraftLeftRunway) && m.DeadLetterReason == aircraftLeftRunwayEvent2.RunwayId)); }
public async Task CallsMessageProcessors() { var subscription = nameof(CallsMessageProcessors); await CreateEndToEndTestSubscriptionsAsync(subscription); var services = new ServiceCollection(); services.AddHostedService <MessageBusHostedService>() .AddSingleton <IMessageTracker, MessageTracker>() .AddSingleton <ISendingService, SendingService>() .AddMessageBus(new AzureServiceBusClientBuilder(Configuration["Hostname"], Configuration["Topic"], subscription, Configuration["TenantId"])) .SubscribeToMessage <AircraftLeftRunway, AircraftLeftRunwayHandler>() .AddMessagePreProcessor <TestMessageProcessor>() .AddMessagePostProcessor <TestMessageProcessor>(); _serviceProvider = services.BuildServiceProvider(); await StartMessageBusHostedServiceAsync(_serviceProvider); var aircraftLeftRunwayEvent = new AircraftLeftRunway { RunwayId = Guid.NewGuid().ToString() }; var messageId = Guid.NewGuid().ToString(); await SendMessagesAsync(new AircraftLeftRunway(), nameof(AircraftLeftRunway), 1, null, messageId); await Task.Delay(TimeSpan.FromSeconds(4)); Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(subscription), m => m.Body.ToObjectFromJson <AircraftTakenOff>().AircraftId == aircraftLeftRunwayEvent.RunwayId); Assert.Equal(2, (await ReceiveMessagesForSubscriptionAsync($"{subscription}-Output")).Count(m => m.Subject == nameof(SetAutopilot) && m.Body.ToObjectFromJson <SetAutopilot>().AutopilotId == messageId)); }
public async Task ReceivesAndSendsEvent() { var inputSubscription = nameof(ReceivesAndSendsEvent); await CreateEndToEndTestSubscriptionsAsync(inputSubscription); var services = new ServiceCollection(); services.AddHostedService <MessageBusHostedService>() .AddSingleton <IMessageTracker, MessageTracker>() .AddMessageBus(new AzureServiceBusClientBuilder(Configuration["Hostname"], Configuration["Topic"], inputSubscription, Configuration["TenantId"])) .SubscribeToMessage <AircraftLeftRunway, AircraftLeftRunwayHandler>(); _serviceProvider = services.BuildServiceProvider(); await StartMessageBusHostedServiceAsync(_serviceProvider); var aircraftLeftRunwayEvent = new AircraftLeftRunway { RunwayId = Guid.NewGuid().ToString() }; await SendMessagesAsync(aircraftLeftRunwayEvent, nameof(AircraftLeftRunway)); await Task.Delay(TimeSpan.FromSeconds(4)); Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(inputSubscription), m => m.Body.ToObjectFromJson <AircraftTakenOff>().AircraftId == aircraftLeftRunwayEvent.RunwayId); Assert.Single(await ReceiveMessagesForSubscriptionAsync($"{inputSubscription}-Output"), m => m.Subject == nameof(AircraftReachedGate) && m.Body.ToObjectFromJson <AircraftReachedGate>().AirlineId == aircraftLeftRunwayEvent.RunwayId); }
public async Task SendsMessageCopy() { var inputSubscription = nameof(SendsMessageCopy); await CreateEndToEndTestSubscriptionsAsync(inputSubscription); var messageType = inputSubscription; _serviceProvider = await StartSendMessageCopyTestServiceAsync <AircraftLeftRunwayHandlerWithCopy>(inputSubscription, messageType); var aircraftLeftRunwayEvent = new AircraftLeftRunway { RunwayId = Guid.NewGuid().ToString() }; await SendMessagesAsync(aircraftLeftRunwayEvent, messageType, 1); await Task.Delay(TimeSpan.FromSeconds(4)); Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(inputSubscription), m => m.Body.ToObjectFromJson <AircraftLeftRunway>().RunwayId == aircraftLeftRunwayEvent.RunwayId && m.Subject == messageType); Assert.Equal(3, await FindAircraftReachedGateEventCountAsync(inputSubscription, aircraftLeftRunwayEvent)); }