123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- //go:build !windows
- package runconfig // import "github.com/docker/docker/runconfig"
- import (
- "bytes"
- "fmt"
- "os"
- "testing"
- "github.com/docker/docker/api/types/container"
- "github.com/docker/docker/pkg/sysinfo"
- "gotest.tools/v3/assert"
- )
- func TestDecodeHostConfig(t *testing.T) {
- fixtures := []struct {
- file string
- }{
- {"fixtures/unix/container_hostconfig_1_14.json"},
- {"fixtures/unix/container_hostconfig_1_19.json"},
- }
- for _, f := range fixtures {
- b, err := os.ReadFile(f.file)
- if err != nil {
- t.Fatal(err)
- }
- c, err := decodeHostConfig(bytes.NewReader(b))
- if err != nil {
- t.Fatal(fmt.Errorf("Error parsing %s: %v", f, err))
- }
- assert.Check(t, !c.Privileged)
- if l := len(c.Binds); l != 1 {
- t.Fatalf("Expected 1 bind, found %d\n", l)
- }
- if len(c.CapAdd) != 1 && c.CapAdd[0] != "NET_ADMIN" {
- t.Fatalf("Expected CapAdd NET_ADMIN, got %v", c.CapAdd)
- }
- if len(c.CapDrop) != 1 && c.CapDrop[0] != "NET_ADMIN" {
- t.Fatalf("Expected CapDrop NET_ADMIN, got %v", c.CapDrop)
- }
- }
- }
- func TestValidateResources(t *testing.T) {
- type resourceTest struct {
- ConfigCPURealtimePeriod int64
- ConfigCPURealtimeRuntime int64
- SysInfoCPURealtime bool
- ErrorExpected bool
- FailureMsg string
- }
- tests := []resourceTest{
- {
- ConfigCPURealtimePeriod: 1000,
- ConfigCPURealtimeRuntime: 1000,
- SysInfoCPURealtime: true,
- ErrorExpected: false,
- FailureMsg: "Expected valid configuration",
- },
- {
- ConfigCPURealtimePeriod: 5000,
- ConfigCPURealtimeRuntime: 5000,
- SysInfoCPURealtime: false,
- ErrorExpected: true,
- FailureMsg: "Expected failure when cpu-rt-period is set but kernel doesn't support it",
- },
- {
- ConfigCPURealtimePeriod: 5000,
- ConfigCPURealtimeRuntime: 5000,
- SysInfoCPURealtime: false,
- ErrorExpected: true,
- FailureMsg: "Expected failure when cpu-rt-runtime is set but kernel doesn't support it",
- },
- {
- ConfigCPURealtimePeriod: 5000,
- ConfigCPURealtimeRuntime: 10000,
- SysInfoCPURealtime: true,
- ErrorExpected: true,
- FailureMsg: "Expected failure when cpu-rt-runtime is greater than cpu-rt-period",
- },
- }
- for _, rt := range tests {
- var hc container.HostConfig
- hc.Resources.CPURealtimePeriod = rt.ConfigCPURealtimePeriod
- hc.Resources.CPURealtimeRuntime = rt.ConfigCPURealtimeRuntime
- var si sysinfo.SysInfo
- si.CPURealtime = rt.SysInfoCPURealtime
- if err := validateResources(&hc, &si); (err != nil) != rt.ErrorExpected {
- t.Fatal(rt.FailureMsg, err)
- }
- }
- }
|