ConnectionWorkflowTests.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using Tests.EndToEnd.Infra;
  2. using Xunit.Abstractions;
  3. namespace Tests.EndToEnd.ConnectionTests;
  4. [Collection("Yaml CLI tests")]
  5. public class ConnectionWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
  6. : IClassFixture<TempYamlCliFixture> {
  7. private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {
  8. outputHelper.WriteLine($"rpk {string.Join(" ", args)}");
  9. var output = await YamlCliTestHost.RunAsync(
  10. args,
  11. fs.Root,
  12. outputHelper,
  13. "config.yaml");
  14. outputHelper.WriteLine(output);
  15. var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
  16. return (output, yaml);
  17. }
  18. [Theory]
  19. [InlineData("switches", "routers")]
  20. [InlineData("firewalls", "routers")]
  21. public async Task connections_cli_workflow_test(string aType, string bType) {
  22. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  23. // Create resources
  24. await ExecuteAsync(aType, "add", "node-a");
  25. await ExecuteAsync(bType, "add", "node-b");
  26. // Add NIC to A
  27. await ExecuteAsync(
  28. aType, "port", "add", "node-a",
  29. "--type", "RJ45",
  30. "--speed", "1",
  31. "--count", "2"
  32. );
  33. // Add NIC to B
  34. await ExecuteAsync(
  35. bType, "port", "add", "node-b",
  36. "--type", "RJ45",
  37. "--speed", "1",
  38. "--count", "2"
  39. );
  40. // Create connection
  41. (var output, var yaml) = await ExecuteAsync(
  42. "connections", "add",
  43. "node-a", "0", "0",
  44. "node-b", "0", "0",
  45. "--label", "uplink"
  46. );
  47. Assert.Contains("Connection created", output);
  48. // YAML validation
  49. Assert.Contains("connections:", yaml);
  50. Assert.Contains("node-a", yaml);
  51. Assert.Contains("node-b", yaml);
  52. Assert.Contains("uplink", yaml);
  53. }
  54. [Fact]
  55. public async Task connections_overwrite_existing_port_connection() {
  56. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  57. await ExecuteAsync("servers", "add", "srv01");
  58. await ExecuteAsync("servers", "add", "srv02");
  59. await ExecuteAsync("servers", "add", "srv03");
  60. await ExecuteAsync(
  61. "servers", "nic", "add", "srv01",
  62. "--type", "RJ45",
  63. "--speed", "1",
  64. "--ports", "1"
  65. );
  66. await ExecuteAsync(
  67. "servers", "nic", "add", "srv02",
  68. "--type", "RJ45",
  69. "--speed", "1",
  70. "--ports", "1"
  71. );
  72. await ExecuteAsync(
  73. "servers", "nic", "add", "srv03",
  74. "--type", "RJ45",
  75. "--speed", "1",
  76. "--ports", "1"
  77. );
  78. // First connection
  79. await ExecuteAsync(
  80. "connections", "add",
  81. "srv01", "0", "0",
  82. "srv02", "0", "0"
  83. );
  84. // Overwrite by connecting srv01 to srv03
  85. (var output, var yaml) = await ExecuteAsync(
  86. "connections", "add",
  87. "srv01", "0", "0",
  88. "srv03", "0", "0"
  89. );
  90. Assert.Contains("Connection created", output);
  91. // YAML should contain srv01 <-> srv03
  92. Assert.Contains("srv03", yaml);
  93. // srv02 should no longer be connected
  94. Assert.DoesNotContain("srv02\n portGroup: 0\n portIndex: 0", yaml);
  95. }
  96. [Fact]
  97. public async Task connections_cannot_connect_port_to_itself() {
  98. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  99. await ExecuteAsync("servers", "add", "srv01");
  100. await ExecuteAsync(
  101. "servers", "nic", "add", "srv01",
  102. "--type", "RJ45",
  103. "--speed", "1",
  104. "--ports", "2"
  105. );
  106. var output = await YamlCliTestHost.RunAsync(
  107. new[] { "connections", "add", "srv01", "0", "0", "srv01", "0", "0" },
  108. fs.Root,
  109. outputHelper,
  110. "config.yaml");
  111. Assert.Contains("Cannot connect a port to itself", output);
  112. }
  113. }