/// <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);
        }
Пример #2
0
        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)
 {
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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());
        }