Просмотр исходного кода

Stop the Git service test racing every other test that registers services

Registering RackPeek's services writes process-wide statics as a side effect,
RpkConstants.HasGitServices among them. That is harmless in production, where a
process registers once, and a race in a test run, where dozens of classes
register with different configuration.

Three groups were mutating it from three different xUnit collections — the Git
tests, the YAML CLI host, and the API tests — and collections run in parallel
with each other, so whichever ran last won. Git_Token_Set_Registers_...
asserted the flag was true and read whatever an API test had just set, failing
roughly one full-suite run in three while passing in isolation every time.

They now share one collection with parallelisation off, named for the shared
state rather than for the YAML CLI, because membership is decided by "does this
touch the statics" rather than by what the test nominally exercises.

Six consecutive full runs green, against a baseline that failed one run in two.
Costs about three seconds on a fifteen-second suite.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Tim Jones 13 часов назад
Родитель
Сommit
1adc1685ba
57 измененных файлов с 74 добавлено и 53 удалено
  1. 1 0
      .gitignore
  2. 1 0
      Tests/Api/InventoryEndpointStartupTests.cs
  3. 1 0
      Tests/Api/InventoryEndpointTests.cs
  4. 1 0
      Tests/Api/InventoryEndpointUnconfiguredTests.cs
  5. 1 1
      Tests/EndToEnd/AccessPointTests/AccessPointCommandTests.cs
  6. 1 1
      Tests/EndToEnd/AccessPointTests/AccessPointErrorTests.cs
  7. 1 1
      Tests/EndToEnd/AccessPointTests/AccessPointWorkflowTests.cs
  8. 1 1
      Tests/EndToEnd/CliCommandsWorkflowTests.cs
  9. 1 1
      Tests/EndToEnd/ConnectionTests/ConnectionRemoveWorkflowTests.cs
  10. 1 1
      Tests/EndToEnd/ConnectionTests/ConnectionWorkflowTests.cs
  11. 1 1
      Tests/EndToEnd/ConnectionTests/PortConnectionWorkflowTests.cs
  12. 1 1
      Tests/EndToEnd/ConnectionTests/RenameResourceTests.cs
  13. 1 1
      Tests/EndToEnd/CorruptConfigTests.cs
  14. 1 1
      Tests/EndToEnd/DeleteResourceTests.cs
  15. 1 1
      Tests/EndToEnd/DesktopTests/DesktopCommandTests.cs
  16. 1 1
      Tests/EndToEnd/DesktopTests/DesktopErrorTests.cs
  17. 1 1
      Tests/EndToEnd/DesktopTests/DesktopWorkflowTests.cs
  18. 1 1
      Tests/EndToEnd/DiscoveryTests/DiscoverNetworkValidationTests.cs
  19. 1 1
      Tests/EndToEnd/ExporterTests/AnsibleInventoryWorkflowTests.cs
  20. 1 1
      Tests/EndToEnd/ExporterTests/HostsExportWorkflowTests.cs
  21. 1 1
      Tests/EndToEnd/ExporterTests/SshExportWorkflowTests.cs
  22. 1 1
      Tests/EndToEnd/FirewallTests/FirewallCommandTests.cs
  23. 1 1
      Tests/EndToEnd/FirewallTests/FirewallErrorTests.cs
  24. 1 1
      Tests/EndToEnd/FirewallTests/FirewallWorkflowTests.cs
  25. 1 1
      Tests/EndToEnd/GenerateAnsibleInventoryTests.cs
  26. 1 1
      Tests/EndToEnd/Graph/GraphTopologyCliTests.cs
  27. 18 1
      Tests/EndToEnd/Infra/YamlCliTestCollection.cs
  28. 1 1
      Tests/EndToEnd/Labels/LabelsWorkflowTests.cs
  29. 1 1
      Tests/EndToEnd/LaptopTests/LaptopCommandTests.cs
  30. 1 1
      Tests/EndToEnd/LaptopTests/LaptopErrorTests.cs
  31. 1 1
      Tests/EndToEnd/LaptopTests/LaptopNicWorkflowTests.cs
  32. 1 1
      Tests/EndToEnd/LaptopTests/LaptopWorkflowTests.cs
  33. 1 1
      Tests/EndToEnd/OtherTests/OtherCommandTests.cs
  34. 1 1
      Tests/EndToEnd/OtherTests/OtherErrorTests.cs
  35. 1 1
      Tests/EndToEnd/OtherTests/OtherPortWorkflowTests.cs
  36. 1 1
      Tests/EndToEnd/OtherTests/OtherWorkflowTests.cs
  37. 1 1
      Tests/EndToEnd/RouterTests/RouterCommandTests.cs
  38. 1 1
      Tests/EndToEnd/RouterTests/RouterErrorTests.cs
  39. 1 1
      Tests/EndToEnd/RouterTests/RouterWorkflowTests.cs
  40. 1 1
      Tests/EndToEnd/ServerTests/ServerCommandTests.cs
  41. 1 1
      Tests/EndToEnd/ServerTests/ServerErrorTests.cs
  42. 1 1
      Tests/EndToEnd/ServerTests/ServerWorkflowTests.cs
  43. 1 1
      Tests/EndToEnd/ServiceTests/ServiceCommandTests.cs
  44. 1 1
      Tests/EndToEnd/ServiceTests/ServiceErrorTests.cs
  45. 1 1
      Tests/EndToEnd/ServiceTests/ServiceWorkflowTests.cs
  46. 1 1
      Tests/EndToEnd/SwitchTests/SwitchCommandTests.cs
  47. 1 1
      Tests/EndToEnd/SwitchTests/SwitchErrorTests.cs
  48. 1 1
      Tests/EndToEnd/SwitchTests/SwitchWorkflowTests.cs
  49. 1 1
      Tests/EndToEnd/SystemTests/SystemCommandTests.cs
  50. 1 1
      Tests/EndToEnd/SystemTests/SystemErrorTests.cs
  51. 1 1
      Tests/EndToEnd/SystemTests/SystemWorkflowTests.cs
  52. 1 1
      Tests/EndToEnd/Tags/TagsWorkflowTests.cs
  53. 1 1
      Tests/EndToEnd/UpsTests/UpsCommandTests.cs
  54. 1 1
      Tests/EndToEnd/UpsTests/UpsErrorTest.cs
  55. 1 1
      Tests/EndToEnd/UpsTests/UpsPortWorkflowTests.cs
  56. 1 1
      Tests/EndToEnd/UpsTests/UpsWorkflowtests.cs
  57. 1 1
      Tests/Git/GitConfigurationTests.cs

