|
@@ -10,6 +10,7 @@ import (
|
|
"net/http/httputil"
|
|
"net/http/httputil"
|
|
"net/url"
|
|
"net/url"
|
|
"os"
|
|
"os"
|
|
|
|
+ "regexp"
|
|
"strconv"
|
|
"strconv"
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
@@ -1388,3 +1389,138 @@ func (s *DockerSuite) TestStartWithNilDNS(c *check.C) {
|
|
c.Assert(err, checker.IsNil)
|
|
c.Assert(err, checker.IsNil)
|
|
c.Assert(dns, checker.Equals, "[]")
|
|
c.Assert(dns, checker.Equals, "[]")
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func (s *DockerSuite) TestPostContainersCreateShmSizeNegative(c *check.C) {
|
|
|
|
+ config := map[string]interface{}{
|
|
|
|
+ "Image": "busybox",
|
|
|
|
+ "HostConfig": map[string]interface{}{"ShmSize": -1},
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ status, body, err := sockRequest("POST", "/containers/create", config)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusInternalServerError)
|
|
|
|
+ c.Assert(string(body), checker.Contains, "SHM size must be greater then 0")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (s *DockerSuite) TestPostContainersCreateShmSizeZero(c *check.C) {
|
|
|
|
+ config := map[string]interface{}{
|
|
|
|
+ "Image": "busybox",
|
|
|
|
+ "HostConfig": map[string]interface{}{"ShmSize": 0},
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ status, body, err := sockRequest("POST", "/containers/create", config)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusInternalServerError)
|
|
|
|
+ c.Assert(string(body), checker.Contains, "SHM size must be greater then 0")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (s *DockerSuite) TestPostContainersCreateShmSizeHostConfigOmitted(c *check.C) {
|
|
|
|
+ config := map[string]interface{}{
|
|
|
|
+ "Image": "busybox",
|
|
|
|
+ "Cmd": "mount",
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ status, body, err := sockRequest("POST", "/containers/create", config)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusCreated)
|
|
|
|
+
|
|
|
|
+ var container types.ContainerCreateResponse
|
|
|
|
+ c.Assert(json.Unmarshal(body, &container), check.IsNil)
|
|
|
|
+
|
|
|
|
+ status, body, err = sockRequest("GET", "/containers/"+container.ID+"/json", nil)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusOK)
|
|
|
|
+
|
|
|
|
+ var containerJSON types.ContainerJSON
|
|
|
|
+ c.Assert(json.Unmarshal(body, &containerJSON), check.IsNil)
|
|
|
|
+
|
|
|
|
+ c.Assert(containerJSON.HostConfig.ShmSize, check.IsNil)
|
|
|
|
+
|
|
|
|
+ out, _ := dockerCmd(c, "start", "-i", containerJSON.ID)
|
|
|
|
+ shmRegexp := regexp.MustCompile(`shm on /dev/shm type tmpfs(.*)size=65536k`)
|
|
|
|
+ if !shmRegexp.MatchString(out) {
|
|
|
|
+ c.Fatalf("Expected shm of 64MB in mount command, got %v", out)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (s *DockerSuite) TestPostContainersCreateShmSizeOmitted(c *check.C) {
|
|
|
|
+ config := map[string]interface{}{
|
|
|
|
+ "Image": "busybox",
|
|
|
|
+ "HostConfig": map[string]interface{}{},
|
|
|
|
+ "Cmd": "mount",
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ status, body, err := sockRequest("POST", "/containers/create", config)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusCreated)
|
|
|
|
+
|
|
|
|
+ var container types.ContainerCreateResponse
|
|
|
|
+ c.Assert(json.Unmarshal(body, &container), check.IsNil)
|
|
|
|
+
|
|
|
|
+ status, body, err = sockRequest("GET", "/containers/"+container.ID+"/json", nil)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusOK)
|
|
|
|
+
|
|
|
|
+ var containerJSON types.ContainerJSON
|
|
|
|
+ c.Assert(json.Unmarshal(body, &containerJSON), check.IsNil)
|
|
|
|
+
|
|
|
|
+ c.Assert(*containerJSON.HostConfig.ShmSize, check.Equals, runconfig.DefaultSHMSize)
|
|
|
|
+
|
|
|
|
+ out, _ := dockerCmd(c, "start", "-i", containerJSON.ID)
|
|
|
|
+ shmRegexp := regexp.MustCompile(`shm on /dev/shm type tmpfs(.*)size=65536k`)
|
|
|
|
+ if !shmRegexp.MatchString(out) {
|
|
|
|
+ c.Fatalf("Expected shm of 64MB in mount command, got %v", out)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (s *DockerSuite) TestPostContainersCreateWithShmSize(c *check.C) {
|
|
|
|
+ config := map[string]interface{}{
|
|
|
|
+ "Image": "busybox",
|
|
|
|
+ "Cmd": "mount",
|
|
|
|
+ "HostConfig": map[string]interface{}{"ShmSize": 1073741824},
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ status, body, err := sockRequest("POST", "/containers/create", config)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusCreated)
|
|
|
|
+
|
|
|
|
+ var container types.ContainerCreateResponse
|
|
|
|
+ c.Assert(json.Unmarshal(body, &container), check.IsNil)
|
|
|
|
+
|
|
|
|
+ status, body, err = sockRequest("GET", "/containers/"+container.ID+"/json", nil)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusOK)
|
|
|
|
+
|
|
|
|
+ var containerJSON types.ContainerJSON
|
|
|
|
+ c.Assert(json.Unmarshal(body, &containerJSON), check.IsNil)
|
|
|
|
+
|
|
|
|
+ c.Assert(*containerJSON.HostConfig.ShmSize, check.Equals, int64(1073741824))
|
|
|
|
+
|
|
|
|
+ out, _ := dockerCmd(c, "start", "-i", containerJSON.ID)
|
|
|
|
+ shmRegex := regexp.MustCompile(`shm on /dev/shm type tmpfs(.*)size=1048576k`)
|
|
|
|
+ if !shmRegex.MatchString(out) {
|
|
|
|
+ c.Fatalf("Expected shm of 1GB in mount command, got %v", out)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (s *DockerSuite) TestPostContainersCreateMemorySwappinessHostConfigOmitted(c *check.C) {
|
|
|
|
+ config := map[string]interface{}{
|
|
|
|
+ "Image": "busybox",
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ status, body, err := sockRequest("POST", "/containers/create", config)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusCreated)
|
|
|
|
+
|
|
|
|
+ var container types.ContainerCreateResponse
|
|
|
|
+ c.Assert(json.Unmarshal(body, &container), check.IsNil)
|
|
|
|
+
|
|
|
|
+ status, body, err = sockRequest("GET", "/containers/"+container.ID+"/json", nil)
|
|
|
|
+ c.Assert(err, check.IsNil)
|
|
|
|
+ c.Assert(status, check.Equals, http.StatusOK)
|
|
|
|
+
|
|
|
|
+ var containerJSON types.ContainerJSON
|
|
|
|
+ c.Assert(json.Unmarshal(body, &containerJSON), check.IsNil)
|
|
|
|
+
|
|
|
|
+ c.Assert(containerJSON.HostConfig.MemorySwappiness, check.IsNil)
|
|
|
|
+}
|