Skip to content

Conversation

@haytok
Copy link
Contributor

@haytok haytok commented Dec 1, 2025

…ally

The current implementation can cause the unit test for FormatPorts in pkg/formatter to fail intermittently, as shown below:

$ go test -run TestFormatPorts -count 10
--- FAIL: TestFormatPorts (0.00s)
	--- FAIL: TestFormatPorts/mixed_tcp_and_udp_with_consecutive_ports_on_anyhost (0.00s)
		formatter_test.go:191: assertion failed: 0.0.0.0:3000-3001->8080-8081/tcp, 0.0.0.0:3002-3003->8082-8083/udp (tt.expected string) != 0.0.0.0:3002-3003->8082-8083/udp, 0.0.0.0:3000-3001->8080-8081/tcp (result string)
--- FAIL: TestFormatPorts (0.00s)
	--- FAIL: TestFormatPorts/mixed_tcp_and_udp_with_consecutive_ports_on_anyhost (0.00s)
		formatter_test.go:191: assertion failed: 0.0.0.0:3000-3001->8080-8081/tcp, 0.0.0.0:3002-3003->8082-8083/udp (tt.expected string) != 0.0.0.0:3002-3003->8082-8083/udp, 0.0.0.0:3000-3001->8080-8081/tcp (result string)
--- FAIL: TestFormatPorts (0.00s)
	--- FAIL: TestFormatPorts/mixed_tcp_and_udp_with_consecutive_ports_on_anyhost (0.00s)
		formatter_test.go:191: assertion failed: 0.0.0.0:3000-3001->8080-8081/tcp, 0.0.0.0:3002-3003->8082-8083/udp (tt.expected string) != 0.0.0.0:3002-3003->8082-8083/udp, 0.0.0.0:3000-3001->8080-8081/tcp (result string)
FAIL
exit status 1
FAIL	github.com/containerd/nerdctl/v2/pkg/formatter	0.005s

This occurs because the FormatPorts function iterates over a map, whose iteration order is non-deterministic.
As a result, the output string may vary between test runs.

This behavior has been reported in issue/#4626.

To address this, this commit ensures that the string returned by FormatPorts is sorted alphabetically, resulting in stable and predictable output.

…ally

The current implementation can cause the unit test for `FormatPorts` in
`pkg/formatter` to fail intermittently, as shown below:

```bash
$ go test -run TestFormatPorts -count 10
--- FAIL: TestFormatPorts (0.00s)
	--- FAIL: TestFormatPorts/mixed_tcp_and_udp_with_consecutive_ports_on_anyhost (0.00s)
		formatter_test.go:191: assertion failed: 0.0.0.0:3000-3001->8080-8081/tcp, 0.0.0.0:3002-3003->8082-8083/udp (tt.expected string) != 0.0.0.0:3002-3003->8082-8083/udp, 0.0.0.0:3000-3001->8080-8081/tcp (result string)
--- FAIL: TestFormatPorts (0.00s)
	--- FAIL: TestFormatPorts/mixed_tcp_and_udp_with_consecutive_ports_on_anyhost (0.00s)
		formatter_test.go:191: assertion failed: 0.0.0.0:3000-3001->8080-8081/tcp, 0.0.0.0:3002-3003->8082-8083/udp (tt.expected string) != 0.0.0.0:3002-3003->8082-8083/udp, 0.0.0.0:3000-3001->8080-8081/tcp (result string)
--- FAIL: TestFormatPorts (0.00s)
	--- FAIL: TestFormatPorts/mixed_tcp_and_udp_with_consecutive_ports_on_anyhost (0.00s)
		formatter_test.go:191: assertion failed: 0.0.0.0:3000-3001->8080-8081/tcp, 0.0.0.0:3002-3003->8082-8083/udp (tt.expected string) != 0.0.0.0:3002-3003->8082-8083/udp, 0.0.0.0:3000-3001->8080-8081/tcp (result string)
FAIL
exit status 1
FAIL	github.com/containerd/nerdctl/v2/pkg/formatter	0.005s
```

This occurs because the `FormatPorts` function iterates over a map, whose
iteration order is non-deterministic.
As a result, the output string may vary between test runs.

This behavior has been reported in issue/containerd#4626.

To address this, this commit ensures that the string returned by
`FormatPorts` is sorted alphabetically, resulting in stable and predictable
output.

Signed-off-by: Hayato Kiwata <haytok@amazon.co.jp>
Copy link
Member

@AkihiroSuda AkihiroSuda left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks

@AkihiroSuda AkihiroSuda added this to the v2.2.1 (?) milestone Dec 2, 2025
@AkihiroSuda AkihiroSuda merged commit 16218b7 into containerd:main Dec 2, 2025
54 of 56 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants