public async Task AddSecretStore_WithSpecificCriticalExceptionFilter_ThrowsSpecificCriticalExceptionThatMatchesFilter() { // Arrange const string expectedMessage = "This is a specific message"; var stubProvider1 = new SaboteurSecretProvider(new AuthenticationException(expectedMessage)); var stubProvider2 = new SaboteurSecretProvider(new AuthenticationException("This is a different message")); var services = new ServiceCollection(); // Act services.AddSecretStore(stores => { stores.AddCriticalException <AuthenticationException>(ex => ex.Message == expectedMessage) .AddProvider(stubProvider1) .AddProvider(stubProvider2); }); // Assert IServiceProvider serviceProvider = services.BuildServiceProvider(); var provider = serviceProvider.GetRequiredService <ISecretProvider>(); var exception = await Assert.ThrowsAsync <AuthenticationException>(() => provider.GetRawSecretAsync("some secret name")); Assert.Equal(expectedMessage, exception.Message); }
public async Task AddSecretStore_WithMultipleSpecificCriticalExceptions_ThrowsAggregateExceptionWithAllThrownCriticalExceptionsWhenThrownInSecretProvider() { // Arrange var stubProvider1 = new SaboteurSecretProvider(new CryptographicException("Some cryptographic failure")); var stubProvider2 = new SaboteurSecretProvider(new AuthenticationException("Some authentication failure")); var services = new ServiceCollection(); // Act services.AddSecretStore(stores => { stores.AddCriticalException <CryptographicException>() .AddCriticalException <AuthenticationException>() .AddProvider(stubProvider1) .AddProvider(stubProvider2); }); // Assert IServiceProvider serviceProvider = services.BuildServiceProvider(); var provider = serviceProvider.GetRequiredService <ISecretProvider>(); var exception = await Assert.ThrowsAsync <AggregateException>(() => provider.GetSecretAsync("some secret name")); Assert.Collection(exception.InnerExceptions, ex => Assert.IsType <CryptographicException>(ex), ex => Assert.IsType <AuthenticationException>(ex)); }
public async Task GetSecret_WithCriticalException_ThrowsThroughMutatedSecretProvider() { // Arrange var saboteurProvider = new SaboteurSecretProvider(new AuthenticationException("Some authentication failure")); var builder = new HostBuilder(); // Act builder.ConfigureSecretStore((config, stores) => { stores.AddProvider(saboteurProvider, name => "Extra.Ignored.Prefix-" + name) .AddCriticalException <AuthenticationException>(); }); // Assert IHost host = builder.Build(); var provider = host.Services.GetRequiredService <ISecretProvider>(); await Assert.ThrowsAsync <AuthenticationException>(() => provider.GetSecretAsync("some secret name")); }
public async Task ConfigureSecretStore_WithSpecificCriticalException_ThrowsCriticalExceptionWhenThrownInSecretProvider() { // Arrange var stubProvider = new SaboteurSecretProvider(new AuthenticationException("Some authentication failure")); var builder = new HostBuilder(); // Act builder.ConfigureSecretStore((config, stores) => { stores.AddCriticalException <AuthenticationException>() .AddProvider(stubProvider); }); // Assert IHost host = builder.Build(); var provider = host.Services.GetRequiredService <ISecretProvider>(); await Assert.ThrowsAsync <AuthenticationException>(() => provider.GetRawSecretAsync("some secret name")); }