github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/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/api/types/versions"
    10  	"github.com/docker/docker/integration-cli/checker"
    11  	"github.com/docker/docker/internal/test/request"
    12  	"github.com/go-check/check"
    13  )
    14  
    15  func (s *DockerSuite) TestAPICreateWithInvalidHealthcheckParams(c *check.C) {
    16  	// test invalid Interval in Healthcheck: less than 0s
    17  	name := "test1"
    18  	config := map[string]interface{}{
    19  		"Image": "busybox",
    20  		"Healthcheck": map[string]interface{}{
    21  			"Interval": -10 * time.Millisecond,
    22  			"Timeout":  time.Second,
    23  			"Retries":  int(1000),
    24  		},
    25  	}
    26  
    27  	res, body, err := request.Post("/containers/create?name="+name, request.JSONBody(config))
    28  	c.Assert(err, check.IsNil)
    29  	if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") {
    30  		c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError)
    31  	} else {
    32  		c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
    33  	}
    34  
    35  	buf, err := request.ReadBody(body)
    36  	c.Assert(err, checker.IsNil)
    37  
    38  	expected := fmt.Sprintf("Interval in Healthcheck cannot be less than %s", container.MinimumDuration)
    39  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
    40  
    41  	// test invalid Interval in Healthcheck: larger than 0s but less than 1ms
    42  	name = "test2"
    43  	config = map[string]interface{}{
    44  		"Image": "busybox",
    45  		"Healthcheck": map[string]interface{}{
    46  			"Interval": 500 * time.Microsecond,
    47  			"Timeout":  time.Second,
    48  			"Retries":  int(1000),
    49  		},
    50  	}
    51  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
    52  	c.Assert(err, check.IsNil)
    53  
    54  	buf, err = request.ReadBody(body)
    55  	c.Assert(err, checker.IsNil)
    56  
    57  	if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") {
    58  		c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError)
    59  	} else {
    60  		c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
    61  	}
    62  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
    63  
    64  	// test invalid Timeout in Healthcheck: less than 1ms
    65  	name = "test3"
    66  	config = map[string]interface{}{
    67  		"Image": "busybox",
    68  		"Healthcheck": map[string]interface{}{
    69  			"Interval": time.Second,
    70  			"Timeout":  -100 * time.Millisecond,
    71  			"Retries":  int(1000),
    72  		},
    73  	}
    74  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
    75  	c.Assert(err, check.IsNil)
    76  	if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") {
    77  		c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError)
    78  	} else {
    79  		c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
    80  	}
    81  
    82  	buf, err = request.ReadBody(body)
    83  	c.Assert(err, checker.IsNil)
    84  
    85  	expected = fmt.Sprintf("Timeout in Healthcheck cannot be less than %s", container.MinimumDuration)
    86  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
    87  
    88  	// test invalid Retries in Healthcheck: less than 0
    89  	name = "test4"
    90  	config = map[string]interface{}{
    91  		"Image": "busybox",
    92  		"Healthcheck": map[string]interface{}{
    93  			"Interval": time.Second,
    94  			"Timeout":  time.Second,
    95  			"Retries":  int(-10),
    96  		},
    97  	}
    98  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
    99  	c.Assert(err, check.IsNil)
   100  	if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") {
   101  		c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError)
   102  	} else {
   103  		c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
   104  	}
   105  
   106  	buf, err = request.ReadBody(body)
   107  	c.Assert(err, checker.IsNil)
   108  
   109  	expected = "Retries in Healthcheck cannot be negative"
   110  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
   111  
   112  	// test invalid StartPeriod in Healthcheck: not 0 and less than 1ms
   113  	name = "test3"
   114  	config = map[string]interface{}{
   115  		"Image": "busybox",
   116  		"Healthcheck": map[string]interface{}{
   117  			"Interval":    time.Second,
   118  			"Timeout":     time.Second,
   119  			"Retries":     int(1000),
   120  			"StartPeriod": 100 * time.Microsecond,
   121  		},
   122  	}
   123  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
   124  	c.Assert(err, check.IsNil)
   125  	if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") {
   126  		c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError)
   127  	} else {
   128  		c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
   129  	}
   130  
   131  	buf, err = request.ReadBody(body)
   132  	c.Assert(err, checker.IsNil)
   133  
   134  	expected = fmt.Sprintf("StartPeriod in Healthcheck cannot be less than %s", container.MinimumDuration)
   135  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
   136  }