github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/integration-cli/docker_api_create_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"time"
     7  
     8  	"github.com/docker/docker/api/types/container"
     9  	"github.com/docker/docker/integration-cli/checker"
    10  	"github.com/docker/docker/integration-cli/request"
    11  	"github.com/go-check/check"
    12  )
    13  
    14  func (s *DockerSuite) TestAPICreateWithNotExistImage(c *check.C) {
    15  	name := "test"
    16  	config := map[string]interface{}{
    17  		"Image":   "test456:v1",
    18  		"Volumes": map[string]struct{}{"/tmp": {}},
    19  	}
    20  
    21  	status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
    22  	c.Assert(err, check.IsNil)
    23  	c.Assert(status, check.Equals, http.StatusNotFound)
    24  	expected := "No such image: test456:v1"
    25  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
    26  
    27  	config2 := map[string]interface{}{
    28  		"Image":   "test456",
    29  		"Volumes": map[string]struct{}{"/tmp": {}},
    30  	}
    31  
    32  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config2, daemonHost())
    33  	c.Assert(err, check.IsNil)
    34  	c.Assert(status, check.Equals, http.StatusNotFound)
    35  	expected = "No such image: test456:latest"
    36  	c.Assert(getErrorMessage(c, body), checker.Equals, expected)
    37  
    38  	config3 := map[string]interface{}{
    39  		"Image": "sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
    40  	}
    41  
    42  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config3, daemonHost())
    43  	c.Assert(err, check.IsNil)
    44  	c.Assert(status, check.Equals, http.StatusNotFound)
    45  	expected = "No such image: sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa"
    46  	c.Assert(getErrorMessage(c, body), checker.Equals, expected)
    47  
    48  }
    49  
    50  // Test for #25099
    51  func (s *DockerSuite) TestAPICreateEmptyEnv(c *check.C) {
    52  	name := "test1"
    53  	config := map[string]interface{}{
    54  		"Image": "busybox",
    55  		"Env":   []string{"", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
    56  		"Cmd":   []string{"true"},
    57  	}
    58  
    59  	status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
    60  	c.Assert(err, check.IsNil)
    61  	c.Assert(status, check.Equals, http.StatusInternalServerError)
    62  	expected := "invalid environment variable:"
    63  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
    64  
    65  	name = "test2"
    66  	config = map[string]interface{}{
    67  		"Image": "busybox",
    68  		"Env":   []string{"=", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
    69  		"Cmd":   []string{"true"},
    70  	}
    71  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
    72  	c.Assert(err, check.IsNil)
    73  	c.Assert(status, check.Equals, http.StatusInternalServerError)
    74  	expected = "invalid environment variable: ="
    75  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
    76  
    77  	name = "test3"
    78  	config = map[string]interface{}{
    79  		"Image": "busybox",
    80  		"Env":   []string{"=foo", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
    81  		"Cmd":   []string{"true"},
    82  	}
    83  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
    84  	c.Assert(err, check.IsNil)
    85  	c.Assert(status, check.Equals, http.StatusInternalServerError)
    86  	expected = "invalid environment variable: =foo"
    87  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
    88  }
    89  
    90  func (s *DockerSuite) TestAPICreateWithInvalidHealthcheckParams(c *check.C) {
    91  	// test invalid Interval in Healthcheck: less than 0s
    92  	name := "test1"
    93  	config := map[string]interface{}{
    94  		"Image": "busybox",
    95  		"Healthcheck": map[string]interface{}{
    96  			"Interval": -10 * time.Millisecond,
    97  			"Timeout":  time.Second,
    98  			"Retries":  int(1000),
    99  		},
   100  	}
   101  
   102  	status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
   103  	c.Assert(err, check.IsNil)
   104  	c.Assert(status, check.Equals, http.StatusInternalServerError)
   105  	expected := fmt.Sprintf("Interval in Healthcheck cannot be less than %s", container.MinimumDuration)
   106  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
   107  
   108  	// test invalid Interval in Healthcheck: larger than 0s but less than 1ms
   109  	name = "test2"
   110  	config = map[string]interface{}{
   111  		"Image": "busybox",
   112  		"Healthcheck": map[string]interface{}{
   113  			"Interval": 500 * time.Microsecond,
   114  			"Timeout":  time.Second,
   115  			"Retries":  int(1000),
   116  		},
   117  	}
   118  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
   119  	c.Assert(err, check.IsNil)
   120  	c.Assert(status, check.Equals, http.StatusInternalServerError)
   121  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
   122  
   123  	// test invalid Timeout in Healthcheck: less than 1ms
   124  	name = "test3"
   125  	config = map[string]interface{}{
   126  		"Image": "busybox",
   127  		"Healthcheck": map[string]interface{}{
   128  			"Interval": time.Second,
   129  			"Timeout":  -100 * time.Millisecond,
   130  			"Retries":  int(1000),
   131  		},
   132  	}
   133  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
   134  	c.Assert(err, check.IsNil)
   135  	c.Assert(status, check.Equals, http.StatusInternalServerError)
   136  	expected = fmt.Sprintf("Timeout in Healthcheck cannot be less than %s", container.MinimumDuration)
   137  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
   138  
   139  	// test invalid Retries in Healthcheck: less than 0
   140  	name = "test4"
   141  	config = map[string]interface{}{
   142  		"Image": "busybox",
   143  		"Healthcheck": map[string]interface{}{
   144  			"Interval": time.Second,
   145  			"Timeout":  time.Second,
   146  			"Retries":  int(-10),
   147  		},
   148  	}
   149  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
   150  	c.Assert(err, check.IsNil)
   151  	c.Assert(status, check.Equals, http.StatusInternalServerError)
   152  	expected = "Retries in Healthcheck cannot be negative"
   153  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
   154  
   155  	// test invalid StartPeriod in Healthcheck: not 0 and less than 1ms
   156  	name = "test3"
   157  	config = map[string]interface{}{
   158  		"Image": "busybox",
   159  		"Healthcheck": map[string]interface{}{
   160  			"Interval":    time.Second,
   161  			"Timeout":     time.Second,
   162  			"Retries":     int(1000),
   163  			"StartPeriod": 100 * time.Microsecond,
   164  		},
   165  	}
   166  	status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
   167  	c.Assert(err, check.IsNil)
   168  	c.Assert(status, check.Equals, http.StatusInternalServerError)
   169  	expected = fmt.Sprintf("StartPeriod in Healthcheck cannot be less than %s", container.MinimumDuration)
   170  	c.Assert(getErrorMessage(c, body), checker.Contains, expected)
   171  }