public async Task ServiceBusMessagePump_RotateServiceBusConnectionKeysOnSecretNewVersionNotification_MessagePumpRestartsThenMessageSuccessfullyProcessed() { // Arrange var config = TestConfig.Create(); KeyRotationConfig rotationConfig = config.GetKeyRotationConfig(); _logger.LogInformation("Using Service Principal [ClientID: '{0}']", rotationConfig.ServicePrincipal.ClientId); var client = new ServiceBusConfiguration(rotationConfig, _logger); string freshConnectionString = await client.RotateConnectionStringKeysForQueueAsync(KeyType.PrimaryKey); IKeyVaultClient keyVaultClient = await CreateKeyVaultClientAsync(rotationConfig); await SetConnectionStringInKeyVaultAsync(keyVaultClient, rotationConfig, freshConnectionString); string jobId = Guid.NewGuid().ToString(); const string connectionStringSecretKey = "ARCUS_KEYVAULT_SECRETNEWVERSIONCREATED_CONNECTIONSTRING"; var options = new WorkerOptions(); options.Configuration.Add(connectionStringSecretKey, rotationConfig.KeyVault.SecretNewVersionCreated.ConnectionString); AddEventGridPublisher(options, config); AddSecretStore(options, rotationConfig); AddServiceBusMessagePump(options, rotationConfig, jobId); options.AddAutoRestartServiceBusMessagePumpOnRotatedCredentialsBackgroundJob( jobId: jobId, subscriptionNamePrefix: "TestSub", serviceBusTopicConnectionStringSecretKey: connectionStringSecretKey, messagePumpConnectionStringKey: rotationConfig.KeyVault.SecretName); await using (var worker = await Worker.StartNewAsync(options)) { string newSecondaryConnectionString = await client.RotateConnectionStringKeysForQueueAsync(KeyType.SecondaryKey); await SetConnectionStringInKeyVaultAsync(keyVaultClient, rotationConfig, newSecondaryConnectionString); await using (var service = await TestMessagePumpService.StartNewAsync(config, _logger)) { // Act string newPrimaryConnectionString = await client.RotateConnectionStringKeysForQueueAsync(KeyType.PrimaryKey); // Assert await service.SimulateMessageProcessingAsync(newPrimaryConnectionString); } } }
public async Task ServiceBusMessagePump_RotateServiceBusConnectionKeys_MessagePumpRestartsThenMessageSuccessfullyProcessed() { // Arrange var config = TestConfig.Create(); KeyRotationConfig keyRotationConfig = config.GetKeyRotationConfig(); _logger.LogInformation("Using Service Principal [ClientID: '{ClientId}']", keyRotationConfig.ServicePrincipal.ClientId); var client = new ServiceBusConfiguration(keyRotationConfig, _logger); string freshConnectionString = await client.RotateConnectionStringKeysForQueueAsync(KeyType.PrimaryKey); ServicePrincipalAuthentication authentication = keyRotationConfig.ServicePrincipal.CreateAuthentication(); IKeyVaultClient keyVaultClient = await authentication.AuthenticateAsync(); await SetConnectionStringInKeyVaultAsync(keyVaultClient, keyRotationConfig, freshConnectionString); var options = new WorkerOptions(); options.AddEventGridPublisher(config) .AddSingleton <ISecretProvider>(serviceProvider => { return(new KeyVaultSecretProvider( new ServicePrincipalAuthentication(keyRotationConfig.ServicePrincipal.ClientId, keyRotationConfig.ServicePrincipal.ClientSecret), new KeyVaultConfiguration(keyRotationConfig.KeyVault.VaultUri))); }) .AddServiceBusQueueMessagePump(keyRotationConfig.KeyVault.SecretName, opt => opt.AutoComplete = true) .WithServiceBusMessageHandler <OrdersAzureServiceBusMessageHandler, Order>(); await using (var worker = await Worker.StartNewAsync(options)) { string newSecondaryConnectionString = await client.RotateConnectionStringKeysForQueueAsync(KeyType.SecondaryKey); await SetConnectionStringInKeyVaultAsync(keyVaultClient, keyRotationConfig, newSecondaryConnectionString); await using (var service = await TestMessagePumpService.StartNewAsync(config, _logger)) { // Act string newPrimaryConnectionString = await client.RotateConnectionStringKeysForQueueAsync(KeyType.PrimaryKey); // Assert await service.SimulateMessageProcessingAsync(newPrimaryConnectionString); } } }