123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package container // import "github.com/docker/docker/daemon/cluster/executor/container"
- import (
- "os"
- "strings"
- "testing"
- "github.com/docker/docker/daemon"
- "github.com/docker/docker/pkg/stringid"
- "github.com/moby/swarmkit/v2/api"
- )
- func newTestControllerWithMount(m api.Mount) (*controller, error) {
- return newController(&daemon.Daemon{}, nil, nil, &api.Task{
- ID: stringid.GenerateRandomID(),
- ServiceID: stringid.GenerateRandomID(),
- Spec: api.TaskSpec{
- Runtime: &api.TaskSpec_Container{
- Container: &api.ContainerSpec{
- Image: "image_name",
- Labels: map[string]string{
- "com.docker.swarm.task.id": "id",
- },
- Mounts: []api.Mount{m},
- },
- },
- },
- }, nil,
- nil)
- }
- func TestControllerValidateMountBind(t *testing.T) {
- // with improper source
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeBind,
- Source: "foo",
- Target: testAbsPath,
- }); err == nil || !strings.Contains(err.Error(), "invalid bind mount source") {
- t.Fatalf("expected error, got: %v", err)
- }
- // with non-existing source
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeBind,
- Source: testAbsNonExistent,
- Target: testAbsPath,
- }); err != nil {
- t.Fatalf("controller should not error at creation: %v", err)
- }
- // with proper source
- tmpdir, err := os.MkdirTemp("", "TestControllerValidateMountBind")
- if err != nil {
- t.Fatalf("failed to create temp dir: %v", err)
- }
- defer os.Remove(tmpdir)
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeBind,
- Source: tmpdir,
- Target: testAbsPath,
- }); err != nil {
- t.Fatalf("expected error, got: %v", err)
- }
- }
- func TestControllerValidateMountVolume(t *testing.T) {
- // with improper source
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeVolume,
- Source: testAbsPath,
- Target: testAbsPath,
- }); err == nil || !strings.Contains(err.Error(), "invalid volume mount source") {
- t.Fatalf("expected error, got: %v", err)
- }
- // with proper source
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeVolume,
- Source: "foo",
- Target: testAbsPath,
- }); err != nil {
- t.Fatalf("expected error, got: %v", err)
- }
- }
- func TestControllerValidateMountTarget(t *testing.T) {
- tmpdir, err := os.MkdirTemp("", "TestControllerValidateMountTarget")
- if err != nil {
- t.Fatalf("failed to create temp dir: %v", err)
- }
- defer os.Remove(tmpdir)
- // with improper target
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeBind,
- Source: testAbsPath,
- Target: "foo",
- }); err == nil || !strings.Contains(err.Error(), "invalid mount target") {
- t.Fatalf("expected error, got: %v", err)
- }
- // with proper target
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeBind,
- Source: tmpdir,
- Target: testAbsPath,
- }); err != nil {
- t.Fatalf("expected no error, got: %v", err)
- }
- }
- func TestControllerValidateMountTmpfs(t *testing.T) {
- // with improper target
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeTmpfs,
- Source: "foo",
- Target: testAbsPath,
- }); err == nil || !strings.Contains(err.Error(), "invalid tmpfs source") {
- t.Fatalf("expected error, got: %v", err)
- }
- // with proper target
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.MountTypeTmpfs,
- Target: testAbsPath,
- }); err != nil {
- t.Fatalf("expected no error, got: %v", err)
- }
- }
- func TestControllerValidateMountInvalidType(t *testing.T) {
- // with improper target
- if _, err := newTestControllerWithMount(api.Mount{
- Type: api.Mount_MountType(9999),
- Source: "foo",
- Target: testAbsPath,
- }); err == nil || !strings.Contains(err.Error(), "invalid mount type") {
- t.Fatalf("expected error, got: %v", err)
- }
- }
|