ConnectionWorkflowTests.cs 4.1 KB

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