Exemplo n.º 1
0
        public void ConfigureSecretStore_WithUniqueNames_Succeeds()
        {
            // Arrange
            var name1         = $"name-{Guid.NewGuid()}";
            var stubProvider1 = new InMemorySecretProvider();
            var name2         = $"name-{Guid.NewGuid()}";
            var stubProvider2 = new InMemorySecretProvider();

            var builder = new HostBuilder();

            // Act
            builder.ConfigureSecretStore((config, stores) =>
            {
                stores.AddProvider(stubProvider1, options => options.Name = name1)
                .AddProvider(stubProvider2, options => options.Name       = name2);
            });

            // Assert
            using (IHost host = builder.Build())
            {
                var secretStore = host.Services.GetRequiredService <ISecretStore>();
                Assert.Same(stubProvider1, secretStore.GetProvider(name1));
                Assert.Same(stubProvider2, secretStore.GetProvider <InMemorySecretProvider>(name2));
            }
        }
        public async Task ConfigureSecretStore_WithoutFoundSecretProvider_ThrowsException()
        {
            // Arrange
            var builder       = new HostBuilder();
            var emptyProvider = new InMemorySecretProvider();

            // Act
            builder.ConfigureSecretStore((config, stores) => stores.AddProvider(emptyProvider));

            // Assert
            IHost host     = builder.Build();
            var   provider = host.Services.GetRequiredService <ISecretProvider>();
            await Assert.ThrowsAsync <SecretNotFoundException>(() => provider.GetSecretAsync("ignored-key"));
        }
        public async Task ConfigureSecretStore_WithNotPermittedRole_CantAccess(Role permittedRole, Role currentRole)
        {
            // Arrange
            const string       secretKey     = "MySecret";
            var                stubProvider  = new InMemorySecretProvider(secretKey, $"secret-{Guid.NewGuid()}");
            IRoleAuthorization authorization = new FixedRoleAuthorization(currentRole);
            IHostBuilder       builder       = new HostBuilder().ConfigureServices(services => services.AddSingleton(authorization));

            // Act
            builder.ConfigureSecretStore((config, stores) =>
            {
                stores.AddProvider(new InMemorySecretProvider())
                .AuthorizedWithin(permittedRole, x => x.AddProvider(stubProvider));
            });

            // Assert
            IHost host     = builder.Build();
            var   provider = host.Services.GetRequiredService <ISecretProvider>();

            await Assert.ThrowsAsync <AuthorizationException>(() => provider.GetRawSecretAsync(secretKey));
        }
        public async Task ConfigureSecretStore_WithInvalidExceptionFilter_CatchesGeneral()
        {
            // Arrange
            var stubProvider = new InMemorySecretProvider();
            var builder      = new HostBuilder();

            // Act
            builder.ConfigureSecretStore((config, stores) =>
            {
                stores.AddCriticalException <CryptographicException>(
                    ex => throw new Exception("Throw something to let the exception filter fail"));

                stores.AddProvider(stubProvider);
            });

            // Assert
            IHost host     = builder.Build();
            var   provider = host.Services.GetRequiredService <ISecretProvider>();

            await Assert.ThrowsAsync <SecretNotFoundException>(() => provider.GetRawSecretAsync("some secret name"));
        }
Exemplo n.º 5
0
        public void ConfigureSecretStore_WithoutNamedProviderT_Fails()
        {
            // Arrange
            var stubProvider1 = new InMemorySecretProvider();
            var stubProvider2 = new InMemorySecretProvider();
            var builder       = new HostBuilder();

            // Act
            builder.ConfigureSecretStore((config, stores) =>
            {
                stores.AddProvider(stubProvider1)
                .AddProvider(stubProvider2);
            });

            // Assert
            using (IHost host = builder.Build())
            {
                var store = host.Services.GetRequiredService <ISecretStore>();
                Assert.Throws <KeyNotFoundException>(() => store.GetCachedProvider <InMemoryCachedSecretProvider>("some ignored name"));
            }
        }
Exemplo n.º 6
0
        public void ConfigureSecretStore_WithoutCachedProviderT_FailsWhenRetrievedCachedProvider()
        {
            // Arrange
            var name          = $"provider-{Guid.NewGuid()}";
            var stubProvider1 = new InMemorySecretProvider();
            var stubProvider2 = new InMemoryCachedSecretProvider();
            var builder       = new HostBuilder();

            // Act
            builder.ConfigureSecretStore((config, stores) =>
            {
                stores.AddProvider(stubProvider1, options => options.Name = name)
                .AddProvider(stubProvider2);
            });

            // Assert
            using (IHost host = builder.Build())
            {
                var store = host.Services.GetRequiredService <ISecretStore>();
                Assert.Throws <NotSupportedException>(() => store.GetCachedProvider <InMemoryCachedSecretProvider>(name));
            }
        }
Exemplo n.º 7
0
        public void ConfigureSecretStore_WithNamedProviderT_RetrievedCorrectProvider()
        {
            // Arrange
            var name          = $"provider-{Guid.NewGuid()}";
            var stubProvider1 = new InMemorySecretProvider();
            var stubProvider2 = new InMemorySecretProvider();
            var builder       = new HostBuilder();

            // Act
            builder.ConfigureSecretStore((config, stores) =>
            {
                stores.AddProvider(stubProvider1, options => options.Name = name)
                .AddProvider(stubProvider2);
            });

            // Assert
            using (IHost host = builder.Build())
            {
                var store  = host.Services.GetRequiredService <ISecretStore>();
                var actual = store.GetProvider <InMemorySecretProvider>(name);
                Assert.Same(stubProvider1, actual);
                Assert.NotSame(stubProvider2, actual);
            }
        }