ServerWorkflowTests.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. {
  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: 2
  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. (output, yaml) = await ExecuteAsync(
  77. "servers", "nic", "add", "srv01",
  78. "--type", "RJ45",
  79. "--speed", "2.5",
  80. "--ports", "2"
  81. );
  82. Assert.Equal("NIC added to 'srv01'.\n", output);
  83. // Get server
  84. (output, yaml) = await ExecuteAsync("servers", "get", "srv01");
  85. Assert.Equal(
  86. "srv01 RAM: 128 GB, IPMI: yes\n",
  87. output
  88. );
  89. // Summary (strict table)
  90. (output, yaml) = await ExecuteAsync("servers", "summary");
  91. Assert.Equal("""
  92. ╭───────┬───────────┬───────┬────────┬───────────┬───────────┬──────────┬──────╮
  93. │ Name │ CPU │ C/T │ RAM │ Storage │ NICs │ GPUs │ IPMI │
  94. ├───────┼───────────┼───────┼────────┼───────────┼───────────┼──────────┼──────┤
  95. │ srv01 │ 1× Intel │ 12/24 │ 128 GB │ 1024 GB │ 2×10G, │ 1× │ yes │
  96. │ │ Xeon │ │ │ (SSD 1024 │ 2×2.5G │ NVIDIA │ │
  97. │ │ Silver │ │ │ / HDD 0) │ │ A2000 (6 │ │
  98. │ │ 4310 │ │ │ │ │ GB VRAM) │ │
  99. ╰───────┴───────────┴───────┴────────┴───────────┴───────────┴──────────┴──────╯
  100. """, output);
  101. // Describe (strict)
  102. (output, yaml) = await ExecuteAsync("servers", "describe", "srv01");
  103. Assert.Equal("""
  104. ╭─Server───────────────────────────────╮
  105. │ Name srv01 │
  106. │ IPMI yes │
  107. │ RAM 128 GB │
  108. │ CPU Intel Xeon Silver 4310 (12/24) │
  109. ╰──────────────────────────────────────╯
  110. """, output);
  111. // Tree (loose)
  112. (output, yaml) = await ExecuteAsync("servers", "tree", "srv01");
  113. Assert.Contains("srv01", output);
  114. // Delete server
  115. (output, yaml) = await ExecuteAsync("servers", "del", "srv01");
  116. Assert.Equal("""
  117. Server 'srv01' deleted.
  118. """, output);
  119. }
  120. }