github.com/OpenFlowLabs/moby@v17.12.1-ce-rc2+incompatible/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) TestAPICreateWithInvalidHealthcheckParams(c *check.C) {
    15  	// test invalid Interval in Healthcheck: less than 0s
    16  	name := "test1"
    17  	config := map[string]interface{}{
    18  		"Image": "busybox",
    19  		"Healthcheck": map[string]interface{}{
    20  			"Interval": -10 * time.Millisecond,
    21  			"Timeout":  time.Second,
    22  			"Retries":  int(1000),
    23  		},
    24  	}
    25  
    26  	res, body, err := request.Post("/containers/create?name="+name, request.JSONBody(config))
    27  	c.Assert(err, check.IsNil)
    28  	c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
    29  
    30  	buf, err := request.ReadBody(body)
    31  	c.Assert(err, checker.IsNil)
    32  
    33  	expected := fmt.Sprintf("Interval in Healthcheck cannot be less than %s", container.MinimumDuration)
    34  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
    35  
    36  	// test invalid Interval in Healthcheck: larger than 0s but less than 1ms
    37  	name = "test2"
    38  	config = map[string]interface{}{
    39  		"Image": "busybox",
    40  		"Healthcheck": map[string]interface{}{
    41  			"Interval": 500 * time.Microsecond,
    42  			"Timeout":  time.Second,
    43  			"Retries":  int(1000),
    44  		},
    45  	}
    46  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
    47  	c.Assert(err, check.IsNil)
    48  
    49  	buf, err = request.ReadBody(body)
    50  	c.Assert(err, checker.IsNil)
    51  
    52  	c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
    53  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
    54  
    55  	// test invalid Timeout in Healthcheck: less than 1ms
    56  	name = "test3"
    57  	config = map[string]interface{}{
    58  		"Image": "busybox",
    59  		"Healthcheck": map[string]interface{}{
    60  			"Interval": time.Second,
    61  			"Timeout":  -100 * time.Millisecond,
    62  			"Retries":  int(1000),
    63  		},
    64  	}
    65  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
    66  	c.Assert(err, check.IsNil)
    67  	c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
    68  
    69  	buf, err = request.ReadBody(body)
    70  	c.Assert(err, checker.IsNil)
    71  
    72  	expected = fmt.Sprintf("Timeout in Healthcheck cannot be less than %s", container.MinimumDuration)
    73  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
    74  
    75  	// test invalid Retries in Healthcheck: less than 0
    76  	name = "test4"
    77  	config = map[string]interface{}{
    78  		"Image": "busybox",
    79  		"Healthcheck": map[string]interface{}{
    80  			"Interval": time.Second,
    81  			"Timeout":  time.Second,
    82  			"Retries":  int(-10),
    83  		},
    84  	}
    85  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
    86  	c.Assert(err, check.IsNil)
    87  	c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
    88  
    89  	buf, err = request.ReadBody(body)
    90  	c.Assert(err, checker.IsNil)
    91  
    92  	expected = "Retries in Healthcheck cannot be negative"
    93  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
    94  
    95  	// test invalid StartPeriod in Healthcheck: not 0 and less than 1ms
    96  	name = "test3"
    97  	config = map[string]interface{}{
    98  		"Image": "busybox",
    99  		"Healthcheck": map[string]interface{}{
   100  			"Interval":    time.Second,
   101  			"Timeout":     time.Second,
   102  			"Retries":     int(1000),
   103  			"StartPeriod": 100 * time.Microsecond,
   104  		},
   105  	}
   106  	res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
   107  	c.Assert(err, check.IsNil)
   108  	c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
   109  
   110  	buf, err = request.ReadBody(body)
   111  	c.Assert(err, checker.IsNil)
   112  
   113  	expected = fmt.Sprintf("StartPeriod in Healthcheck cannot be less than %s", container.MinimumDuration)
   114  	c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
   115  }