/// <summary> /// Adds a background job to the <see cref="IServiceCollection"/> to receive <see cref="CloudEvent"/>'s. /// </summary> /// <param name="services">The services collection to add the job to.</param> /// <param name="subscriptionNamePrefix">The name of the Azure Service Bus subscription that will be created to receive <see cref="CloudEvent"/>'s.</param> /// <param name="serviceBusTopicConnectionStringSecretKey">The configuration key that points to the Azure Service Bus Topic connection string.</param> public static IServiceCollection AddCloudEventBackgroundJob( this IServiceCollection services, string subscriptionNamePrefix, string serviceBusTopicConnectionStringSecretKey) { Guard.NotNull(services, nameof(services)); Guard.NotNullOrWhitespace(subscriptionNamePrefix, nameof(subscriptionNamePrefix), "Requires a non-blank subscription name of the Azure Service Bus Topic subscription, to receive Key Vault events"); Guard.NotNullOrWhitespace(serviceBusTopicConnectionStringSecretKey, nameof(serviceBusTopicConnectionStringSecretKey), "Requires a non-blank configuration key that points to a Azure Service Bus Topic"); services.AddHostedService(serviceProvider => { var settings = new AzureServiceBusMessagePumpSettings( entityName: null, subscriptionName: $"{subscriptionNamePrefix}.{Guid.NewGuid().ToString()}", ServiceBusEntity.Topic, getConnectionStringFromConfigurationFunc: null, getConnectionStringFromSecretFunc: secretProvider => secretProvider.GetRawSecretAsync(serviceBusTopicConnectionStringSecretKey), options: new AzureServiceBusMessagePumpConfiguration(AzureServiceBusTopicMessagePumpOptions.Default), serviceProvider: serviceProvider); var configuration = serviceProvider.GetRequiredService <IConfiguration>(); var logger = serviceProvider.GetRequiredService <ILogger <AzureServiceBusMessagePump> >(); return(new CloudEventBackgroundJob(settings, configuration, serviceProvider, logger)); }); return(services); }
public async Task GetEntityPath_WithNamespaceConnectionStringInsteadOfEntityScopedUsingTokenCredential_Fails() { // Arrange var serviceBusNamespace = "arcus-messaging-integration-tests.servicebus.windows.net"; var serviceProvider = new ServiceCollection().BuildServiceProvider(); var expected = $"entity-{Guid.NewGuid()}"; var entityType = ServiceBusEntityType.Queue; var credential = new DefaultAzureCredential(); var options = new AzureServiceBusMessagePumpOptions(); var settings = new AzureServiceBusMessagePumpSettings( entityName: expected, subscriptionName: null, serviceBusEntity: entityType, serviceBusNamespace: serviceBusNamespace, tokenCredential: credential, options: options, serviceProvider: serviceProvider); // Act string actual = await settings.GetEntityPathAsync(); // Assert Assert.Equal(expected, actual); }
/// <summary> /// Initializes a new instance of the <see cref="CloudEventBackgroundJob"/> class. /// </summary> /// <param name="settings">The settings to influence the behavior of the message pump.</param> /// <param name="configuration">The configuration of the application.</param> /// <param name="serviceProvider">The collection of services that are configured.</param> /// <param name="logger">The logger to write telemetry to.</param> /// <exception cref="ArgumentNullException">When the <paramref name="serviceProvider"/> is <c>null</c>.</exception> /// <exception cref="ArgumentException">When the <paramref name="serviceProvider"/> doesn't have a registered <see cref="AzureServiceBusMessagePumpSettings"/> instance.</exception> public CloudEventBackgroundJob( AzureServiceBusMessagePumpSettings settings, IConfiguration configuration, IServiceProvider serviceProvider, ILogger <AzureServiceBusMessagePump> logger) : base(settings, configuration, serviceProvider, logger) { }
public void CreateSettings_WithEntityScopedUsingConnectionString_Succeeds() { // Arrange var entityType = ServiceBusEntityType.Queue; var options = new AzureServiceBusMessagePumpOptions(); var serviceProvider = new ServiceCollection().BuildServiceProvider(); var namespaceConnectionString = $"Endpoint=sb://arcus-messaging-integration-tests.servicebus.windows.net/;SharedAccessKeyName=MyAccessKeyName;SharedAccessKey={Guid.NewGuid()}"; // Act / Assert var settings = new AzureServiceBusMessagePumpSettings( entityName: null, subscriptionName: null, serviceBusEntity: entityType, getConnectionStringFromConfigurationFunc: null, getConnectionStringFromSecretFunc: secretProvider => Task.FromResult(namespaceConnectionString), options: options, serviceProvider: serviceProvider); }
public void CreateSettings_WithTokenCredential_Succeeds() { // Arrange var serviceBusNamespace = "arcus-messaging-integration-tests.servicebus.windows.net"; var serviceProvider = new ServiceCollection().BuildServiceProvider(); var expected = $"entity-{Guid.NewGuid()}"; var entityType = ServiceBusEntityType.Queue; var credential = new DefaultAzureCredential(); var options = new AzureServiceBusMessagePumpOptions(); // Act / Assert var settings = new AzureServiceBusMessagePumpSettings( entityName: expected, subscriptionName: null, serviceBusEntity: entityType, serviceBusNamespace: serviceBusNamespace, tokenCredential: credential, options: options, serviceProvider: serviceProvider); }
public async Task GetEntityPath_WithNamespaceConnectionStringInsteadOfEntityScopedUsingConnectionString_Fails() { // Arrange var entityType = ServiceBusEntityType.Queue; var options = new AzureServiceBusMessagePumpOptions(); var secretProvider = new EnvironmentVariableSecretProvider(); var serviceProvider = new ServiceCollection() .AddSingleton <ISecretProvider>(secretProvider) .BuildServiceProvider(); var namespaceConnectionString = $"Endpoint=sb://arcus-messaging-integration-tests.servicebus.windows.net/;SharedAccessKeyName=MyAccessKeyName;SharedAccessKey={Guid.NewGuid()}"; var settings = new AzureServiceBusMessagePumpSettings( entityName: null, subscriptionName: null, serviceBusEntity: entityType, getConnectionStringFromConfigurationFunc: null, getConnectionStringFromSecretFunc: secretProvider => Task.FromResult(namespaceConnectionString), options: options, serviceProvider: serviceProvider); // Act await Assert.ThrowsAnyAsync <ArgumentException>(() => settings.GetEntityPathAsync()); }