4
0

ServerWorkflowTests.cs 5.7 KB

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