104 lines
3.2 KiB
C#
104 lines
3.2 KiB
C#
|
|
using Xunit;
|
||
|
|
|
||
|
|
namespace Robotico.Nexus.Client.Tests;
|
||
|
|
|
||
|
|
[Collection("NexusTlsEnvironment")]
|
||
|
|
public class NexusClientOptionsTests : IDisposable
|
||
|
|
{
|
||
|
|
public void Dispose()
|
||
|
|
{
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_TLS_CA_FILE", null);
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_TLS_CLIENT_CERT_FILE", null);
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_TLS_CLIENT_KEY_FILE", null);
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_TLS_MODE", null);
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_WIRE_BEARER", null);
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_WIRE_DEFAULT_BEARER", null);
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveTls_PrefersExplicitOption_OverEnvironment()
|
||
|
|
{
|
||
|
|
string dir = Directory.CreateTempSubdirectory("nexus-opts-test-").FullName;
|
||
|
|
try
|
||
|
|
{
|
||
|
|
string ca = Path.Combine(dir, "ca.pem");
|
||
|
|
File.WriteAllText(ca, "ca");
|
||
|
|
NexusTlsMaterial explicitMaterial = new(ca, ca, ca);
|
||
|
|
NexusClientOptions options = new() { Tls = explicitMaterial };
|
||
|
|
|
||
|
|
Assert.Same(explicitMaterial, options.ResolveTls());
|
||
|
|
}
|
||
|
|
finally
|
||
|
|
{
|
||
|
|
Directory.Delete(dir, recursive: true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveTls_FallsBackTo_Environment_WhenUnset()
|
||
|
|
{
|
||
|
|
NexusClientOptions options = new();
|
||
|
|
|
||
|
|
Assert.Null(options.ResolveTls());
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveBearerToken_PrefersExplicitOption()
|
||
|
|
{
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_WIRE_BEARER", "from-env");
|
||
|
|
NexusClientOptions options = new() { BearerToken = "explicit" };
|
||
|
|
|
||
|
|
Assert.Equal("explicit", options.ResolveBearerToken());
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveBearerToken_FallsBackTo_PrimaryEnvVar_ThenDefaultEnvVar()
|
||
|
|
{
|
||
|
|
NexusClientOptions options = new();
|
||
|
|
Assert.Null(options.ResolveBearerToken());
|
||
|
|
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_WIRE_DEFAULT_BEARER", "default-env");
|
||
|
|
Assert.Equal("default-env", options.ResolveBearerToken());
|
||
|
|
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_WIRE_BEARER", "primary-env");
|
||
|
|
Assert.Equal("primary-env", options.ResolveBearerToken());
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveUseHttps_UsesTlsMaterialValue_WhenTlsPresent()
|
||
|
|
{
|
||
|
|
string dir = Directory.CreateTempSubdirectory("nexus-opts-test-").FullName;
|
||
|
|
try
|
||
|
|
{
|
||
|
|
string ca = Path.Combine(dir, "ca.pem");
|
||
|
|
File.WriteAllText(ca, "ca");
|
||
|
|
NexusTlsMaterial material = new(ca, ca, ca, useHttps: false);
|
||
|
|
NexusClientOptions options = new();
|
||
|
|
|
||
|
|
Assert.False(options.ResolveUseHttps(material));
|
||
|
|
}
|
||
|
|
finally
|
||
|
|
{
|
||
|
|
Directory.Delete(dir, recursive: true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveUseHttps_UsesExplicitOption_WhenNoTlsMaterial()
|
||
|
|
{
|
||
|
|
NexusClientOptions options = new() { UseHttps = true };
|
||
|
|
|
||
|
|
Assert.True(options.ResolveUseHttps(null));
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveUseHttps_FallsBackTo_EnvironmentMode_WhenNothingElseSet()
|
||
|
|
{
|
||
|
|
NexusClientOptions options = new();
|
||
|
|
Assert.False(options.ResolveUseHttps(null));
|
||
|
|
|
||
|
|
Environment.SetEnvironmentVariable("NEXUS_TLS_MODE", "https");
|
||
|
|
Assert.True(options.ResolveUseHttps(null));
|
||
|
|
}
|
||
|
|
}
|