DeleteResourceTests.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using Tests.EndToEnd.Infra;
  2. using Xunit.Abstractions;
  3. namespace Tests.EndToEnd;
  4. [Collection("Yaml CLI tests")]
  5. public class DeleteResourceTests(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. [Fact]
  19. public async Task deleting_resource_removes_connections_from_endpoint_a() {
  20. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  21. await ExecuteAsync("servers", "add", "srv01");
  22. await ExecuteAsync("servers", "add", "srv02");
  23. await ExecuteAsync(
  24. "servers", "nic", "add", "srv01",
  25. "--type", "RJ45",
  26. "--speed", "10",
  27. "--ports", "2");
  28. await ExecuteAsync(
  29. "servers", "nic", "add", "srv02",
  30. "--type", "RJ45",
  31. "--speed", "10",
  32. "--ports", "2");
  33. await ExecuteAsync(
  34. "connections", "add",
  35. "srv01", "0", "0",
  36. "srv02", "0", "0",
  37. "--label", "test-connection");
  38. (var output, var yaml) = await ExecuteAsync("servers", "del", "srv01");
  39. Assert.Contains("Server 'srv01' deleted.", output);
  40. // Connection referencing deleted resource is removed
  41. Assert.DoesNotContain("test-connection", yaml);
  42. // srv02 should still exist
  43. Assert.Contains("srv02", yaml);
  44. Assert.DoesNotContain("srv01", yaml);
  45. }
  46. [Fact]
  47. public async Task deleting_resource_removes_connections_from_endpoint_b() {
  48. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  49. await ExecuteAsync("servers", "add", "srv01");
  50. await ExecuteAsync("servers", "add", "srv02");
  51. await ExecuteAsync(
  52. "servers", "nic", "add", "srv01",
  53. "--type", "RJ45",
  54. "--speed", "10",
  55. "--ports", "2");
  56. await ExecuteAsync(
  57. "servers", "nic", "add", "srv02",
  58. "--type", "RJ45",
  59. "--speed", "10",
  60. "--ports", "2");
  61. await ExecuteAsync(
  62. "connections", "add",
  63. "srv01", "0", "0",
  64. "srv02", "0", "0",
  65. "--label", "test-connection");
  66. (var output, var yaml) = await ExecuteAsync("servers", "del", "srv02");
  67. Assert.Contains("Server 'srv02' deleted.", output);
  68. // Connection referencing deleted resource is removed
  69. Assert.DoesNotContain("test-connection", yaml);
  70. // srv01 should still exist
  71. Assert.Contains("srv01", yaml);
  72. Assert.DoesNotContain("srv02", yaml);
  73. }
  74. [Fact]
  75. public async Task deleting_resource_removes_dependant_runs_on() {
  76. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  77. await ExecuteAsync("servers", "add", "srv01");
  78. await ExecuteAsync("systems", "add", "sys01");
  79. await ExecuteAsync("systems", "set", "sys01", "--runs-on", "srv01");
  80. (var output, var yaml) = await ExecuteAsync("servers", "del", "srv01");
  81. Assert.Contains("Server 'srv01' deleted.", output);
  82. // System should still exist but without runs-on reference
  83. Assert.Contains("sys01", yaml);
  84. // The runs-on reference should be removed from the system
  85. Assert.DoesNotContain("srv01", yaml);
  86. }
  87. [Fact]
  88. public async Task deleting_resource_with_multiple_connections_removes_all() {
  89. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  90. await ExecuteAsync("switches", "add", "sw01");
  91. await ExecuteAsync("switches", "add", "sw02");
  92. await ExecuteAsync("switches", "add", "sw03");
  93. await ExecuteAsync(
  94. "switches", "port", "add", "sw01",
  95. "--type", "SFP+",
  96. "--speed", "25",
  97. "--count", "3");
  98. await ExecuteAsync(
  99. "switches", "port", "add", "sw02",
  100. "--type", "SFP+",
  101. "--speed", "25",
  102. "--count", "2");
  103. await ExecuteAsync(
  104. "switches", "port", "add", "sw03",
  105. "--type", "SFP+",
  106. "--speed", "25",
  107. "--count", "2");
  108. await ExecuteAsync(
  109. "connections", "add",
  110. "sw01", "0", "0",
  111. "sw02", "0", "0",
  112. "--label", "sw01-to-sw02");
  113. await ExecuteAsync(
  114. "connections", "add",
  115. "sw01", "0", "1",
  116. "sw03", "0", "0",
  117. "--label", "sw01-to-sw03");
  118. (var output, var yaml) = await ExecuteAsync("switches", "del", "sw01");
  119. Assert.Contains("Switch 'sw01' deleted.", output);
  120. Assert.Contains("sw02", yaml);
  121. Assert.Contains("sw03", yaml);
  122. // Both connections referencing sw01 should be removed
  123. Assert.DoesNotContain("sw01-to-sw02", yaml);
  124. Assert.DoesNotContain("sw01-to-sw03", yaml);
  125. }
  126. [Fact]
  127. public async Task deleting_resource_removes_connection_when_both_endpoints_referenced() {
  128. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  129. await ExecuteAsync("servers", "add", "srv01");
  130. await ExecuteAsync("servers", "add", "srv02");
  131. await ExecuteAsync(
  132. "servers", "nic", "add", "srv01",
  133. "--type", "RJ45",
  134. "--speed", "10",
  135. "--ports", "2");
  136. await ExecuteAsync(
  137. "servers", "nic", "add", "srv02",
  138. "--type", "RJ45",
  139. "--speed", "10",
  140. "--ports", "2");
  141. await ExecuteAsync(
  142. "connections", "add",
  143. "srv01", "0", "0",
  144. "srv02", "0", "0",
  145. "--label", "bi-directional-link");
  146. await ExecuteAsync("servers", "del", "srv01");
  147. var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
  148. // srv02 should remain
  149. Assert.Contains("srv02", yaml);
  150. // Connection referencing deleted resource should be removed
  151. Assert.DoesNotContain("srv01", yaml);
  152. // Connection label should be gone since the connection is removed
  153. Assert.DoesNotContain("bi-directional-link", yaml);
  154. }
  155. }