Browse Source

Switch commands written - ToDo's added for command bugs to be resolved in #130

James 2 months ago
parent
commit
5307d38012

+ 54 - 0
Tests/EndToEnd/SwitchTests/SwitchCommandTests.cs

@@ -0,0 +1,54 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class SwitchCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
+    : IClassFixture<TempYamlCliFixture>
+{
+    private async Task<(string, string)> ExecuteAsync(params string[] args)
+    {
+        var output = await YamlCliTestHost.RunAsync(
+            args,
+            fs.Root,
+            outputHelper,
+            "config.yaml"
+        );
+
+        var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
+        return (output, yaml);
+    }
+
+    [Fact]
+    public async Task describe_outputs_expected_information()
+    {
+        await ExecuteAsync("switches", "add", "sw01");
+        await ExecuteAsync("switches", "set", "sw01", "--Model", "Netgear GS108", "--managed", "true", "--poe", "true");
+
+        var (output, _) = await ExecuteAsync("switches", "describe", "sw01");
+
+        Assert.Contains("sw01", output);
+        Assert.Contains("Netgear GS108", output);
+        Assert.Contains("Managed", output);
+        Assert.Contains("PoE", output);
+    }
+
+    [Fact]
+    public async Task help_commands_do_not_throw()
+    {
+        Assert.Contains("Manage network switches", (await ExecuteAsync("switches", "--help")).Item1);
+        Assert.Contains("Add a new network switch", (await ExecuteAsync("switches", "add", "--help")).Item1);
+        Assert.Contains("List all switches", (await ExecuteAsync("switches", "list", "--help")).Item1);
+        Assert.Contains("Retrieve details", (await ExecuteAsync("switches", "get", "--help")).Item1);
+        Assert.Contains("Show detailed information", (await ExecuteAsync("switches", "describe", "--help")).Item1);
+        Assert.Contains("Update properties", (await ExecuteAsync("switches", "set", "--help")).Item1);
+        Assert.Contains("Delete a switch", (await ExecuteAsync("switches", "del", "--help")).Item1);
+
+        // Port help
+        Assert.Contains("Manage ports", (await ExecuteAsync("switches", "port", "--help")).Item1);
+        Assert.Contains("Add a port", (await ExecuteAsync("switches", "port", "add", "--help")).Item1);
+        Assert.Contains("Update a switch port", (await ExecuteAsync("switches", "port", "set", "--help")).Item1);
+        Assert.Contains("Remove a port", (await ExecuteAsync("switches", "port", "del", "--help")).Item1);
+    }
+}

+ 92 - 0
Tests/EndToEnd/SwitchTests/SwitchErrorTests.cs

