From e6ba030fca25e97646cddd179c4bd83aa2ca3e1a Mon Sep 17 00:00:00 2001 From: J Logan Date: Thu, 30 Apr 2026 15:42:04 -0700 Subject: [PATCH] Sort networks by ID in API server `list()`. (#1487) Closes #1483. Consistent well-defined behavior for server APIs. --- .../Server/Networks/NetworksService.swift | 1 + .../CLITests/Subcommands/Networks/TestCLINetwork.swift | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/Sources/Services/ContainerAPIService/Server/Networks/NetworksService.swift b/Sources/Services/ContainerAPIService/Server/Networks/NetworksService.swift index 59ce902e..62431b47 100644 --- a/Sources/Services/ContainerAPIService/Server/Networks/NetworksService.swift +++ b/Sources/Services/ContainerAPIService/Server/Networks/NetworksService.swift @@ -179,6 +179,7 @@ public actor NetworksService { return serviceStates.reduce(into: [NetworkState]()) { $0.append($1.value.networkState) } + .sorted { $0.id < $1.id } } /// Create a new network from the provided configuration. diff --git a/Tests/CLITests/Subcommands/Networks/TestCLINetwork.swift b/Tests/CLITests/Subcommands/Networks/TestCLINetwork.swift index d0ceb932..aaa0af62 100644 --- a/Tests/CLITests/Subcommands/Networks/TestCLINetwork.swift +++ b/Tests/CLITests/Subcommands/Networks/TestCLINetwork.swift @@ -50,6 +50,16 @@ class TestCLINetwork: CLITest { defer { _ = try? run(arguments: networkDeleteArgs) } + + let listResult = try? run(arguments: ["network", "ls", "--quiet"]) + let networkIds = + listResult?.output + .components(separatedBy: .newlines) + .map { $0.trimmingCharacters(in: .whitespaces) } + .filter({ !$0.isEmpty }) + ?? ["OUTPUT MISSING"] + #expect(networkIds == networkIds.sorted(), "network IDs should be sorted") + let port = UInt16.random(in: 50000..<60000) try doLongRun( name: name,