| package container // import "github.com/docker/docker/container" | |
| import ( | |
| "fmt" | |
| "os" | |
| "path/filepath" | |
| "testing" | |
| "github.com/docker/docker/api/types/container" | |
| swarmtypes "github.com/docker/docker/api/types/swarm" | |
| "github.com/docker/docker/daemon/logger/jsonfilelog" | |
| "github.com/moby/sys/signal" | |
| "gotest.tools/v3/assert" | |
| ) | |
| func TestContainerStopSignal(t *testing.T) { | |
| c := &Container{ | |
| Config: &container.Config{}, | |
| } | |
| def, err := signal.ParseSignal(defaultStopSignal) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| s := c.StopSignal() | |
| if s != def { | |
| t.Fatalf("Expected %v, got %v", def, s) | |
| } | |
| c = &Container{ | |
| Config: &container.Config{StopSignal: "SIGKILL"}, | |
| } | |
| s = c.StopSignal() | |
| if s != 9 { | |
| t.Fatalf("Expected 9, got %v", s) | |
| } | |
| } | |
| func TestContainerStopTimeout(t *testing.T) { | |
| c := &Container{ | |
| Config: &container.Config{}, | |
| } | |
| s := c.StopTimeout() | |
| if s != defaultStopTimeout { | |
| t.Fatalf("Expected %v, got %v", defaultStopTimeout, s) | |
| } | |
| stopTimeout := 15 | |
| c = &Container{ | |
| Config: &container.Config{StopTimeout: &stopTimeout}, | |
| } | |
| s = c.StopTimeout() | |
| if s != stopTimeout { | |
| t.Fatalf("Expected %v, got %v", stopTimeout, s) | |
| } | |
| } | |
| func TestContainerSecretReferenceDestTarget(t *testing.T) { | |
| ref := &swarmtypes.SecretReference{ | |
| File: &swarmtypes.SecretReferenceFileTarget{ | |
| Name: "app", | |
| }, | |
| } | |
| d := getSecretTargetPath(ref) | |
| expected := filepath.Join(containerSecretMountPath, "app") | |
| if d != expected { | |
| t.Fatalf("expected secret dest %q; received %q", expected, d) | |
| } | |
| } | |
| func TestContainerLogPathSetForJSONFileLogger(t *testing.T) { | |
| containerRoot, err := os.MkdirTemp("", "TestContainerLogPathSetForJSONFileLogger") | |
| assert.NilError(t, err) | |
| defer os.RemoveAll(containerRoot) | |
| c := &Container{ | |
| Config: &container.Config{}, | |
| HostConfig: &container.HostConfig{ | |
| LogConfig: container.LogConfig{ | |
| Type: jsonfilelog.Name, | |
| }, | |
| }, | |
| ID: "TestContainerLogPathSetForJSONFileLogger", | |
| Root: containerRoot, | |
| } | |
| logger, err := c.StartLogger() | |
| assert.NilError(t, err) | |
| defer logger.Close() | |
| expectedLogPath, err := filepath.Abs(filepath.Join(containerRoot, fmt.Sprintf("%s-json.log", c.ID))) | |
| assert.NilError(t, err) | |
| assert.Equal(t, c.LogPath, expectedLogPath) | |
| } | |
| func TestContainerLogPathSetForRingLogger(t *testing.T) { | |
| containerRoot, err := os.MkdirTemp("", "TestContainerLogPathSetForRingLogger") | |
| assert.NilError(t, err) | |
| defer os.RemoveAll(containerRoot) | |
| c := &Container{ | |
| Config: &container.Config{}, | |
| HostConfig: &container.HostConfig{ | |
| LogConfig: container.LogConfig{ | |
| Type: jsonfilelog.Name, | |
| Config: map[string]string{ | |
| "mode": string(container.LogModeNonBlock), | |
| }, | |
| }, | |
| }, | |
| ID: "TestContainerLogPathSetForRingLogger", | |
| Root: containerRoot, | |
| } | |
| logger, err := c.StartLogger() | |
| assert.NilError(t, err) | |
| defer logger.Close() | |
| expectedLogPath, err := filepath.Abs(filepath.Join(containerRoot, fmt.Sprintf("%s-json.log", c.ID))) | |
| assert.NilError(t, err) | |
| assert.Equal(t, c.LogPath, expectedLogPath) | |
| } |