Skip to content

Commit 59253e9

Browse files
authored
Merge pull request containerd#4531 from AkihiroSuda/test-reserve-ports
Add TestReservePorts
2 parents 385c22a + eb3ccbc commit 59253e9

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

cmd/nerdctl/container/container_run_network_linux_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,3 +1080,58 @@ dns_search = ["example.com", "test.local"]`
10801080
}
10811081
testCase.Run(t)
10821082
}
1083+
1084+
// TestReservePorts tests that a published port appears
1085+
// as a listening port on the host.
1086+
// See https://github.com/containerd/nerdctl/pull/4526
1087+
func TestReservePorts(t *testing.T) {
1088+
nerdtest.Setup()
1089+
testCase := &test.Case{
1090+
Require: require.All(
1091+
require.Not(require.Windows),
1092+
require.Not(nerdtest.RootlessWithoutDetachNetNS), // RootlessKit v1
1093+
),
1094+
NoParallel: true,
1095+
SubTests: []*test.Case{
1096+
{
1097+
Description: "TCP",
1098+
Setup: func(data test.Data, helpers test.Helpers) {
1099+
helpers.Ensure("run", "-d", "--name", data.Identifier("nginx"),
1100+
"-p", "60080:80", testutil.NginxAlpineImage)
1101+
nerdtest.EnsureContainerStarted(helpers, data.Identifier("nginx"))
1102+
time.Sleep(3 * time.Second)
1103+
},
1104+
Cleanup: func(data test.Data, helpers test.Helpers) {
1105+
helpers.Anyhow("rm", "-f", data.Identifier("nginx"))
1106+
},
1107+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
1108+
return helpers.Command("run", "--rm",
1109+
"--network=host", testutil.CommonImage, "netstat", "-lnt")
1110+
},
1111+
Expected: test.Expects(expect.ExitCodeSuccess, nil, expect.All(
1112+
expect.Contains(":60080"),
1113+
)),
1114+
},
1115+
{
1116+
Description: "UDP",
1117+
Setup: func(data test.Data, helpers test.Helpers) {
1118+
helpers.Ensure("run", "-d", "--name", data.Identifier("coredns"),
1119+
"-p", "60053:53/udp", testutil.CoreDNSImage)
1120+
nerdtest.EnsureContainerStarted(helpers, data.Identifier("coredns"))
1121+
time.Sleep(3 * time.Second)
1122+
},
1123+
Cleanup: func(data test.Data, helpers test.Helpers) {
1124+
helpers.Anyhow("rm", "-f", data.Identifier("coredns"))
1125+
},
1126+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
1127+
return helpers.Command("run", "--rm",
1128+
"--network=host", testutil.CommonImage, "netstat", "-lnu")
1129+
},
1130+
Expected: test.Expects(expect.ExitCodeSuccess, nil, expect.All(
1131+
expect.Contains(":60053"),
1132+
)),
1133+
},
1134+
},
1135+
}
1136+
testCase.Run(t)
1137+
}

pkg/testutil/images.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ ubuntu:
7575
ref: "public.ecr.aws/docker/library/ubuntu"
7676
tag: "23.10"
7777

78+
coredns:
79+
ref: "public.ecr.aws/eks-distro/coredns/coredns"
80+
tag: "v1.12.2-eks-1-31-latest"
81+
7882
# Future: images to add or update soon.
7983
# busybox:1.37.0@sha256:37f7b378a29ceb4c551b1b5582e27747b855bbfaa73fa11914fe0df028dc581f
8084
# debian:bookworm-slim@sha256:b1211f6d19afd012477bd34fdcabb6b663d680e0f4b0537da6e6b0fd057a3ec3

pkg/testutil/nerdtest/requirements.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,24 @@ var Rootless = &test.Requirement{
161161
},
162162
}
163163

164+
// RootlessWithDetachNetNS marks a test as suitable only for rootless environment with detached netns support.
165+
var RootlessWithDetachNetNS = &test.Requirement{
166+
Check: func(data test.Data, helpers test.Helpers) (ret bool, mess string) {
167+
ns, err := rootlessutil.DetachedNetNS()
168+
if err != nil {
169+
return false, fmt.Sprintf("failed to check for detached netns: %+v", err)
170+
}
171+
if ns == "" {
172+
return false, "detached netns is not supported"
173+
}
174+
return true, "detached netns is supported"
175+
},
176+
}
177+
178+
// RootlessWithoutDetachNetNS marks a test as suitable only for rootless environment without detached netns support.
179+
// i.e., RootlessKit v1.
180+
var RootlessWithoutDetachNetNS = require.All(Rootless, require.Not(RootlessWithDetachNetNS))
181+
164182
// Rootful marks a test as suitable only for rootful env
165183
var Rootful = require.Not(Rootless)
166184

pkg/testutil/testutil_linux.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ var (
3434
FedoraESGZImage = GetTestImage("fedora_esgz") // eStargz
3535
FfmpegSociImage = GetTestImage("ffmpeg_soci") // SOCI
3636
UbuntuImage = GetTestImage("ubuntu") // Large enough for testing soci index creation
37+
CoreDNSImage = GetTestImage("coredns")
3738
)
3839

3940
const (

0 commit comments

Comments
 (0)