SystemYamlE2ETests.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using Tests.EndToEnd.Infra;
  2. using Xunit.Abstractions;
  3. namespace Tests.EndToEnd;
  4. [Collection("Yaml CLI tests")]
  5. public class SystemYamlE2ETests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
  6. : IClassFixture<TempYamlCliFixture>
  7. {
  8. private async Task<(string, string)> ExecuteAsync(params string[] args)
  9. {
  10. outputHelper.WriteLine($"rpk {string.Join(" ", args)}");
  11. var inputArgs = args.ToArray();
  12. var output = await YamlCliTestHost.RunAsync(
  13. inputArgs,
  14. fs.Root,
  15. outputHelper);
  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 systems_cli_workflow_test()
  22. {
  23. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  24. // Add system
  25. var (output, yaml) = await ExecuteAsync("systems", "add", "host01");
  26. Assert.Equal("System 'host01' added.\n", output);
  27. Assert.Equal("""
  28. resources:
  29. - kind: System
  30. type:
  31. os:
  32. cores:
  33. ram:
  34. drives:
  35. runsOn:
  36. name: host01
  37. tags:
  38. """, yaml);
  39. // Update system
  40. (output, yaml) = await ExecuteAsync(
  41. "systems", "set", "host01",
  42. "--type", "server",
  43. "--os", "ubuntu-22.04",
  44. "--cores", "4",
  45. "--ram", "8192",
  46. "--runs-on", "hypervisor01"
  47. );
  48. Assert.Equal("System 'host01' updated.\n", output);
  49. Assert.Equal("""
  50. resources:
  51. - kind: System
  52. type: server
  53. os: ubuntu-22.04
  54. cores: 4
  55. ram: 8192
  56. drives:
  57. runsOn: hypervisor01
  58. name: host01
  59. tags:
  60. """, yaml);
  61. // Get system by name
  62. (output, yaml) = await ExecuteAsync("systems", "get", "host01");
  63. Assert.Equal(
  64. "host01 Type: server, OS: ubuntu-22.04, Cores: 4, RAM: 8192GB, Storage: 0GB, \nRunsOn: hypervisor01\n",
  65. output);
  66. // List systems
  67. (output, yaml) = await ExecuteAsync("systems", "list");
  68. Assert.Equal("""
  69. ╭────────┬────────┬─────────────┬───────┬──────────┬─────────────┬─────────────╮
  70. │ Name │ Type │ OS │ Cores │ RAM (GB) │ Storage │ Runs On │
  71. │ │ │ │ │ │ (GB) │ │
  72. ├────────┼────────┼─────────────┼───────┼──────────┼─────────────┼─────────────┤
  73. │ host01 │ server │ ubuntu-22.0 │ 4 │ 8192 │ 0 │ hypervisor0 │
  74. │ │ │ 4 │ │ │ │ 1 │
  75. ╰────────┴────────┴─────────────┴───────┴──────────┴─────────────┴─────────────╯
  76. """, output);
  77. // Report systems
  78. (output, yaml) = await ExecuteAsync("systems", "summary");
  79. Assert.Equal("""
  80. ╭────────┬────────┬─────────────┬───────┬──────────┬─────────────┬─────────────╮
  81. │ Name │ Type │ OS │ Cores │ RAM (GB) │ Storage │ Runs On │
  82. │ │ │ │ │ │ (GB) │ │
  83. ├────────┼────────┼─────────────┼───────┼──────────┼─────────────┼─────────────┤
  84. │ host01 │ server │ ubuntu-22.0 │ 4 │ 8192 │ 0 │ hypervisor0 │
  85. │ │ │ 4 │ │ │ │ 1 │
  86. ╰────────┴────────┴─────────────┴───────┴──────────┴─────────────┴─────────────╯
  87. """, output);
  88. // Delete system
  89. (output, yaml) = await ExecuteAsync("systems", "del", "host01");
  90. Assert.Equal("""
  91. System 'host01' deleted.
  92. """, output);
  93. // Ensure list is empty
  94. (output, yaml) = await ExecuteAsync("systems", "list");
  95. Assert.Equal("""
  96. No systems found.
  97. """, output);
  98. }
  99. [Fact]
  100. public async Task system_tree_cli_workflow_test()
  101. {
  102. await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
  103. var (output, yaml) = await ExecuteAsync("systems", "add", "host01");
  104. Assert.Equal("System 'host01' added.\n", output);
  105. (output, yaml) = await ExecuteAsync("services", "add", "immich");
  106. Assert.Equal("Service 'immich' added.\n", output);
  107. (output, yaml) = await ExecuteAsync("services", "add", "paperless");
  108. Assert.Equal("Service 'paperless' added.\n", output);
  109. (output, yaml) = await ExecuteAsync(
  110. "services", "set", "immich",
  111. "--runs-on", "host01"
  112. );
  113. (output, yaml) = await ExecuteAsync(
  114. "services", "set", "paperless",
  115. "--runs-on", "host01"
  116. );
  117. (output, yaml) = await ExecuteAsync("systems", "tree", "host01");
  118. Assert.Equal("""
  119. host01
  120. ├── Service: immich
  121. └── Service: paperless
  122. """, output);
  123. }
  124. }