github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/daemon/cluster/executor/container/validate_test.go (about) 1 package container // import "github.com/demonoid81/moby/daemon/cluster/executor/container" 2 3 import ( 4 "io/ioutil" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/demonoid81/moby/daemon" 10 "github.com/demonoid81/moby/pkg/stringid" 11 "github.com/docker/swarmkit/api" 12 ) 13 14 func newTestControllerWithMount(m api.Mount) (*controller, error) { 15 return newController(&daemon.Daemon{}, nil, nil, &api.Task{ 16 ID: stringid.GenerateRandomID(), 17 ServiceID: stringid.GenerateRandomID(), 18 Spec: api.TaskSpec{ 19 Runtime: &api.TaskSpec_Container{ 20 Container: &api.ContainerSpec{ 21 Image: "image_name", 22 Labels: map[string]string{ 23 "com.docker.swarm.task.id": "id", 24 }, 25 Mounts: []api.Mount{m}, 26 }, 27 }, 28 }, 29 }, nil, 30 nil) 31 } 32 33 func TestControllerValidateMountBind(t *testing.T) { 34 // with improper source 35 if _, err := newTestControllerWithMount(api.Mount{ 36 Type: api.MountTypeBind, 37 Source: "foo", 38 Target: testAbsPath, 39 }); err == nil || !strings.Contains(err.Error(), "invalid bind mount source") { 40 t.Fatalf("expected error, got: %v", err) 41 } 42 43 // with non-existing source 44 if _, err := newTestControllerWithMount(api.Mount{ 45 Type: api.MountTypeBind, 46 Source: testAbsNonExistent, 47 Target: testAbsPath, 48 }); err != nil { 49 t.Fatalf("controller should not error at creation: %v", err) 50 } 51 52 // with proper source 53 tmpdir, err := ioutil.TempDir("", "TestControllerValidateMountBind") 54 if err != nil { 55 t.Fatalf("failed to create temp dir: %v", err) 56 } 57 defer os.Remove(tmpdir) 58 59 if _, err := newTestControllerWithMount(api.Mount{ 60 Type: api.MountTypeBind, 61 Source: tmpdir, 62 Target: testAbsPath, 63 }); err != nil { 64 t.Fatalf("expected error, got: %v", err) 65 } 66 } 67 68 func TestControllerValidateMountVolume(t *testing.T) { 69 // with improper source 70 if _, err := newTestControllerWithMount(api.Mount{ 71 Type: api.MountTypeVolume, 72 Source: testAbsPath, 73 Target: testAbsPath, 74 }); err == nil || !strings.Contains(err.Error(), "invalid volume mount source") { 75 t.Fatalf("expected error, got: %v", err) 76 } 77 78 // with proper source 79 if _, err := newTestControllerWithMount(api.Mount{ 80 Type: api.MountTypeVolume, 81 Source: "foo", 82 Target: testAbsPath, 83 }); err != nil { 84 t.Fatalf("expected error, got: %v", err) 85 } 86 } 87 88 func TestControllerValidateMountTarget(t *testing.T) { 89 tmpdir, err := ioutil.TempDir("", "TestControllerValidateMountTarget") 90 if err != nil { 91 t.Fatalf("failed to create temp dir: %v", err) 92 } 93 defer os.Remove(tmpdir) 94 95 // with improper target 96 if _, err := newTestControllerWithMount(api.Mount{ 97 Type: api.MountTypeBind, 98 Source: testAbsPath, 99 Target: "foo", 100 }); err == nil || !strings.Contains(err.Error(), "invalid mount target") { 101 t.Fatalf("expected error, got: %v", err) 102 } 103 104 // with proper target 105 if _, err := newTestControllerWithMount(api.Mount{ 106 Type: api.MountTypeBind, 107 Source: tmpdir, 108 Target: testAbsPath, 109 }); err != nil { 110 t.Fatalf("expected no error, got: %v", err) 111 } 112 } 113 114 func TestControllerValidateMountTmpfs(t *testing.T) { 115 // with improper target 116 if _, err := newTestControllerWithMount(api.Mount{ 117 Type: api.MountTypeTmpfs, 118 Source: "foo", 119 Target: testAbsPath, 120 }); err == nil || !strings.Contains(err.Error(), "invalid tmpfs source") { 121 t.Fatalf("expected error, got: %v", err) 122 } 123 124 // with proper target 125 if _, err := newTestControllerWithMount(api.Mount{ 126 Type: api.MountTypeTmpfs, 127 Target: testAbsPath, 128 }); err != nil { 129 t.Fatalf("expected no error, got: %v", err) 130 } 131 } 132 133 func TestControllerValidateMountInvalidType(t *testing.T) { 134 // with improper target 135 if _, err := newTestControllerWithMount(api.Mount{ 136 Type: api.Mount_MountType(9999), 137 Source: "foo", 138 Target: testAbsPath, 139 }); err == nil || !strings.Contains(err.Error(), "invalid mount type") { 140 t.Fatalf("expected error, got: %v", err) 141 } 142 }