ServerWorkflowTests.cs 5.6 KB

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