2015-04-29 11:56:45 +00:00
package main
import (
2023-07-14 18:02:38 +00:00
"context"
2016-02-04 12:47:15 +00:00
"fmt"
2015-04-29 11:56:45 +00:00
"net/http"
2016-11-02 16:43:29 +00:00
"runtime"
2015-06-17 21:57:32 +00:00
"strconv"
"strings"
2019-09-09 21:06:12 +00:00
"testing"
2015-04-29 11:56:45 +00:00
2023-10-25 12:43:59 +00:00
"github.com/docker/docker/runconfig"
2023-07-14 18:02:38 +00:00
"github.com/docker/docker/testutil"
2019-08-29 20:52:40 +00:00
"github.com/docker/docker/testutil/request"
2020-02-07 13:39:24 +00:00
"gotest.tools/v3/assert"
2015-04-29 11:56:45 +00:00
)
2022-06-16 21:32:10 +00:00
type DockerAPISuite struct {
ds * DockerSuite
}
2023-07-14 18:02:38 +00:00
func ( s * DockerAPISuite ) TearDownTest ( ctx context . Context , c * testing . T ) {
s . ds . TearDownTest ( ctx , c )
2022-06-16 21:32:10 +00:00
}
func ( s * DockerAPISuite ) OnTimeout ( c * testing . T ) {
s . ds . OnTimeout ( c )
}
func ( s * DockerAPISuite ) TestAPIOptionsRoute ( c * testing . T ) {
2023-07-14 18:02:38 +00:00
resp , _ , err := request . Do ( testutil . GetContext ( c ) , "/" , request . Method ( http . MethodOptions ) )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
assert . Equal ( c , resp . StatusCode , http . StatusOK )
2015-04-29 11:56:45 +00:00
}
2022-06-16 21:32:10 +00:00
func ( s * DockerAPISuite ) TestAPIGetEnabledCORS ( c * testing . T ) {
2023-07-14 18:02:38 +00:00
res , body , err := request . Get ( testutil . GetContext ( c ) , "/version" )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
assert . Equal ( c , res . StatusCode , http . StatusOK )
2015-07-23 11:24:14 +00:00
body . Close ( )
2015-04-29 11:56:45 +00:00
// TODO: @runcom incomplete tests, why old integration tests had this headers
// and here none of the headers below are in the response?
2023-06-14 09:46:00 +00:00
// c.Log(res.Header)
// assert.Equal(c, res.Header.Get("Access-Control-Allow-Origin"), "*")
// assert.Equal(c, res.Header.Get("Access-Control-Allow-Headers"), "Origin, X-Requested-With, Content-Type, Accept, X-Registry-Auth")
2015-04-29 11:56:45 +00:00
}
2015-05-19 16:28:50 +00:00
2022-06-16 21:32:10 +00:00
func ( s * DockerAPISuite ) TestAPIClientVersionOldNotSupported ( c * testing . T ) {
2023-06-14 09:46:00 +00:00
if testEnv . DaemonInfo . OSType != runtime . GOOS {
2016-11-02 16:43:29 +00:00
c . Skip ( "Daemon platform doesn't match test platform" )
}
2023-12-04 21:58:47 +00:00
major , minor , _ := strings . Cut ( testEnv . DaemonVersion . MinAPIVersion , "." )
vMinInt , err := strconv . Atoi ( minor )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
2015-06-17 21:57:32 +00:00
vMinInt --
2023-12-04 21:58:47 +00:00
version := fmt . Sprintf ( "%s.%d" , major , vMinInt )
2015-06-17 21:57:32 +00:00
2023-07-14 18:02:38 +00:00
resp , body , err := request . Get ( testutil . GetContext ( c ) , "/v" + version + "/version" )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
2016-12-30 09:49:36 +00:00
defer body . Close ( )
2019-04-04 13:23:19 +00:00
assert . Equal ( c , resp . StatusCode , http . StatusBadRequest )
2023-12-04 21:58:47 +00:00
expected := fmt . Sprintf ( "client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version" , version , testEnv . DaemonVersion . MinAPIVersion )
2024-01-21 15:08:40 +00:00
b , err := request . ReadBody ( body )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
2024-01-21 15:08:40 +00:00
assert . Equal ( c , getErrorMessage ( c , b ) , expected )
2015-06-17 21:57:32 +00:00
}
2015-08-31 21:45:27 +00:00
2022-06-16 21:32:10 +00:00
func ( s * DockerAPISuite ) TestAPIErrorJSON ( c * testing . T ) {
2023-07-14 18:02:38 +00:00
httpResp , body , err := request . Post ( testutil . GetContext ( c ) , "/containers/create" , request . JSONBody ( struct { } { } ) )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
2023-12-04 22:26:00 +00:00
assert . Equal ( c , httpResp . StatusCode , http . StatusBadRequest )
2019-04-04 13:23:19 +00:00
assert . Assert ( c , strings . Contains ( httpResp . Header . Get ( "Content-Type" ) , "application/json" ) )
2017-08-21 22:50:40 +00:00
b , err := request . ReadBody ( body )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
2023-10-25 12:43:59 +00:00
assert . Equal ( c , getErrorMessage ( c , b ) , runconfig . ErrEmptyConfig . Error ( ) )
2016-05-21 11:56:04 +00:00
}
2022-06-16 21:32:10 +00:00
func ( s * DockerAPISuite ) TestAPIErrorNotFoundJSON ( c * testing . T ) {
2016-05-21 11:56:04 +00:00
// 404 is a different code path to normal errors, so test separately
2023-07-14 18:02:38 +00:00
httpResp , body , err := request . Get ( testutil . GetContext ( c ) , "/notfound" , request . JSON )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
assert . Equal ( c , httpResp . StatusCode , http . StatusNotFound )
assert . Assert ( c , strings . Contains ( httpResp . Header . Get ( "Content-Type" ) , "application/json" ) )
2017-08-21 22:50:40 +00:00
b , err := request . ReadBody ( body )
2019-04-04 13:23:19 +00:00
assert . NilError ( c , err )
assert . Equal ( c , getErrorMessage ( c , b ) , "page not found" )
2016-05-21 11:56:04 +00:00
}