public async Task VaultConfiguration_ReloadsValue(VaultKeyValueEngineVersion version)
        {
            // Arrange
            var engine = await _vaultClient.CreateEngineAsync(_engineName, version);

            await engine.SetSecretValueAsync("secret", new { key = "value" });

            // Act
            var config = Configure(vault =>
            {
                vault.Engine.Version = version;
                vault.ReloadOnChange = true;
                vault.ReloadDelay    = TimeSpan.FromMilliseconds(100);
            });

            Assert.Equal("value", config.GetValue <string>("secret:key"));

            var tcs = new TaskCompletionSource <object>();

            using var callback = config.GetReloadToken().RegisterChangeCallback(_ => tcs.SetResult(_), null);

            await engine.SetSecretValueAsync("secret", new { key = "new" });

            await tcs.Task;

            // Assert
            Assert.Equal("new", config.GetValue <string>("secret:key"));
        }
        public async Task VaultConfiguration_ReadsSimpleValue(VaultKeyValueEngineVersion version)
        {
            // Arrange
            var engine = await _vaultClient.CreateEngineAsync(_engineName, version);

            await engine.SetSecretValueAsync("secret", new { key = "value" });

            // Act
            var config = Configure(vault => { vault.Engine.Version = version; });

            // Assert
            Assert.Equal("value", config.GetValue <string>("secret:key"));
        }
        public void VaultConfiguration_NoEngine_ReadsNothingIfOptional(VaultKeyValueEngineVersion version)
        {
            // Act
            var config = Configure(
                vault =>
            {
                vault.Engine.Version = version;
                vault.Optional       = true;
            });

            // Assert
            Assert.Null(config.GetValue <string>("secret"));
        }
예제 #4
0
        private static SecretsEngineType MapType(VaultKeyValueEngineVersion version)
        {
            switch (version)
            {
            case VaultKeyValueEngineVersion.V1:
                return(SecretsEngineType.KeyValueV1);

            case VaultKeyValueEngineVersion.V2:
                return(SecretsEngineType.KeyValueV2);

            default:
                throw new ArgumentOutOfRangeException(nameof(version));
            }
        }
        public void VaultConfiguration_NoEngine_ThrowsIfNotOptional(VaultKeyValueEngineVersion version)
        {
            // Act
            var exception = Assert.Throws <VaultEngineNotFoundException>(
                () => Configure(
                    vault =>
            {
                vault.Engine.Version = version;
                vault.Optional       = false;
            }));

            // Assert
            Assert.Equal(_engineName, exception.EngineName);
        }
        public async Task VaultConfiguration_ReadsJsonValue(VaultKeyValueEngineVersion version)
        {
            // Arrange
            var engine = await _vaultClient.CreateEngineAsync(_engineName, version);

            var json = new
            {
                key1 = "value1",
                key2 = "value2"
            };

            await engine.SetSecretValueAsync("secret", new { json });

            // Act
            var config = Configure(vault => { vault.Engine.Version = version; });

            // Assert
            Assert.Equal("value1", config.GetValue <string>("secret:json:key1"));
            Assert.Equal("value2", config.GetValue <string>("secret:json:key2"));
        }
예제 #7
0
        public static async Task <Engine> CreateEngineAsync(this VaultClient client, string engine, VaultKeyValueEngineVersion version)
        {
            await client.V1.System.MountSecretBackendAsync(
                new SecretsEngine
            {
                Type = MapType(version),
                Path = engine
            }).ConfigureAwait(false);

            return(new Engine(client, engine, version));
        }
예제 #8
0
 public Engine(VaultClient client, string name, VaultKeyValueEngineVersion version)
 {
     _client  = client;
     _name    = name;
     _version = version;
 }