85 lines
2.4 KiB
C#
85 lines
2.4 KiB
C#
namespace LibNftables.Tests;
|
|
|
|
public sealed class NftContextTests
|
|
{
|
|
[Fact]
|
|
public void ContextFlagsRoundTrip_Works()
|
|
{
|
|
if (!NativeTestSupport.TryCreateContext(out var ctx))
|
|
{
|
|
return;
|
|
}
|
|
|
|
using (ctx)
|
|
{
|
|
ctx.DryRun = true;
|
|
Assert.True(ctx.DryRun);
|
|
|
|
ctx.OptimizeFlags = NftOptimizeFlags.Enabled;
|
|
Assert.True(ctx.OptimizeFlags.HasFlag(NftOptimizeFlags.Enabled));
|
|
|
|
ctx.InputFlags = NftInputFlags.NoDns | NftInputFlags.Json;
|
|
Assert.True(ctx.InputFlags.HasFlag(NftInputFlags.NoDns));
|
|
Assert.True(ctx.InputFlags.HasFlag(NftInputFlags.Json));
|
|
|
|
ctx.OutputFlags = NftOutputFlags.Json | NftOutputFlags.Echo | NftOutputFlags.Terse;
|
|
Assert.True(ctx.OutputFlags.HasFlag(NftOutputFlags.Json));
|
|
Assert.True(ctx.OutputFlags.HasFlag(NftOutputFlags.Echo));
|
|
Assert.True(ctx.OutputFlags.HasFlag(NftOutputFlags.Terse));
|
|
|
|
ctx.DebugFlags = NftDebugLevel.Parser | NftDebugLevel.Scanner;
|
|
Assert.True(ctx.DebugFlags.HasFlag(NftDebugLevel.Parser));
|
|
Assert.True(ctx.DebugFlags.HasFlag(NftDebugLevel.Scanner));
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void InvalidCommand_ThrowsNftExceptionWithErrorBuffer()
|
|
{
|
|
if (!NativeTestSupport.TryCreateContext(out var ctx))
|
|
{
|
|
return;
|
|
}
|
|
|
|
using (ctx)
|
|
{
|
|
ctx.DryRun = true;
|
|
ctx.BufferError();
|
|
|
|
var ex = Assert.ThrowsAny<NftException>(() => ctx.RunCommand("this is not valid nft syntax"));
|
|
Assert.NotEqual(0, ex.NativeErrorCode);
|
|
Assert.False(string.IsNullOrWhiteSpace(ex.NativeErrorOutput));
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Category", "Privileged")]
|
|
public void ValidDryRunCommand_CanExecuteAndBufferOutput()
|
|
{
|
|
if (!NativeTestSupport.TryCreateContext(out var ctx))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!NativeTestSupport.ShouldRunPrivilegedTests())
|
|
{
|
|
return;
|
|
}
|
|
|
|
using (ctx)
|
|
{
|
|
ctx.DryRun = true;
|
|
ctx.BufferOutput();
|
|
ctx.BufferError();
|
|
|
|
ctx.RunCommand("add table inet swig_test");
|
|
var output = ctx.GetOutputBuffer();
|
|
var error = ctx.GetErrorBuffer();
|
|
|
|
Assert.NotNull(output);
|
|
Assert.True(string.IsNullOrEmpty(error), $"Unexpected error buffer: {error}");
|
|
}
|
|
}
|
|
|
|
}
|