116 lines
3.8 KiB
C#
116 lines
3.8 KiB
C#
using MxGateway.Contracts;
|
|
using MxGateway.Worker.Bootstrap;
|
|
|
|
namespace MxGateway.Worker.Tests.Bootstrap;
|
|
|
|
public sealed class WorkerOptionsParserTests
|
|
{
|
|
[Fact]
|
|
public void Parse_WithAllRequiredInputs_ReturnsWorkerOptions()
|
|
{
|
|
WorkerOptionsParser parser = new(CreateEnvironment("nonce-secret"));
|
|
|
|
WorkerBootstrapResult result = parser.Parse(ValidArgs());
|
|
|
|
Assert.True(result.Succeeded);
|
|
Assert.Equal(WorkerExitCode.Success, result.ExitCode);
|
|
Assert.NotNull(result.Options);
|
|
Assert.Equal("session-1", result.Options.SessionId);
|
|
Assert.Equal("mxaccess-gateway-123-session-1", result.Options.PipeName);
|
|
Assert.Equal(GatewayContractInfo.WorkerProtocolVersion, result.Options.ProtocolVersion);
|
|
Assert.Equal("nonce-secret", result.Options.Nonce);
|
|
}
|
|
|
|
[Fact]
|
|
public void Parse_WithMissingSessionId_ReturnsInvalidArguments()
|
|
{
|
|
WorkerOptionsParser parser = new(CreateEnvironment("nonce-secret"));
|
|
|
|
WorkerBootstrapResult result = parser.Parse(
|
|
[
|
|
"--pipe-name",
|
|
"mxaccess-gateway-123-session-1",
|
|
"--protocol-version",
|
|
GatewayContractInfo.WorkerProtocolVersion.ToString(),
|
|
]);
|
|
|
|
Assert.False(result.Succeeded);
|
|
Assert.Equal(WorkerExitCode.InvalidArguments, result.ExitCode);
|
|
Assert.Contains(result.Errors, error => error.Contains("--session-id"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Parse_WithUnknownOption_ReturnsInvalidArguments()
|
|
{
|
|
WorkerOptionsParser parser = new(CreateEnvironment("nonce-secret"));
|
|
|
|
WorkerBootstrapResult result = parser.Parse(
|
|
[
|
|
"--session-id",
|
|
"session-1",
|
|
"--pipe-name",
|
|
"mxaccess-gateway-123-session-1",
|
|
"--protocol-version",
|
|
GatewayContractInfo.WorkerProtocolVersion.ToString(),
|
|
"--unexpected",
|
|
"value",
|
|
]);
|
|
|
|
Assert.Equal(WorkerExitCode.InvalidArguments, result.ExitCode);
|
|
Assert.Contains(result.Errors, error => error.Contains("Unknown option"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Parse_WithNonNumericProtocolVersion_ReturnsInvalidProtocolVersion()
|
|
{
|
|
WorkerOptionsParser parser = new(CreateEnvironment("nonce-secret"));
|
|
|
|
WorkerBootstrapResult result = parser.Parse(ValidArgs(protocolVersion: "abc"));
|
|
|
|
Assert.False(result.Succeeded);
|
|
Assert.Equal(WorkerExitCode.InvalidProtocolVersion, result.ExitCode);
|
|
}
|
|
|
|
[Fact]
|
|
public void Parse_WithUnsupportedProtocolVersion_ReturnsInvalidProtocolVersion()
|
|
{
|
|
WorkerOptionsParser parser = new(CreateEnvironment("nonce-secret"));
|
|
|
|
WorkerBootstrapResult result = parser.Parse(ValidArgs(protocolVersion: "999"));
|
|
|
|
Assert.False(result.Succeeded);
|
|
Assert.Equal(WorkerExitCode.InvalidProtocolVersion, result.ExitCode);
|
|
}
|
|
|
|
[Fact]
|
|
public void Parse_WithMissingNonce_ReturnsMissingNonce()
|
|
{
|
|
WorkerOptionsParser parser = new(new MemoryWorkerEnvironment());
|
|
|
|
WorkerBootstrapResult result = parser.Parse(ValidArgs());
|
|
|
|
Assert.False(result.Succeeded);
|
|
Assert.Equal(WorkerExitCode.MissingNonce, result.ExitCode);
|
|
}
|
|
|
|
private static string[] ValidArgs(string? protocolVersion = null)
|
|
{
|
|
return
|
|
[
|
|
"--session-id",
|
|
"session-1",
|
|
"--pipe-name",
|
|
"mxaccess-gateway-123-session-1",
|
|
"--protocol-version",
|
|
protocolVersion ?? GatewayContractInfo.WorkerProtocolVersion.ToString(),
|
|
];
|
|
}
|
|
|
|
private static MemoryWorkerEnvironment CreateEnvironment(string nonce)
|
|
{
|
|
MemoryWorkerEnvironment environment = new();
|
|
environment.Set(WorkerOptions.NonceEnvironmentVariableName, nonce);
|
|
return environment;
|
|
}
|
|
}
|