+ 1 - 0
.gitignore

@@ -427,3 +427,4 @@ FodyWeavers.xsd
 
 # macOS
 .DS_Store
+ISSUE_TRIAGE.md

+ 1 - 0
Tests/Api/InventoryEndpointStartupTests.cs

@@ -9,6 +9,7 @@ namespace Tests.Api;
 ///     <c>rpk discover --push</c> on a timer. It therefore has to work on a server that
 ///     nobody has opened a page on yet.
 /// </summary>
+[Collection("Process-wide static state")]
 public class InventoryEndpointStartupTests(ITestOutputHelper output) : ApiTestBase(output) {
     private const string _existingConfig = """
                                            version: 3

+ 1 - 0
Tests/Api/InventoryEndpointTests.cs

@@ -5,6 +5,7 @@ using Xunit.Abstractions;
 
 namespace Tests.Api;
 
+[Collection("Process-wide static state")]
 public class InventoryEndpointTests(ITestOutputHelper output) : ApiTestBase(output) {
     [Fact]
     public async Task DryRun_Add_New_Resource_Does_Not_Persist() {

+ 1 - 0
Tests/Api/InventoryEndpointUnconfiguredTests.cs

@@ -4,6 +4,7 @@ using Xunit.Abstractions;
 
 namespace Tests.Api;
 
+[Collection("Process-wide static state")]
 public class InventoryEndpointUnconfiguredTests(ITestOutputHelper output) : ApiTestBase(output) {
     protected override void ConfigureTestConfiguration(IDictionary<string, string?> config) =>
         config.Remove("RPK_API_KEY");

+ 1 - 1
Tests/EndToEnd/AccessPointTests/AccessPointCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.AccessPointTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class AccessPointCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/AccessPointTests/AccessPointErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.AccessPointTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class AccessPointErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/AccessPointTests/AccessPointWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.AccessPointTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class AccessPointWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/CliCommandsWorkflowTests.cs

@@ -7,7 +7,7 @@ namespace Tests.EndToEnd;
 /// Comprehensive E2E test covering all CLI commands with varied input data.
 /// Tests happy paths for CRUD operations, components, labels, and exporters.
 /// </summary>
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class CliCommandsWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ConnectionTests/ConnectionRemoveWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ConnectionTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ConnectionRemoveWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ConnectionTests/ConnectionWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ConnectionTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ConnectionWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ConnectionTests/PortConnectionWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ConnectionTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class PortConnectionWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ConnectionTests/RenameResourceTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ConnectionTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class RenameResourceTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
 

+ 1 - 1
Tests/EndToEnd/CorruptConfigTests.cs

@@ -15,7 +15,7 @@ namespace Tests.EndToEnd;
 // leaves valid YAML that is indistinguishable from a smaller inventory. Nothing at
 // load time can detect it, which is precisely why the writer-side fix (atomic,
 // durable saves — see PhysicalTextFileStoreTests) is the primary remedy.
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class CorruptConfigTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     // Exactly what the serializer writes for three bare servers.

+ 1 - 1
Tests/EndToEnd/DeleteResourceTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class DeleteResourceTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/DesktopTests/DesktopCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.DesktopTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class DesktopCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/DesktopTests/DesktopErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.DesktopTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class DesktopErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/DesktopTests/DesktopWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.DesktopTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class DesktopWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/DiscoveryTests/DiscoverNetworkValidationTests.cs

@@ -7,7 +7,7 @@ namespace Tests.EndToEnd.DiscoveryTests;
 ///     `rpk discover network` argument validation. Every case here fails before any
 ///     probing starts, so these tests never send a packet anywhere.
 /// </summary>
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class DiscoverNetworkValidationTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<string> ExecuteAsync(params string[] args) =>

+ 1 - 1
Tests/EndToEnd/ExporterTests/AnsibleInventoryWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ExporterTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class AnsibleInventoryWorkflowTests(
     TempYamlCliFixture fs,
     ITestOutputHelper outputHelper)

+ 1 - 1
Tests/EndToEnd/ExporterTests/HostsExportWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ExporterTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class HostsExportWorkflowTests(
     TempYamlCliFixture fs,
     ITestOutputHelper outputHelper)

+ 1 - 1
Tests/EndToEnd/ExporterTests/SshExportWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ExporterTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class SshExportWorkflowTests(
     TempYamlCliFixture fs,
     ITestOutputHelper outputHelper)

+ 1 - 1
Tests/EndToEnd/FirewallTests/FirewallCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.FirewallTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class FirewallCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/FirewallTests/FirewallErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.FirewallTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class FirewallErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/FirewallTests/FirewallWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.FirewallTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class FirewallWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/GenerateAnsibleInventoryTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class GenerateAnsibleInventoryTests(
     TempYamlCliFixture fs,
     ITestOutputHelper outputHelper)

+ 1 - 1
Tests/EndToEnd/Graph/GraphTopologyCliTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.Graph;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class GraphTopologyCliTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<string> ExecuteAsync(params string[] args) {

+ 18 - 1
Tests/EndToEnd/Infra/YamlCliTestCollection.cs

@@ -1,6 +1,23 @@
 namespace Tests.EndToEnd.Infra;
 
-[CollectionDefinition("Yaml CLI tests", DisableParallelization = true)]
+/// <summary>
+///     Every test that registers RackPeek's services, directly or through the CLI host.
+///     <para>
+///         Registration writes process-wide statics as a side effect —
+///         <c>RpkConstants.HasGitServices</c> among them — which is harmless in
+///         production, where a process registers once, and a race in a test run, where
+///         dozens of classes register with different configuration. Two classes in
+///         different collections run in parallel, so a test asserting on one of those
+///         statics can read a value another class set microseconds earlier.
+///     </para>
+///     <para>
+///         One collection with parallelisation off is what makes those assertions mean
+///         anything. The name is deliberately about the shared state rather than about
+///         the YAML CLI, because membership is decided by "does this touch the statics",
+///         not by what the test is nominally exercising.
+///     </para>
+/// </summary>
+[CollectionDefinition("Process-wide static state", DisableParallelization = true)]
 public class YamlCliTestCollection
     : ICollectionFixture<TempYamlCliFixture> {
 }

+ 1 - 1
Tests/EndToEnd/Labels/LabelsWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.Labels;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class LabelsWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/LaptopTests/LaptopCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.LaptopTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class LaptopCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/LaptopTests/LaptopErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.LaptopTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class LaptopErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/LaptopTests/LaptopNicWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.LaptopTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class LaptopNicWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/LaptopTests/LaptopWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.LaptopTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class LaptopWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/OtherTests/OtherCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.OtherTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class OtherCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/OtherTests/OtherErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.OtherTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class OtherErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/OtherTests/OtherPortWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.OtherTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class OtherPortWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/OtherTests/OtherWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.OtherTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class OtherWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/RouterTests/RouterCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.RouterTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class RouterCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/RouterTests/RouterErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.RouterTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class RouterErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/RouterTests/RouterWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.RouterTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class RouterWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ServerTests/ServerCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ServerTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ServerCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ServerTests/ServerErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ServerTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ServerErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ServerTests/ServerWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ServerTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ServerWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ServiceTests/ServiceCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ServiceTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ServiceCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ServiceTests/ServiceErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ServiceTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ServiceErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/ServiceTests/ServiceWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.ServiceTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class ServiceWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/SwitchTests/SwitchCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.SwitchTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class SwitchCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/SwitchTests/SwitchErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.SwitchTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class SwitchErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/SwitchTests/SwitchWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.SwitchTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class SwitchWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/SystemTests/SystemCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.SystemTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class SystemCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/SystemTests/SystemErrorTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.SystemTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class SystemErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/SystemTests/SystemWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.SystemTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class SystemWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/Tags/TagsWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.Tags;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class TagsWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/UpsTests/UpsCommandTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.UpsTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class UpsCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/UpsTests/UpsErrorTest.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.UpsTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class UpsErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/UpsTests/UpsPortWorkflowTests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.UpsTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class UpsPortWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/EndToEnd/UpsTests/UpsWorkflowtests.cs

@@ -3,7 +3,7 @@ using Xunit.Abstractions;
 
 namespace Tests.EndToEnd.UpsTests;
 
-[Collection("Yaml CLI tests")]
+[Collection("Process-wide static state")]
 public class UpsWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
     : IClassFixture<TempYamlCliFixture> {
     private async Task<(string, string)> ExecuteAsync(params string[] args) {

+ 1 - 1
Tests/Git/GitConfigurationTests.cs

@@ -6,7 +6,7 @@ using RackPeek.Domain.Git;
 
 namespace Tests.Git;
 
-[Collection("Git static state")]
+[Collection("Process-wide static state")]
 public sealed class GitConfigurationTests : IDisposable {
     private readonly string _tempDir;