2018-03-06 10:32:47 -05:00
package main
import (
"fmt"
"io/ioutil"
"net/http"
"runtime"
"strconv"
"strings"
"github.com/docker/docker/api"
"github.com/docker/docker/integration-cli/checker"
"github.com/docker/docker/integration-cli/request"
"github.com/go-check/check"
)
func ( s * DockerSuite ) TestAPIOptionsRoute ( c * check . C ) {
resp , _ , err := request . Do ( "/" , request . Method ( http . MethodOptions ) )
c . Assert ( err , checker . IsNil )
c . Assert ( resp . StatusCode , checker . Equals , http . StatusOK )
}
func ( s * DockerSuite ) TestAPIGetEnabledCORS ( c * check . C ) {
res , body , err := request . Get ( "/version" )
c . Assert ( err , checker . IsNil )
c . Assert ( res . StatusCode , checker . Equals , http . StatusOK )
body . Close ( )
// TODO: @runcom incomplete tests, why old integration tests had this headers
// and here none of the headers below are in the response?
//c.Log(res.Header)
//c.Assert(res.Header.Get("Access-Control-Allow-Origin"), check.Equals, "*")
//c.Assert(res.Header.Get("Access-Control-Allow-Headers"), check.Equals, "Origin, X-Requested-With, Content-Type, Accept, X-Registry-Auth")
}
func ( s * DockerSuite ) TestAPIClientVersionOldNotSupported ( c * check . C ) {
2018-03-06 10:41:43 -05:00
if testEnv . OSType != runtime . GOOS {
2018-03-06 10:32:47 -05:00
c . Skip ( "Daemon platform doesn't match test platform" )
}
if api . MinVersion == api . DefaultVersion {
c . Skip ( "API MinVersion==DefaultVersion" )
}
v := strings . Split ( api . MinVersion , "." )
vMinInt , err := strconv . Atoi ( v [ 1 ] )
c . Assert ( err , checker . IsNil )
vMinInt --
v [ 1 ] = strconv . Itoa ( vMinInt )
version := strings . Join ( v , "." )
resp , body , err := request . Get ( "/v" + version + "/version" )
c . Assert ( err , checker . IsNil )
defer body . Close ( )
c . Assert ( resp . StatusCode , checker . Equals , http . StatusBadRequest )
expected := fmt . Sprintf ( "client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version" , version , api . MinVersion )
content , err := ioutil . ReadAll ( body )
c . Assert ( err , checker . IsNil )
c . Assert ( strings . TrimSpace ( string ( content ) ) , checker . Contains , expected )
}
func ( s * DockerSuite ) TestAPIErrorJSON ( c * check . C ) {
httpResp , body , err := request . Post ( "/containers/create" , request . JSONBody ( struct { } { } ) )
c . Assert ( err , checker . IsNil )
c . Assert ( httpResp . StatusCode , checker . Equals , http . StatusBadRequest )
c . Assert ( httpResp . Header . Get ( "Content-Type" ) , checker . Equals , "application/json" )
b , err := request . ReadBody ( body )
c . Assert ( err , checker . IsNil )
c . Assert ( getErrorMessage ( c , b ) , checker . Equals , "Config cannot be empty in order to create a container" )
}
func ( s * DockerSuite ) TestAPIErrorPlainText ( c * check . C ) {
// Windows requires API 1.25 or later. This test is validating a behaviour which was present
// in v1.23, but changed in 1.24, hence not applicable on Windows. See apiVersionSupportsJSONErrors
testRequires ( c , DaemonIsLinux )
httpResp , body , err := request . Post ( "/v1.23/containers/create" , request . JSONBody ( struct { } { } ) )
c . Assert ( err , checker . IsNil )
c . Assert ( httpResp . StatusCode , checker . Equals , http . StatusBadRequest )
c . Assert ( httpResp . Header . Get ( "Content-Type" ) , checker . Contains , "text/plain" )
b , err := request . ReadBody ( body )
c . Assert ( err , checker . IsNil )
c . Assert ( strings . TrimSpace ( string ( b ) ) , checker . Equals , "Config cannot be empty in order to create a container" )
}
func ( s * DockerSuite ) TestAPIErrorNotFoundJSON ( c * check . C ) {
// 404 is a different code path to normal errors, so test separately
httpResp , body , err := request . Get ( "/notfound" , request . JSON )
c . Assert ( err , checker . IsNil )
c . Assert ( httpResp . StatusCode , checker . Equals , http . StatusNotFound )
c . Assert ( httpResp . Header . Get ( "Content-Type" ) , checker . Equals , "application/json" )
b , err := request . ReadBody ( body )
c . Assert ( err , checker . IsNil )
c . Assert ( getErrorMessage ( c , b ) , checker . Equals , "page not found" )
}
func ( s * DockerSuite ) TestAPIErrorNotFoundPlainText ( c * check . C ) {
httpResp , body , err := request . Get ( "/v1.23/notfound" , request . JSON )
c . Assert ( err , checker . IsNil )
c . Assert ( httpResp . StatusCode , checker . Equals , http . StatusNotFound )
c . Assert ( httpResp . Header . Get ( "Content-Type" ) , checker . Contains , "text/plain" )
b , err := request . ReadBody ( body )
c . Assert ( err , checker . IsNil )
c . Assert ( strings . TrimSpace ( string ( b ) ) , checker . Equals , "page not found" )
}