Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions cmd/nerdctl/container/container_run_network_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1080,3 +1080,58 @@ dns_search = ["example.com", "test.local"]`
}
testCase.Run(t)
}

// TestReservePorts tests that a published port appears
// as a listening port on the host.
// See https://github.com/containerd/nerdctl/pull/4526
func TestReservePorts(t *testing.T) {
nerdtest.Setup()
testCase := &test.Case{
Require: require.All(
require.Not(require.Windows),
require.Not(nerdtest.RootlessWithoutDetachNetNS), // RootlessKit v1
),
NoParallel: true,
SubTests: []*test.Case{
{
Description: "TCP",
Setup: func(data test.Data, helpers test.Helpers) {
helpers.Ensure("run", "-d", "--name", data.Identifier("nginx"),
"-p", "60080:80", testutil.NginxAlpineImage)
nerdtest.EnsureContainerStarted(helpers, data.Identifier("nginx"))
time.Sleep(3 * time.Second)
},
Cleanup: func(data test.Data, helpers test.Helpers) {
helpers.Anyhow("rm", "-f", data.Identifier("nginx"))
},
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
return helpers.Command("run", "--rm",
"--network=host", testutil.CommonImage, "netstat", "-lnt")
},
Expected: test.Expects(expect.ExitCodeSuccess, nil, expect.All(
expect.Contains(":60080"),
)),
},
{
Description: "UDP",
Setup: func(data test.Data, helpers test.Helpers) {
helpers.Ensure("run", "-d", "--name", data.Identifier("coredns"),
"-p", "60053:53/udp", testutil.CoreDNSImage)
nerdtest.EnsureContainerStarted(helpers, data.Identifier("coredns"))
time.Sleep(3 * time.Second)
},
Cleanup: func(data test.Data, helpers test.Helpers) {
helpers.Anyhow("rm", "-f", data.Identifier("coredns"))
},
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
return helpers.Command("run", "--rm",
"--network=host", testutil.CommonImage, "netstat", "-lnu")
},
Expected: test.Expects(expect.ExitCodeSuccess, nil, expect.All(
expect.Contains(":60053"),
)),
},
},
}
testCase.Run(t)
}
4 changes: 4 additions & 0 deletions pkg/testutil/images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ ubuntu:
ref: "public.ecr.aws/docker/library/ubuntu"
tag: "23.10"

coredns:
ref: "public.ecr.aws/eks-distro/coredns/coredns"
tag: "v1.12.2-eks-1-31-latest"

# Future: images to add or update soon.
# busybox:1.37.0@sha256:37f7b378a29ceb4c551b1b5582e27747b855bbfaa73fa11914fe0df028dc581f
# debian:bookworm-slim@sha256:b1211f6d19afd012477bd34fdcabb6b663d680e0f4b0537da6e6b0fd057a3ec3
Expand Down
18 changes: 18 additions & 0 deletions pkg/testutil/nerdtest/requirements.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,24 @@ var Rootless = &test.Requirement{
},
}

// RootlessWithDetachNetNS marks a test as suitable only for rootless environment with detached netns support.
var RootlessWithDetachNetNS = &test.Requirement{
Check: func(data test.Data, helpers test.Helpers) (ret bool, mess string) {
ns, err := rootlessutil.DetachedNetNS()
if err != nil {
return false, fmt.Sprintf("failed to check for detached netns: %+v", err)
}
if ns == "" {
return false, "detached netns is not supported"
}
return true, "detached netns is supported"
},
}

// RootlessWithoutDetachNetNS marks a test as suitable only for rootless environment without detached netns support.
// i.e., RootlessKit v1.
var RootlessWithoutDetachNetNS = require.All(Rootless, require.Not(RootlessWithDetachNetNS))

// Rootful marks a test as suitable only for rootful env
var Rootful = require.Not(Rootless)

Expand Down
1 change: 1 addition & 0 deletions pkg/testutil/testutil_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ var (
FedoraESGZImage = GetTestImage("fedora_esgz") // eStargz
FfmpegSociImage = GetTestImage("ffmpeg_soci") // SOCI
UbuntuImage = GetTestImage("ubuntu") // Large enough for testing soci index creation
CoreDNSImage = GetTestImage("coredns")
)

const (
Expand Down
Loading