@@ -0,0 +1,92 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class SwitchErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
+    : IClassFixture<TempYamlCliFixture>
+{
+    private async Task<(string, string)> ExecuteAsync(params string[] args)
+    {
+        var output = await YamlCliTestHost.RunAsync(
+            args,
+            fs.Root,
+            outputHelper,
+            "config.yaml"
+        );
+
+        var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
+        return (output, yaml);
+    }
+
+    [Fact]
+    public async Task adding_duplicate_switch_returns_error()
+    {
+        await ExecuteAsync("switches", "add", "sw01");
+        var (output, _) = await ExecuteAsync("switches", "add", "sw01");
+        Assert.Contains("already exists", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task get_missing_switch_returns_error()
+    {
+        var (output, _) = await ExecuteAsync("switches", "get", "ghost");
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task set_missing_switch_returns_error()
+    {
+        var (output, _) = await ExecuteAsync("switches", "set", "ghost", "--Model", "X");
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task delete_missing_switch_returns_error()
+    {
+        var (output, _) = await ExecuteAsync("switches", "del", "ghost");
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    // Port errors
+    [Fact]
+    public async Task port_add_missing_switch_returns_error()
+    {
+        var (output, _) = await ExecuteAsync(
+            "switches", "port", "add", "ghost",
+            "--type", "rj45",
+            "--speed", "1",
+            "--count", "8"
+        );
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task port_set_invalid_index_returns_error()
+    {
+        await ExecuteAsync("switches", "add", "sw01");
+
+        var (output, _) = await ExecuteAsync(
+            "switches", "port", "set", "sw01",
+            "--index", "5",
+            "--type", "rj45"
+        );
+
+        Assert.Contains("invalid", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task port_del_invalid_index_returns_error()
+    {
+        await ExecuteAsync("switches", "add", "sw01");
+
+        var (output, _) = await ExecuteAsync(
+            "switches", "port", "del", "sw01",
+            "--index", "3"
+        );
+
+        Assert.Contains("invalid", output, StringComparison.OrdinalIgnoreCase);
+    }
+}

+ 131 - 0
Tests/EndToEnd/SwitchTests/SwitchWorkflowTests.cs

@@ -0,0 +1,131 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class SwitchWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
+    : IClassFixture<TempYamlCliFixture>
+{
+    private async Task<(string, string)> ExecuteAsync(params string[] args)
+    {
+        outputHelper.WriteLine($"rpk {string.Join(" ", args)}");
+
+        var output = await YamlCliTestHost.RunAsync(
+            args,
+            fs.Root,
+            outputHelper,
+            "config.yaml"
+        );
+
+        outputHelper.WriteLine(output);
+
+        var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
+        return (output, yaml);
+    }
+
+    [Fact]
+    public async Task switches_cli_workflow_test()
+    {
+        await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
+
+        // Add switch
+        var (output, yaml) = await ExecuteAsync("switches", "add", "sw01");
+        Assert.Equal("Switch 'sw01' added.\n", output);
+        Assert.Contains("name: sw01", yaml);
+
+        // Update switch
+        (output, yaml) = await ExecuteAsync(
+            "switches", "set", "sw01",
+            "--Model", "Netgear GS108",
+            "--managed", "true",
+            "--poe", "true"
+        );
+        // ToDo fails due command incorrect 
+        Assert.Equal("Switch 'sw01' updated.\n", output);
+
+        Assert.Equal("""
+                     resources:
+                     - kind: Switch
+                       model: Netgear GS108
+                       managed: true
+                       poe: true
+                       name: sw01
+
+                     """, yaml);
+
+        // Add second switch
+        (output, yaml) = await ExecuteAsync("switches", "add", "sw02");
+        Assert.Equal("Switch 'sw02' added.\n", output);
+
+        (output, yaml) = await ExecuteAsync(
+            "switches", "set", "sw02",
+            "--Model", "TP-Link TL-SG108E",
+            "--managed", "false",
+            "--poe", "false"
+        );
+        // ToDo fails due command incorrect 
+        Assert.Equal("Switch 'sw02' updated.\n", output);
+
+        Assert.Equal("""
+                     resources:
+                     - kind: Switch
+                       model: Netgear GS108
+                       managed: true
+                       poe: true
+                       name: sw01
+                     - kind: Switch
+                       model: TP-Link TL-SG108E
+                       managed: false
+                       poe: false
+                       name: sw02
+
+                     """, yaml);
+
+        // Get switch
+        (output, yaml) = await ExecuteAsync("switches", "get", "sw01");
+        Assert.Equal("sw01  Model: Netgear GS108, Managed: Yes, PoE: Yes\n", output);
+
+        // List switches
+        (output, yaml) = await ExecuteAsync("switches", "list");
+        Assert.Equal("""
+                     ╭──────┬───────────────────┬─────────┬─────┬───────┬──────────────╮
+                     │ Name │ Model             │ Managed │ PoE │ Ports │ Port Summary │
+                     ├──────┼───────────────────┼─────────┼─────┼───────┼──────────────┤
+                     │ sw01 │ Netgear GS108     │ yes     │ yes │ 0     │ Unknown      │
+                     │ sw02 │ TP-Link TL-SG108E │ no      │ no  │ 0     │ Unknown      │
+                     ╰──────┴───────────────────┴─────────┴─────┴───────┴──────────────╯
+
+                     """, output);
+
+        // Summary
+        (output, yaml) = await ExecuteAsync("switches", "summary");
+        Assert.Equal("""
+                     ╭──────┬───────────────────┬─────────┬─────┬───────┬───────────┬──────────────╮
+                     │ Name │ Model             │ Managed │ PoE │ Ports │ Max Speed │ Port Summary │
+                     ├──────┼───────────────────┼─────────┼─────┼───────┼───────────┼──────────────┤
+                     │ sw01 │ Netgear GS108     │ yes     │ yes │ 0     │ 0G        │ Unknown      │
+                     │ sw02 │ TP-Link TL-SG108E │ no      │ no  │ 0     │ 0G        │ Unknown      │
+                     ╰──────┴───────────────────┴─────────┴─────┴───────┴───────────┴──────────────╯
+
+                     """, output);
+
+        // Delete switch
+        (output, yaml) = await ExecuteAsync("switches", "del", "sw02");
+        Assert.Equal("""
+                     Switch 'sw02' deleted.
+
+                     """, output);
+
+        // List again
+        (output, yaml) = await ExecuteAsync("switches", "list");
+        Assert.Equal("""
+                     ╭──────┬───────────────┬─────────┬─────┬───────┬──────────────╮
+                     │ Name │ Model         │ Managed │ PoE │ Ports │ Port Summary │
+                     ├──────┼───────────────┼─────────┼─────┼───────┼──────────────┤
+                     │ sw01 │ Netgear GS108 │ yes     │ yes │ 0     │ Unknown      │
+                     ╰──────┴───────────────┴─────────┴─────┴───────┴──────────────╯
+
+                     """, output);
+    }
+}