public void Test_KeyVault_MsiConfigValidate() { // Arrange var msiConfigGood = new MsiConfig { KeyVaultInstanceName = "test" }; var msiConfigBad = new MsiConfig(); var msiConfigString = msiConfigGood.ToString(); // Act/Assert AssertExtensions.DoesNotThrow(() => msiConfigGood.Validate()); var validationResult = msiConfigGood.Validate(); validationResult.IsValid.Should().BeTrue(); validationResult.Errors.Count().Should().Be(0); validationResult = msiConfigBad.Validate(); validationResult.IsValid.Should().BeFalse(); validationResult.Errors.Count().Should().Be(1); msiConfigBad.KeyVaultInstanceName = "test"; validationResult = msiConfigBad.Validate(); validationResult.IsValid.Should().BeTrue(); validationResult.Errors.Count().Should().Be(0); }
public void Test_Configuration_MsiValidation() { // Arrange var msiConfig = new MsiConfig(); // Act/Assert - Check the msi config validation. var validationRes = msiConfig.Validate(); validationRes.IsValid.Should().BeFalse(); validationRes.Errors.ToList().Count.Should().Be(4); msiConfig.InstanceName = "test"; validationRes = msiConfig.Validate(); validationRes.IsValid.Should().BeFalse(); validationRes.Errors.ToList().Count.Should().Be(3); msiConfig.TenantId = "test"; validationRes = msiConfig.Validate(); validationRes.IsValid.Should().BeFalse(); validationRes.Errors.ToList().Count.Should().Be(2); msiConfig.DatabaseName = "test"; validationRes = msiConfig.Validate(); validationRes.IsValid.Should().BeFalse(); validationRes.Errors.ToList().Count.Should().Be(1); msiConfig.SubscriptionId = "test"; validationRes = msiConfig.Validate(); validationRes.IsValid.Should().BeTrue(); validationRes.Errors.ToList().Count.Should().Be(0); msiConfig.ToString().Length.Should().BeGreaterThan(0); }
/// <summary> /// Initializes a new instance of ServiceBusMessenger with Managed Service Identity (MSI) authentication. /// </summary> /// <param name="config">The Msi ServiceBus configuration.</param> /// <param name="logger">The logger.</param> public ServiceBusMessenger([NotNull] MsiConfig config, ILogger logger = null) { // Ensure all required configuration is as expected. config.Validate(); Name = config.InstanceName; Logger = logger; _msiConfig = config; Config = config; }
/// <summary>Initializes a new instance of the KeyVault class using Managed Service Principle (MSI) security.</summary> /// <param name="config">Msi configuration for this instance.</param> public KeyVault([NotNull] MsiConfig config) { // Ensure the required config values are all set. config.ThrowIfInvalid(); MsiConfig = config; InstanceUri = config.Uri; Name = config.KeyVaultInstanceName; Config = config; }
/// <summary> /// Initializes a new instance of the <see cref="TableStorageBase"/> class. /// </summary> /// <param name="config">The configuration.</param> /// <param name="logger">The logger.</param> protected TableStorageBase(MsiConfig config, ILogger logger = null) { // Ensure all mandatory fields are set. config.ThrowIfInvalid(); Logger = logger; MsiConfig = config; Name = config.InstanceName; _instanceName = config.InstanceName; _subscriptionId = config.SubscriptionId; }
public void Test_MsiConfig_ConfigValidation() { // Arrange var msiConfig = new MsiConfig(); // Act/Assert - Check the msi config validation. Assert.Throws <ValidateException>(() => msiConfig.ThrowIfInvalid()); msiConfig.InstanceName = "test"; Assert.Throws <ValidateException>(() => msiConfig.ThrowIfInvalid()); msiConfig.TenantId = "test"; Assert.Throws <ValidateException>(() => msiConfig.ThrowIfInvalid()); msiConfig.SubscriptionId = "test"; AssertExtensions.DoesNotThrow(() => msiConfig.ThrowIfInvalid()); msiConfig.ToString().Should().NotBeNullOrEmpty(); }
/// <summary> /// Initializes a new instance of the <see cref="CosmosStorageBase"/> class. /// </summary> /// <param name="config">The configuration.</param> /// <param name="logger">The logger.</param> protected CosmosStorageBase(MsiConfig config, ILogger logger = null) { // Validate the config. config.ThrowIfInvalid(); Logger = logger; MsiConfig = config; Name = config.InstanceName; DatabaseName = config.DatabaseName; _instanceName = config.InstanceName; _subscriptionId = config.SubscriptionId; _createIfNotExists = config.CreateDatabaseIfNotExists; _createTableNames = config.CreateTables; _maxThroughput = config.MaxThroughput; _autoscaleDatabaseThroughput = config.AutoscaleDatabaseThroughput; }
public void Test_ServiceBusMessenger_GetAccessTokenUrlNotImplemented() { // Arrange/Act var msiConfig = new MsiConfig() { SharedAccessPolicyName = "" }; var connectionConfig = new ConnectionConfig(); var spConfig = new ServicePrincipleConfig() { SharedAccessPolicyName = "TestPolicy", InstanceName = "testSBInstance", AppId = "TestAppId", AppSecret = "TestAppSecret", TenantId = "TestTenantId", SubscriptionId = "FakeSubscriptionId" }; var serviceBus = new ServiceBusMessenger(spConfig); // Assert serviceBus.ToString().Should().NotBeNullOrEmpty(); serviceBus.Name.Should().Be("testSBInstance"); (serviceBus.Config as ServicePrincipleConfig).Should().NotBeNull(); }
public void Test_MsiConfig_Validate() { // Arrange var msiConfig = new MsiConfig() { SharedAccessPolicyName = "" }; // Act/Assert - Check the msi config validation. Assert.Throws <ArgumentException>(() => msiConfig.Validate()); msiConfig.InstanceName = "test"; Assert.Throws <ArgumentException>(() => msiConfig.Validate()); msiConfig.TenantId = "test"; Assert.Throws <ArgumentException>(() => msiConfig.Validate()); msiConfig.SubscriptionId = "test"; Assert.Throws <ArgumentException>(() => msiConfig.Validate()); msiConfig.SharedAccessPolicyName = "test"; AssertExtensions.DoesNotThrow(() => msiConfig.Validate()); msiConfig.ToString().Should().NotBeNullOrEmpty(); }
public void Test_MsiConfig_Validate() { // Arrange var msiConfig = new MsiConfig() { InstanceName = null, SubscriptionId = null, TenantId = null, Receiver = null, Sender = null }; // Act/Assert Assert.Throws <ValidateException>(() => msiConfig.ThrowIfInvalid()); Assert.Null(msiConfig.InstanceName); Assert.Null(msiConfig.Receiver); Assert.Null(msiConfig.Sender); Assert.Null(msiConfig.SubscriptionId); Assert.Null(msiConfig.TenantId); msiConfig.ToString().Should().NotBeNullOrEmpty(); }
/// <summary> /// Adds the service bus singleton instance and NamedInstanceFactory{ServiceBusInstance} configured. /// Uses MsiConfig to setup configuration. /// </summary> /// <param name="services">Service collection to extend.</param> /// <param name="config">The configuration.</param> /// <returns>Modified service collection with the IReactiveMessenger or IMessenger and NamedInstanceFactory{T} configured.</returns> public static IServiceCollection AddServiceBusSingleton <T>(this IServiceCollection services, MsiConfig config) where T : IMessageOperations { return(AddNamedInstance <T>(services, null, new ServiceBusMessenger(config))); }
/// <summary> /// Adds the service bus singleton. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="services">The services.</param> /// <param name="config">The configuration.</param> /// <returns>ServiceCollection.</returns> /// <exception cref="InvalidOperationException">Problem occurred while configuring Service Bus Manager Identify config</exception> public static IServiceCollection AddServiceBusSingleton <T>(this IServiceCollection services, MsiConfig config) where T : IMessageOperations { var serviceBusInstance = new ServiceBusMessenger(config); services.AddSingleton(typeof(T), serviceBusInstance); services.AddFactoryIfNotAdded <IMessenger>(); services.AddFactoryIfNotAdded <IReactiveMessenger>(); return(services); }
/// <summary> /// Adds the key vault singleton instance using managed identity config. /// </summary> /// <param name="services">The services.</param> /// <param name="config">The configuration.</param> /// <returns>IServiceCollection.</returns> public static IServiceCollection AddKeyVaultSingleton(this IServiceCollection services, MsiConfig config) { services.AddSingleton <ISecureVault>(new KeyVault(config)); AddFactoryIfNotAdded(services); return(services); }
/// <summary> /// Initializes a new instance of the <see cref="BlobStorage" /> class with Managed Service Identity (MSI) authentication. /// </summary> /// <param name="config">The Managed Service Identity (MSI) configuration for connecting to storage.</param> /// <param name="logger">The logger.</param> public BlobStorage([NotNull] MsiConfig config, [MaybeNull] ILogger logger = null) : base(config, logger) { }
/// <summary> /// Initializes a new instance of ServiceBusMessenger with Managed Service Identity (MSI) authentication. /// </summary> /// <param name="config">The Msi ServiceBus configuration.</param> /// <param name="logger">The logger.</param> public StorageQueueMessenger([NotNull] MsiConfig config, ILogger logger = null) : base(config, logger) { }
/// <summary> /// Adds an instance of Azure cosmos storage as a singleton, using managed user config to setup. /// </summary> /// <param name="services">The services to extend.</param> /// <param name="config">The configuration to initialise with.</param> /// <returns>IServiceCollection.</returns> public static IServiceCollection AddCosmosStorageSingleton(this IServiceCollection services, MsiConfig config) { services.AddSingleton <ITableStorage>(new CosmosStorage(config)); services.AddFactoryIfNotAdded <ITableStorage>(); return(services); }
/// <summary> /// Adds the state storage singleton. /// </summary> /// <param name="services">The services.</param> /// <param name="config">The configuration.</param> /// <returns>IServiceCollection.</returns> public static IServiceCollection AddStateStorageSingleton(this IServiceCollection services, MsiConfig config) { var instance = new Cloud.Core.Storage.AzureTableStorage.TableStorage(config) { Name = $"{config.InstanceName}-StateStorage" }; services.AddSingleton <IStateStorage>(instance); return(services); }
/// <summary> /// Adds an instance of Azure Table storage as a singleton, using managed user config to setup. /// </summary> /// <param name="services">The services to extend.</param> /// <param name="config">The configuration to initialise with.</param> /// <returns>IServiceCollection.</returns> public static IServiceCollection AddTableStorageSingleton(this IServiceCollection services, MsiConfig config) { services.AddSingleton <ITableStorage>(new Cloud.Core.Storage.AzureTableStorage.TableStorage(config)); services.AddFactoryIfNotAdded <ITableStorage>(); return(services); }
/// <summary> /// Adds the service bus singleton instance and NamedInstanceFactory{ServiceBusInstance} configured. /// Uses MsiConfig to setup configuration. /// </summary> /// <param name="services">Service collection to extend.</param> /// <param name="config">The configuration.</param> /// <returns>Modified service collection with the ServiceBusMessenger and NamedInstanceFactory{ServiceBusMessenger} configured.</returns> public static IServiceCollection AddServiceBusSingleton(this IServiceCollection services, MsiConfig config) { return(AddNamedInstance <ServiceBusMessenger>(services, null, new ServiceBusMessenger(config))); }
[ExcludeFromCodeCoverage] //excluded as Msi isn't part of the build pipeline for testing. public static IConfigurationBuilder AddKeyVaultSecrets(this IConfigurationBuilder builder, MsiConfig config, params string[] keys) { try { var vault = new KeyVault(config); var secrets = new List <KeyValuePair <string, string> >(); // Gather secrets from Key Vault foreach (var key in keys) { try { var value = vault.GetSecret(key).GetAwaiter().GetResult(); secrets.Add(new KeyValuePair <string, string>(key, value)); } catch (KeyVaultErrorException e) { // Do nothing if it fails to find the value. Console.WriteLine($"Failed to find keyvault setting: {key}, exception: {e.Message}"); } } // Add them to config. if (secrets.Any()) { builder.AddInMemoryCollection(secrets); } // Keep track of instance. KeyVaultInstance = vault; // Return updated builder. return(builder); } catch (Exception ex) { throw new InvalidOperationException("Problem occurred retrieving secrets from KeyVault using Managed Identity", ex); } }