ServerWorkflowTests.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using Tests.EndToEnd.Infra;
  2. using Xunit.Abstractions;
  3. namespace Tests.EndToEnd;
  4. [Collection("Yaml CLI tests")]
  5. public class ServerWorkflowTests(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. [Fact]
  21. public async Task servers_cli_workflow_test()
  22. {
  23. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  24. // Add server
  25. var (output, yaml) = await ExecuteAsync("servers", "add", "srv01");
  26. Assert.Equal("Server 'srv01' added.\n", output);
  27. Assert.Contains("name: srv01", yaml);
  28. // Update server
  29. (output, yaml) = await ExecuteAsync(
  30. "servers", "set", "srv01",
  31. "--ram", "128",
  32. "--ram_mts", "3200",
  33. "--ipmi", "True"
  34. );
  35. Assert.Equal("Server 'srv01' updated.\n", output);
  36. Assert.Equal("""
  37. version: 1
  38. resources:
  39. - kind: Server
  40. ram:
  41. size: 128
  42. mts: 3200
  43. ipmi: true
  44. name: srv01
  45. """, yaml);
  46. // Add CPU
  47. (output, yaml) = await ExecuteAsync(
  48. "servers", "cpu", "add", "srv01",
  49. "--model", "Intel Xeon Silver 4310",
  50. "--cores", "12",
  51. "--threads", "24"
  52. );
  53. Assert.Equal("CPU added to 'srv01'.\n", output);
  54. // Add Drive
  55. (output, yaml) = await ExecuteAsync(
  56. "servers", "drive", "add", "srv01",
  57. "--type", "ssd",
  58. "--size", "1024"
  59. );
  60. Assert.Equal("Drive added to 'srv01'.\n", output);
  61. // Add GPU
  62. (output, yaml) = await ExecuteAsync(
  63. "servers", "gpu", "add", "srv01",
  64. "--model", "NVIDIA A2000",
  65. "--vram", "6"
  66. );
  67. Assert.Equal("GPU added to 'srv01'.\n", output);
  68. // Add NIC
  69. (output, yaml) = await ExecuteAsync(
  70. "servers", "nic", "add", "srv01",
  71. "--type", "RJ45",
  72. "--speed", "10",
  73. "--ports", "2"
  74. );
  75. Assert.Equal("NIC added to 'srv01'.\n", output);
  76. // Get server
  77. (output, yaml) = await ExecuteAsync("servers", "get", "srv01");
  78. Assert.Equal(
  79. "srv01 RAM: 128 GB, IPMI: yes\n",
  80. output
  81. );
  82. // Summary (strict table)
  83. (output, yaml) = await ExecuteAsync("servers", "summary");
  84. Assert.Equal("""
  85. ╭───────┬────────────┬───────┬────────┬────────────┬───────┬────────────┬──────╮
  86. │ Name │ CPU │ C/T │ RAM │ Storage │ NICs │ GPUs │ IPMI │
  87. ├───────┼────────────┼───────┼────────┼────────────┼───────┼────────────┼──────┤
  88. │ srv01 │ 1× Intel │ 12/24 │ 128 GB │ 1024 GB │ 2×10G │ 1× NVIDIA │ yes │
  89. │ │ Xeon │ │ │ (SSD 1024 │ │ A2000 (6 │ │
  90. │ │ Silver │ │ │ / HDD 0) │ │ GB VRAM) │ │
  91. │ │ 4310 │ │ │ │ │ │ │
  92. ╰───────┴────────────┴───────┴────────┴────────────┴───────┴────────────┴──────╯
  93. """, output);
  94. // Describe (strict)
  95. (output, yaml) = await ExecuteAsync("servers", "describe", "srv01");
  96. Assert.Equal("""
  97. ╭─Server───────────────────────────────╮
  98. │ Name srv01 │
  99. │ IPMI yes │
  100. │ RAM 128 GB │
  101. │ CPU Intel Xeon Silver 4310 (12/24) │
  102. ╰──────────────────────────────────────╯
  103. """, output);
  104. // Tree (loose)
  105. (output, yaml) = await ExecuteAsync("servers", "tree", "srv01");
  106. Assert.Contains("srv01", output);
  107. // Delete server
  108. (output, yaml) = await ExecuteAsync("servers", "del", "srv01");
  109. Assert.Equal("""
  110. Server 'srv01' deleted.
  111. """, output);
  112. }
  113. [Fact]
  114. public async Task servers_labels_cli_workflow_test()
  115. {
  116. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  117. // Create server
  118. var (output, yaml) = await ExecuteAsync("servers", "add", "web-01");
  119. Assert.Contains("web-01", yaml);
  120. // Add label
  121. (output, yaml) = await ExecuteAsync("servers", "label", "add", "web-01", "--key", "env", "--value", "production");
  122. Assert.Contains("Label 'env' added", output);
  123. Assert.Contains("env:", yaml);
  124. Assert.Contains("production", yaml);
  125. // Describe should show label
  126. (output, _) = await ExecuteAsync("servers", "describe", "web-01");
  127. Assert.Contains("env", output);
  128. Assert.Contains("production", output);
  129. // Remove label
  130. (output, yaml) = await ExecuteAsync("servers", "label", "remove", "web-01", "--key", "env");
  131. Assert.Contains("Label 'env' removed", output);
  132. Assert.DoesNotContain("env:", yaml);
  133. }
  134. }