public void CreateClient_WithoutAuthentication_Throws() { var location = new AzureServiceBusNamespace("resource group", "namespace", ServiceBusEntityType.Topic, "entity name", "authorization rule name"); Assert.ThrowsAny <ArgumentException>( () => new AzureServiceBusClient(authentication: null, @namespace: location, logger: NullLogger.Instance)); }
public void CreateClient_WithoutLogger_Throws() { var location = new AzureServiceBusNamespace("resource group", "namespace", ServiceBusEntityType.Topic, "entity name", "authorization rule name"); Assert.ThrowsAny <ArgumentException>( () => new AzureServiceBusClient(Mock.Of <IAzureServiceBusManagementAuthentication>(), location, logger: null)); }
private static AzureServiceBusNamespace GenerateAzureServiceBusLocation(ServiceBusEntityType entity) { var location = new AzureServiceBusNamespace( resourceGroup: BogusGenerator.Random.Word(), @namespace: BogusGenerator.Random.Word(), entity: entity, entityName: BogusGenerator.Random.Word(), authorizationRuleName: BogusGenerator.Random.Word()); return(location); }
public void CreateRotation_WithoutLogger_Throws() { var location = new AzureServiceBusNamespace("resource group", "namespace", ServiceBusEntityType.Topic, "entity name", "authorization rule name"); var client = new AzureServiceBusClient(Mock.Of <IAzureServiceBusManagementAuthentication>(), location, NullLogger.Instance); Assert.ThrowsAny <ArgumentException>( () => new AzureServiceBusKeyRotation( serviceBusClient: client, authentication: Mock.Of <IKeyVaultAuthentication>(), configuration: Mock.Of <IKeyVaultConfiguration>(), logger: null)); }
private static Mock <ITopicsOperations> CreateStubTopicsOperations( AzureServiceBusNamespace @namespace, AzureOperationResponse <AccessKeys> response) { var stubTopics = new Mock <ITopicsOperations>(); stubTopics.Setup(t => t.RegenerateKeysWithHttpMessagesAsync( @namespace.ResourceGroup, @namespace.Namespace, @namespace.EntityName, @namespace.AuthorizationRuleName, It.IsAny <RegenerateAccessKeyParameters>(), null, default)) .ReturnsAsync(response); return(stubTopics); }
/// <summary> /// Checks for the existence of a specific Azure Web Site, if it doesn't exist it will create it. /// </summary> /// <param name="client">The <see cref="ServiceBusManagementClient"/> that is performing the operation.</param> /// <param name="model">The DevOpsFlex rich model object that contains everything there is to know about this service bus spec.</param> /// <returns>The async <see cref="Task"/> wrapper.</returns> public static async Task CreateNamespaceIfNotExistsAsync(this ServiceBusManagementClient client, AzureServiceBusNamespace model) { Contract.Requires(client != null); Contract.Requires(model != null); await client.CreateNamespaceIfNotExistsAsync( FlexDataConfiguration.GetNaming<AzureServiceBusNamespace>() .GetSlotName( model, FlexDataConfiguration.Branch, FlexDataConfiguration.Configuration), model.Region.GetEnumDescription()); }
public async Task RotateServiceBusSecret_WithValidArguments_RotatesPrimarySecondaryAlternately(ServiceBusEntityType entity) { // Arrange string vaultUrl = BogusGenerator.Internet.UrlWithPath(protocol: "https"); string secretName = BogusGenerator.Random.Word(); AzureServiceBusNamespace @namespace = GenerateAzureServiceBusLocation(entity); var response = new AzureOperationResponse <AccessKeys> { Body = new AccessKeys( primaryConnectionString: BogusGenerator.Random.Words(), secondaryConnectionString: BogusGenerator.Random.Words()) }; Mock <ITopicsOperations> stubTopics = CreateStubTopicsOperations(@namespace, response); Mock <IQueuesOperations> stubQueues = CreateStubQueueOperations(@namespace, response); Mock <IAzureServiceBusManagementAuthentication> stubServiceBusAuthentication = CreateStubAuthentication(stubTopics.Object, stubQueues.Object); Mock <IKeyVaultAuthentication> stubKeyVaultAuthentication = CreateStubKeyVaultAuthentication(vaultUrl, secretName, response.Body); var rotation = new AzureServiceBusKeyRotation( new AzureServiceBusClient(stubServiceBusAuthentication.Object, @namespace, NullLogger.Instance), stubKeyVaultAuthentication.Object, new KeyVaultConfiguration(vaultUrl), NullLogger.Instance); // Act await rotation.RotateServiceBusSecretAsync(secretName); // Assert Assert.Empty(DetermineNonRelevantInvocations(entity, stubTopics.Invocations, stubQueues.Invocations)); Assert.Collection(DetermineRelevantInvocations(entity, stubTopics.Invocations, stubQueues.Invocations), invocation => AssertInvocationKeyRotation(invocation, KeyType.SecondaryKey), invocation => AssertInvocationKeyRotation(invocation, KeyType.PrimaryKey)); await rotation.RotateServiceBusSecretAsync(secretName); Assert.Empty(DetermineNonRelevantInvocations(entity, stubTopics.Invocations, stubQueues.Invocations)); Assert.Collection(DetermineRelevantInvocations(entity, stubTopics.Invocations, stubQueues.Invocations).Skip(2), invocation => AssertInvocationKeyRotation(invocation, KeyType.PrimaryKey), invocation => AssertInvocationKeyRotation(invocation, KeyType.SecondaryKey)); }
private AzureServiceBusClient CreateAzureServiceBusClient( KeyRotationConfig keyRotationConfig, ISecretProvider secretProvider, ServiceBusEntityType entity) { var serviceBusAuthentication = new DefaultAzureServiceBusManagementAuthentication( keyRotationConfig.ServicePrincipal.ClientId, keyRotationConfig.ServicePrincipal.ClientSecretKey, keyRotationConfig.ServiceBusNamespace.SubscriptionId, keyRotationConfig.ServiceBusNamespace.TenantId, secretProvider); var serviceBusLocation = new AzureServiceBusNamespace( keyRotationConfig.ServiceBusNamespace.ResourceGroup, keyRotationConfig.ServiceBusNamespace.Namespace, entity, keyRotationConfig.ServiceBusNamespace.TopicName, keyRotationConfig.ServiceBusNamespace.AuthorizationRuleName); var azureServiceBusClient = new AzureServiceBusClient(serviceBusAuthentication, serviceBusLocation, _logger); return(azureServiceBusClient); }
/// <summary> /// Checks for the existence of a specific Azure Web Site, if it doesn't exist it will create it. /// </summary> /// <param name="client">The <see cref="ServiceBusManagementClient"/> that is performing the operation.</param> /// <param name="model">The DevOpsFlex rich model object that contains everything there is to know about this service bus spec.</param> /// <returns>The async <see cref="Task"/> wrapper.</returns> public static async Task CreateNamespaceIfNotExistsAsync(this ServiceBusManagementClient client, AzureServiceBusNamespace model) { Contract.Requires(client != null); Contract.Requires(model != null); await client.CreateNamespaceIfNotExistsAsync( FlexDataConfiguration.GetNaming <AzureServiceBusNamespace>() .GetSlotName( model, FlexDataConfiguration.Branch, FlexDataConfiguration.Configuration), model.Region.GetEnumDescription()); }