using Tests.EndToEnd.Infra; using Xunit.Abstractions; namespace Tests.EndToEnd.DiscoveryTests; /// /// `rpk discover network` argument validation. Every case here fails before any /// probing starts, so these tests never send a packet anywhere. /// [Collection("Yaml CLI tests")] public class DiscoverNetworkValidationTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper) : IClassFixture { private async Task ExecuteAsync(params string[] args) => await YamlCliTestHost.RunAsync(args, fs.Root, outputHelper, "config.yaml"); [Theory] [InlineData("not-a-cidr")] [InlineData("192.168.1.0")] // no prefix [InlineData("192.168.1.0/24/7")] [InlineData("192.168.1.0/notanumber")] public async Task a_malformed_cidr_is_refused_with_an_example_of_the_right_shape(string cidr) { var output = await ExecuteAsync("discover", "network", "--cidr", cidr); Assert.Contains("not a usable CIDR block", output); Assert.Contains("192.168.1.0/24", output); } [Theory] [InlineData("10.0.0.0/8")] [InlineData("0.0.0.0/0")] public async Task a_sweep_wider_than_a_16_is_refused(string cidr) { var output = await ExecuteAsync("discover", "network", "--cidr", cidr); Assert.Contains("65,534 hosts", output); Assert.Contains("/16", output); } [Theory] [InlineData("eighty")] [InlineData("0")] // port zero is not a port [InlineData("65536")] [InlineData("22;80")] [InlineData(",")] public async Task a_malformed_port_list_is_refused(string ports) { var output = await ExecuteAsync( "discover", "network", "--cidr", "192.168.1.0/24", "--ports", ports); Assert.Contains("not a usable port list", output); } [Theory] [InlineData("--timeout", "0", "--timeout must be between")] [InlineData("--timeout", "999999", "--timeout must be between")] [InlineData("--parallel", "0", "--parallel must be between")] [InlineData("--parallel", "4096", "--parallel must be between")] public async Task out_of_range_tuning_flags_are_refused(string flag, string value, string expected) { var output = await ExecuteAsync("discover", "network", "--cidr", "192.168.1.0/24", flag, value); Assert.Contains(expected, output); } }