Skip to content

Commit 8f94cf4

Browse files
authored
Merge pull request #1 from MrZoidberg/integration-tests
Integration tests
2 parents 3a3f42e + 1cfb8c5 commit 8f94cf4

File tree

3 files changed

+91
-4
lines changed

3 files changed

+91
-4
lines changed

Source/VaultSharp.Extensions.Configuration/VaultOptions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class VaultOptions
1212
/// <param name="vaultToken">Vault token.</param>
1313
/// <param name="vaultSecret">Vault secret.</param>
1414
/// <param name="vaultRoleId">Vault Role ID.</param>
15-
public VaultOptions(string vaultAddress, string? vaultToken, string? vaultSecret, string? vaultRoleId)
15+
public VaultOptions(string vaultAddress, string? vaultToken, string? vaultSecret = null, string? vaultRoleId = null)
1616
{
1717
this.VaultAddress = vaultAddress;
1818
this.VaultToken = vaultToken;
@@ -26,17 +26,17 @@ public VaultOptions(string vaultAddress, string? vaultToken, string? vaultSecret
2626
public string VaultAddress { get; }
2727

2828
/// <summary>
29-
/// Gets Vault access token.
29+
/// Gets Vault access token. Used for token-based authentication.
3030
/// </summary>
3131
public string? VaultToken { get; }
3232

3333
/// <summary>
34-
/// Gets Vault secret.
34+
/// Gets Vault secret. Used for role-based authentication.
3535
/// </summary>
3636
public string? VaultSecret { get; }
3737

3838
/// <summary>
39-
/// Gets Vault role identifier.
39+
/// Gets Vault role identifier. Used for role-based authentication.
4040
/// </summary>
4141
public string? VaultRoleId { get; }
4242
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
namespace VaultSharp.Extensions.Configuration.Test
2+
{
3+
using System.Collections.Generic;
4+
using System.Threading.Tasks;
5+
using DotNet.Testcontainers.Containers.Builders;
6+
using DotNet.Testcontainers.Containers.Modules;
7+
using DotNet.Testcontainers.Containers.WaitStrategies;
8+
using FluentAssertions;
9+
using Microsoft.Extensions.Configuration;
10+
using VaultSharp.V1.AuthMethods.Token;
11+
using Xunit;
12+
13+
public class IntegrationTests
14+
{
15+
private TestcontainersContainer PrepareVaultContainer()
16+
{
17+
var testcontainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
18+
.WithImage("vault")
19+
.WithName("vaultsharp_test")
20+
.WithPortBinding(8200, 8200)
21+
.WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(8200))
22+
.WithEnvironment("VAULT_DEV_ROOT_TOKEN_ID", "root")
23+
.WithEnvironment("VAULT_DEV_LISTEN_ADDRESS", "0.0.0.0:8200");
24+
25+
return testcontainersBuilder.Build();
26+
}
27+
28+
private async Task LoadDataAsync(Dictionary<string, string> values)
29+
{
30+
var authMethod = new TokenAuthMethodInfo("root");
31+
32+
var vaultClientSettings = new VaultClientSettings("http://localhost:8200", authMethod);
33+
IVaultClient vaultClient = new VaultClient(vaultClientSettings);
34+
35+
foreach (var pair in values)
36+
{
37+
var data = new Dictionary<string, object>() { ["value"] = pair.Value };
38+
await vaultClient.V1.Secrets.KeyValue.V2.WriteSecretAsync(pair.Key, data).ConfigureAwait(false);
39+
}
40+
}
41+
42+
[Fact]
43+
public async Task Success_Test_TokenAuth()
44+
{
45+
// arrange
46+
Dictionary<string, string> values = new Dictionary<string, string>();
47+
values.Add("data/test/option1", "value1");
48+
values.Add("data/test/subsection/option2", "value2");
49+
50+
var container = this.PrepareVaultContainer();
51+
try
52+
{
53+
await container.StartAsync().ConfigureAwait(false);
54+
await this.LoadDataAsync(values).ConfigureAwait(false);
55+
56+
// act
57+
ConfigurationBuilder builder = new ConfigurationBuilder();
58+
builder.AddVaultConfiguration(
59+
() => new VaultOptions("http://localhost:8200", "root"), "test", "secret");
60+
var configurationRoot = builder.Build();
61+
62+
// assert
63+
configurationRoot.GetValue<string>("option1").Should().Be(values["data/test/option1"]);
64+
configurationRoot.GetSection("subsection").GetValue<string>("option2").Should()
65+
.Be(values["data/test/subsection/option2"]);
66+
}
67+
finally
68+
{
69+
await container.DisposeAsync().ConfigureAwait(false);
70+
}
71+
}
72+
}
73+
}

Tests/VaultSharp.Extensions.Configuration.Test/VaultSharp.Extensions.Configuration.Test.csproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,24 @@
22

33
<PropertyGroup Label="Build">
44
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
</PropertyGroup>
7+
8+
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
9+
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
10+
</PropertyGroup>
11+
12+
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
13+
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
514
</PropertyGroup>
615

716
<ItemGroup Label="Project References">
817
<ProjectReference Include="..\..\Source\VaultSharp.Extensions.Configuration\VaultSharp.Extensions.Configuration.csproj" />
918
</ItemGroup>
1019

20+
<ItemGroup>
21+
<PackageReference Include="DotNet.Testcontainers" Version="1.4.0" />
22+
<PackageReference Include="FluentAssertions" Version="5.10.3" />
23+
</ItemGroup>
24+
1125
</Project>

0 commit comments

Comments
 (0)