mishima-nexus-client-csharp/tests/Robotico.Nexus.Client.Tests/NexusClientOptionsTests.cs

104 lines
3.2 KiB
C#
Raw Normal View History

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));
}
}