private static ICacheableKeyRingProvider SetupCreateCacheableKeyRingTestAndCreateKeyManager( IList <string> callSequence, IEnumerable <CancellationToken> getCacheExpirationTokenReturnValues, IEnumerable <IReadOnlyCollection <IKey> > getAllKeysReturnValues, IEnumerable <Tuple <DateTimeOffset, DateTimeOffset, IKey> > createNewKeyCallbacks, IEnumerable <Tuple <DateTimeOffset, IEnumerable <IKey>, DefaultKeyResolution> > resolveDefaultKeyPolicyReturnValues, KeyRotationOptions keyManagementOptions = null) { var getCacheExpirationTokenReturnValuesEnumerator = getCacheExpirationTokenReturnValues.GetEnumerator(); var mockKeyManager = new Mock <IKeyManager>(MockBehavior.Strict); mockKeyManager.Setup(o => o.GetCacheExpirationToken()) .Returns(() => { callSequence.Add("GetCacheExpirationToken"); getCacheExpirationTokenReturnValuesEnumerator.MoveNext(); return(getCacheExpirationTokenReturnValuesEnumerator.Current); }); var getAllKeysReturnValuesEnumerator = getAllKeysReturnValues.GetEnumerator(); mockKeyManager.Setup(o => o.GetAllKeys()) .Returns(() => { callSequence.Add("GetAllKeys"); getAllKeysReturnValuesEnumerator.MoveNext(); return(getAllKeysReturnValuesEnumerator.Current); }); if (createNewKeyCallbacks != null) { var createNewKeyCallbacksEnumerator = createNewKeyCallbacks.GetEnumerator(); mockKeyManager.Setup(o => o.CreateNewKey(It.IsAny <DateTimeOffset>(), It.IsAny <DateTimeOffset>())) .Returns <DateTimeOffset, DateTimeOffset>((activationDate, expirationDate) => { callSequence.Add("CreateNewKey"); createNewKeyCallbacksEnumerator.MoveNext(); Assert.Equal(createNewKeyCallbacksEnumerator.Current.Item1, activationDate); Assert.Equal(createNewKeyCallbacksEnumerator.Current.Item2, expirationDate); return(createNewKeyCallbacksEnumerator.Current.Item3); }); } var resolveDefaultKeyPolicyReturnValuesEnumerator = resolveDefaultKeyPolicyReturnValues.GetEnumerator(); var mockDefaultKeyResolver = new Mock <IDefaultKeyResolver>(MockBehavior.Strict); mockDefaultKeyResolver.Setup(o => o.ResolveDefaultKeyPolicy(It.IsAny <DateTimeOffset>(), It.IsAny <IEnumerable <IKey> >())) .Returns <DateTimeOffset, IEnumerable <IKey> >((now, allKeys) => { callSequence.Add("ResolveDefaultKeyPolicy"); resolveDefaultKeyPolicyReturnValuesEnumerator.MoveNext(); Assert.Equal(resolveDefaultKeyPolicyReturnValuesEnumerator.Current.Item1, now); Assert.Equal(resolveDefaultKeyPolicyReturnValuesEnumerator.Current.Item2, allKeys); return(resolveDefaultKeyPolicyReturnValuesEnumerator.Current.Item3); }); return(CreateKeyRingProvider(mockKeyManager.Object, mockDefaultKeyResolver.Object, keyManagementOptions)); }
public void ConfigureService_should_configure_mongodb_services() { var documentStoreMock = new Mock <IDocumentStore>(); var sessionMock = new Mock <IAsyncDocumentSession>(); var advancedMock = new Mock <IAsyncAdvancedSessionOperations>(); sessionMock.SetupGet(m => m.Advanced).Returns(advancedMock.Object); documentStoreMock.Setup(m => m.OpenAsyncSession(It.IsAny <SessionOptions>())).Returns(sessionMock.Object); using var sut = new HostBuilder() .ConfigureAppConfiguration(builder => { builder.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"..\..\..\..\..\src\Aguacongas.TheIdServer\appsettings.json")); builder.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"appsettings.Test.json"), true); builder.AddInMemoryCollection(new Dictionary <string, string> { ["DbType"] = DbTypes.RavenDb.ToString(), ["IdentityServer:Key:StorageKind"] = StorageKind.MongoDb.ToString(), ["DataProtectionOptions:StorageKind"] = StorageKind.MongoDb.ToString(), ["Seed"] = "false" }); }) .ConfigureServices((context, services) => { var startup = new Startup(context.Configuration, null); services.AddSingleton(p => documentStoreMock.Object); startup.ConfigureServices(services); services.AddSingleton(p => documentStoreMock.Object); }).Build(); var provider = sut.Services; Assert.NotNull(provider.GetService <IAdminStore <ApiClaim> >()); var configureRotationOptions = provider.GetService <IConfigureOptions <KeyRotationOptions> >(); var rotationOptions = new KeyRotationOptions(); configureRotationOptions.Configure(rotationOptions); Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.KeyRotationKey> >(rotationOptions.XmlRepository); var configureManagementOptions = provider.GetService <IConfigureOptions <KeyManagementOptions> >(); var managementOptions = new KeyRotationOptions(); configureManagementOptions.Configure(managementOptions); Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.DataProtectionKey> >(managementOptions.XmlRepository); }
private static KeyRingProvider CreateKeyRingProvider(ICacheableKeyRingProvider cacheableKeyRingProvider) { var mockEncryptorFactory = new Mock <IAuthenticatedEncryptorFactory>(); mockEncryptorFactory.Setup(m => m.CreateEncryptorInstance(It.IsAny <IKey>())).Returns(new Mock <IAuthenticatedEncryptor>().Object); var options = new KeyRotationOptions { KeyPropagationWindow = TimeSpan.FromDays(2) }; options.AuthenticatedEncryptorFactories.Add(mockEncryptorFactory.Object); return(new KeyRingProvider( keyManager: null, keyManagementOptions: Options.Create(options), defaultKeyResolver: null, loggerFactory: NullLoggerFactory.Instance) { CacheableKeyRingProvider = cacheableKeyRingProvider }); }
public void ConfigureService_should_configure_mongodb_services() { var sessionMock = new Mock <IAsyncDocumentSession>(); var advancedMock = new Mock <IAsyncAdvancedSessionOperations>(); sessionMock.SetupGet(m => m.Advanced).Returns(advancedMock.Object); using var sut = new HostBuilder() .ConfigureServices((context, services) => { var configurationManager = new ConfigurationManager(); configurationManager.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"appsettings.json")); configurationManager.AddJsonFile(Path.Combine(Environment.CurrentDirectory, @"appsettings.Test.json"), true); configurationManager.AddInMemoryCollection(new Dictionary <string, string> { ["DbType"] = DbTypes.MongoDb.ToString(), ["ConnectionStrings:DefaultConnection"] = "mongodb://localhost/test", ["IdentityServer:Key:StorageKind"] = StorageKind.MongoDb.ToString(), ["DataProtectionOptions:StorageKind"] = StorageKind.MongoDb.ToString(), ["Seed"] = "false" }); services.AddTheIdServer(configurationManager); }).Build(); var provider = sut.Services; Assert.NotNull(provider.GetService <IAdminStore <ApiClaim> >()); var configureRotationOptions = provider.GetService <IConfigureOptions <KeyRotationOptions> >(); var rotationOptions = new KeyRotationOptions(); configureRotationOptions?.Configure(rotationOptions); Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.KeyRotationKey> >(rotationOptions.XmlRepository); var configureManagementOptions = provider.GetService <IConfigureOptions <KeyManagementOptions> >(); var managementOptions = new KeyRotationOptions(); configureManagementOptions?.Configure(managementOptions); Assert.IsType <MongoDb.MongoDbXmlRepository <MongoDb.DataProtectionKey> >(managementOptions.XmlRepository); }
private static ICacheableKeyRingProvider CreateKeyRingProvider(IKeyManager keyManager, IDefaultKeyResolver defaultKeyResolver, KeyRotationOptions keyManagementOptions = null) { var mockEncryptorFactory = new Mock <IAuthenticatedEncryptorFactory>(); mockEncryptorFactory.Setup(m => m.CreateEncryptorInstance(It.IsAny <IKey>())).Returns(new Mock <IAuthenticatedEncryptor>().Object); keyManagementOptions = keyManagementOptions ?? new KeyRotationOptions(); keyManagementOptions.AuthenticatedEncryptorFactories.Add(mockEncryptorFactory.Object); return(new KeyRingProvider( keyManager: keyManager, keyManagementOptions: Options.Create(keyManagementOptions), defaultKeyResolver: defaultKeyResolver, loggerFactory: NullLoggerFactory.Instance)); }