github.com/devdivbcp/moby@v17.12.0-ce-rc1.0.20200726071732-2d4bfdc789ad+incompatible/integration/container/run_linux_test.go (about)

     1  package container // import "github.com/docker/docker/integration/container"
     2  
     3  import (
     4  	"context"
     5  	"strconv"
     6  	"strings"
     7  	"testing"
     8  	"time"
     9  
    10  	containertypes "github.com/docker/docker/api/types/container"
    11  	"github.com/docker/docker/api/types/versions"
    12  	"github.com/docker/docker/integration/internal/container"
    13  	"gotest.tools/assert"
    14  	is "gotest.tools/assert/cmp"
    15  	"gotest.tools/poll"
    16  	"gotest.tools/skip"
    17  )
    18  
    19  func TestKernelTCPMemory(t *testing.T) {
    20  	skip.If(t, testEnv.DaemonInfo.OSType != "linux")
    21  	skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature")
    22  	skip.If(t, !testEnv.DaemonInfo.KernelMemoryTCP)
    23  
    24  	defer setupTest(t)()
    25  	client := testEnv.APIClient()
    26  	ctx := context.Background()
    27  
    28  	const (
    29  		kernelMemoryTCP int64 = 200 * 1024 * 1024
    30  	)
    31  
    32  	cID := container.Run(ctx, t, client, func(c *container.TestContainerConfig) {
    33  		c.HostConfig.Resources = containertypes.Resources{
    34  			KernelMemoryTCP: kernelMemoryTCP,
    35  		}
    36  	})
    37  
    38  	poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond))
    39  
    40  	inspect, err := client.ContainerInspect(ctx, cID)
    41  	assert.NilError(t, err)
    42  	assert.Check(t, is.Equal(kernelMemoryTCP, inspect.HostConfig.KernelMemoryTCP))
    43  
    44  	res, err := container.Exec(ctx, client, cID,
    45  		[]string{"cat", "/sys/fs/cgroup/memory/memory.kmem.tcp.limit_in_bytes"})
    46  	assert.NilError(t, err)
    47  	assert.Assert(t, is.Len(res.Stderr(), 0))
    48  	assert.Equal(t, 0, res.ExitCode)
    49  	assert.Check(t, is.Equal(strconv.FormatInt(kernelMemoryTCP, 10), strings.TrimSpace(res.Stdout())))
    50  }
    51  
    52  func TestNISDomainname(t *testing.T) {
    53  	// Older versions of the daemon would concatenate hostname and domainname,
    54  	// so hostname "foobar" and domainname "baz.cyphar.com" would produce
    55  	// `foobar.baz.cyphar.com` as hostname.
    56  	skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature")
    57  	skip.If(t, testEnv.DaemonInfo.OSType != "linux")
    58  
    59  	defer setupTest(t)()
    60  	client := testEnv.APIClient()
    61  	ctx := context.Background()
    62  
    63  	const (
    64  		hostname   = "foobar"
    65  		domainname = "baz.cyphar.com"
    66  	)
    67  
    68  	cID := container.Run(ctx, t, client, func(c *container.TestContainerConfig) {
    69  		c.Config.Hostname = hostname
    70  		c.Config.Domainname = domainname
    71  	})
    72  
    73  	poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond))
    74  
    75  	inspect, err := client.ContainerInspect(ctx, cID)
    76  	assert.NilError(t, err)
    77  	assert.Check(t, is.Equal(hostname, inspect.Config.Hostname))
    78  	assert.Check(t, is.Equal(domainname, inspect.Config.Domainname))
    79  
    80  	// Check hostname.
    81  	res, err := container.Exec(ctx, client, cID,
    82  		[]string{"cat", "/proc/sys/kernel/hostname"})
    83  	assert.NilError(t, err)
    84  	assert.Assert(t, is.Len(res.Stderr(), 0))
    85  	assert.Equal(t, 0, res.ExitCode)
    86  	assert.Check(t, is.Equal(hostname, strings.TrimSpace(res.Stdout())))
    87  
    88  	// Check domainname.
    89  	res, err = container.Exec(ctx, client, cID,
    90  		[]string{"cat", "/proc/sys/kernel/domainname"})
    91  	assert.NilError(t, err)
    92  	assert.Assert(t, is.Len(res.Stderr(), 0))
    93  	assert.Equal(t, 0, res.ExitCode)
    94  	assert.Check(t, is.Equal(domainname, strings.TrimSpace(res.Stdout())))
    95  }