@@ -22,17 +22,20 @@ import (
22
22
"net"
23
23
"os"
24
24
"os/exec"
25
+ "path/filepath"
25
26
"regexp"
26
27
"runtime"
27
28
"strings"
28
29
"testing"
29
30
"time"
30
31
31
32
"github.com/containernetworking/plugins/pkg/ns"
33
+ "github.com/opencontainers/go-digest"
32
34
"github.com/vishvananda/netlink"
33
35
"gotest.tools/v3/assert"
34
36
"gotest.tools/v3/icmd"
35
37
38
+ "github.com/containerd/containerd/v2/defaults"
36
39
"github.com/containerd/containerd/v2/pkg/netns"
37
40
"github.com/containerd/errdefs"
38
41
@@ -41,6 +44,7 @@ import (
41
44
"github.com/containerd/nerdctl/v2/pkg/testutil"
42
45
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
43
46
"github.com/containerd/nerdctl/v2/pkg/testutil/nettestutil"
47
+ "github.com/containerd/nerdctl/v2/pkg/testutil/test"
44
48
)
45
49
46
50
func extractHostPort (portMapping string , port string ) (string , error ) {
@@ -350,15 +354,50 @@ func TestRunPort(t *testing.T) {
350
354
}
351
355
352
356
func TestRunWithInvalidPortThenCleanUp (t * testing.T ) {
357
+ testCase := nerdtest .Setup ()
353
358
// docker does not set label restriction to 4096 bytes
354
- testutil .DockerIncompatible (t )
355
- t .Parallel ()
356
- base := testutil .NewBase (t )
357
- containerName := testutil .Identifier (t )
358
- defer base .Cmd ("rm" , "-f" , containerName ).Run ()
359
- base .Cmd ("run" , "--rm" , "--name" , containerName , "-p" , "22200-22299:22200-22299" , testutil .CommonImage ).AssertFail ()
360
- base .Cmd ("run" , "--rm" , "--name" , containerName , "-p" , "22200-22299:22200-22299" , testutil .CommonImage ).AssertCombinedOutContains (errdefs .ErrInvalidArgument .Error ())
361
- base .Cmd ("run" , "--rm" , "--name" , containerName , testutil .CommonImage ).AssertOK ()
359
+ testCase .Require = test .Not (nerdtest .Docker )
360
+
361
+ testCase .SubTests = []* test.Case {
362
+ {
363
+ Description : "Run a container with invalid ports, and then clean up." ,
364
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
365
+ helpers .Anyhow ("rm" , "--data-root" , data .TempDir (), "-f" , data .Identifier ())
366
+ },
367
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
368
+ return helpers .Command ("run" , "--data-root" , data .TempDir (), "--rm" , "--name" , data .Identifier (), "-p" , "22200-22299:22200-22299" , testutil .CommonImage )
369
+ },
370
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
371
+ return & test.Expected {
372
+ ExitCode : 1 ,
373
+ Errors : []error {errdefs .ErrInvalidArgument },
374
+ Output : func (stdout string , info string , t * testing.T ) {
375
+ getAddrHash := func (addr string ) string {
376
+ const addrHashLen = 8
377
+
378
+ d := digest .SHA256 .FromString (addr )
379
+ h := d .Encoded ()[0 :addrHashLen ]
380
+
381
+ return h
382
+ }
383
+
384
+ dataRoot := data .TempDir ()
385
+ h := getAddrHash (defaults .DefaultAddress )
386
+ dataStore := filepath .Join (dataRoot , h )
387
+ namespace := string (helpers .Read (nerdtest .Namespace ))
388
+ etchostsPath := filepath .Join (dataStore , "etchosts" , namespace )
389
+
390
+ etchostsDirs , err := os .ReadDir (etchostsPath )
391
+
392
+ assert .NilError (t , err )
393
+ assert .Equal (t , len (etchostsDirs ), 0 )
394
+ },
395
+ }
396
+ },
397
+ },
398
+ }
399
+
400
+ testCase .Run (t )
362
401
}
363
402
364
403
func TestRunContainerWithStaticIP (t * testing.T ) {
0 commit comments