github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/integration-cli/docker_cli_config_test.go (about)

     1  package main
     2  
     3  import (
     4  	"io/ioutil"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"os"
     8  	"path/filepath"
     9  	"runtime"
    10  
    11  	"github.com/docker/docker/api"
    12  	"github.com/docker/docker/dockerversion"
    13  	"github.com/docker/docker/integration-cli/checker"
    14  	"github.com/docker/docker/pkg/homedir"
    15  	icmd "github.com/docker/docker/pkg/testutil/cmd"
    16  	"github.com/go-check/check"
    17  )
    18  
    19  func (s *DockerSuite) TestConfigHTTPHeader(c *check.C) {
    20  	testRequires(c, UnixCli) // Can't set/unset HOME on windows right now
    21  	// We either need a level of Go that supports Unsetenv (for cases
    22  	// when HOME/USERPROFILE isn't set), or we need to be able to use
    23  	// os/user but user.Current() only works if we aren't statically compiling
    24  
    25  	var headers map[string][]string
    26  
    27  	server := httptest.NewServer(http.HandlerFunc(
    28  		func(w http.ResponseWriter, r *http.Request) {
    29  			w.Header().Set("API-Version", api.DefaultVersion)
    30  			headers = r.Header
    31  		}))
    32  	defer server.Close()
    33  
    34  	homeKey := homedir.Key()
    35  	homeVal := homedir.Get()
    36  	tmpDir, err := ioutil.TempDir("", "fake-home")
    37  	c.Assert(err, checker.IsNil)
    38  	defer os.RemoveAll(tmpDir)
    39  
    40  	dotDocker := filepath.Join(tmpDir, ".docker")
    41  	os.Mkdir(dotDocker, 0600)
    42  	tmpCfg := filepath.Join(dotDocker, "config.json")
    43  
    44  	defer func() { os.Setenv(homeKey, homeVal) }()
    45  	os.Setenv(homeKey, tmpDir)
    46  
    47  	data := `{
    48  		"HttpHeaders": { "MyHeader": "MyValue" }
    49  	}`
    50  
    51  	err = ioutil.WriteFile(tmpCfg, []byte(data), 0600)
    52  	c.Assert(err, checker.IsNil)
    53  
    54  	result := icmd.RunCommand(dockerBinary, "-H="+server.URL[7:], "ps")
    55  	result.Assert(c, icmd.Expected{
    56  		ExitCode: 1,
    57  		Error:    "exit status 1",
    58  	})
    59  
    60  	c.Assert(headers["User-Agent"], checker.NotNil, check.Commentf("Missing User-Agent"))
    61  
    62  	c.Assert(headers["User-Agent"][0], checker.Equals, "Docker-Client/"+dockerversion.Version+" ("+runtime.GOOS+")", check.Commentf("Badly formatted User-Agent,out:%v", result.Combined()))
    63  
    64  	c.Assert(headers["Myheader"], checker.NotNil)
    65  	c.Assert(headers["Myheader"][0], checker.Equals, "MyValue", check.Commentf("Missing/bad header,out:%v", result.Combined()))
    66  
    67  }
    68  
    69  func (s *DockerSuite) TestConfigDir(c *check.C) {
    70  	cDir, err := ioutil.TempDir("", "fake-home")
    71  	c.Assert(err, checker.IsNil)
    72  	defer os.RemoveAll(cDir)
    73  
    74  	// First make sure pointing to empty dir doesn't generate an error
    75  	dockerCmd(c, "--config", cDir, "ps")
    76  
    77  	// Test with env var too
    78  	icmd.RunCmd(icmd.Cmd{
    79  		Command: []string{dockerBinary, "ps"},
    80  		Env:     appendBaseEnv(true, "DOCKER_CONFIG="+cDir),
    81  	}).Assert(c, icmd.Success)
    82  
    83  	// Start a server so we can check to see if the config file was
    84  	// loaded properly
    85  	var headers map[string][]string
    86  
    87  	server := httptest.NewServer(http.HandlerFunc(
    88  		func(w http.ResponseWriter, r *http.Request) {
    89  			headers = r.Header
    90  		}))
    91  	defer server.Close()
    92  
    93  	// Create a dummy config file in our new config dir
    94  	data := `{
    95  		"HttpHeaders": { "MyHeader": "MyValue" }
    96  	}`
    97  
    98  	tmpCfg := filepath.Join(cDir, "config.json")
    99  	err = ioutil.WriteFile(tmpCfg, []byte(data), 0600)
   100  	c.Assert(err, checker.IsNil, check.Commentf("Err creating file"))
   101  
   102  	env := appendBaseEnv(false)
   103  
   104  	icmd.RunCmd(icmd.Cmd{
   105  		Command: []string{dockerBinary, "--config", cDir, "-H=" + server.URL[7:], "ps"},
   106  		Env:     env,
   107  	}).Assert(c, icmd.Expected{
   108  		ExitCode: 1,
   109  		Error:    "exit status 1",
   110  	})
   111  	c.Assert(headers["Myheader"], checker.NotNil)
   112  	c.Assert(headers["Myheader"][0], checker.Equals, "MyValue", check.Commentf("ps3 - Missing header"))
   113  
   114  	// Reset headers and try again using env var this time
   115  	headers = map[string][]string{}
   116  	icmd.RunCmd(icmd.Cmd{
   117  		Command: []string{dockerBinary, "--config", cDir, "-H=" + server.URL[7:], "ps"},
   118  		Env:     append(env, "DOCKER_CONFIG="+cDir),
   119  	}).Assert(c, icmd.Expected{
   120  		ExitCode: 1,
   121  	})
   122  	c.Assert(headers["Myheader"], checker.NotNil)
   123  	c.Assert(headers["Myheader"][0], checker.Equals, "MyValue", check.Commentf("ps4 - Missing header"))
   124  
   125  	// FIXME(vdemeester) should be a unit test
   126  	// Reset headers and make sure flag overrides the env var
   127  	headers = map[string][]string{}
   128  	icmd.RunCmd(icmd.Cmd{
   129  		Command: []string{dockerBinary, "--config", cDir, "-H=" + server.URL[7:], "ps"},
   130  		Env:     append(env, "DOCKER_CONFIG=MissingDir"),
   131  	}).Assert(c, icmd.Expected{
   132  		ExitCode: 1,
   133  	})
   134  	c.Assert(headers["Myheader"], checker.NotNil)
   135  	c.Assert(headers["Myheader"][0], checker.Equals, "MyValue", check.Commentf("ps5 - Missing header"))
   136  
   137  	// FIXME(vdemeester) should be a unit test
   138  	// Reset headers and make sure flag overrides the env var.
   139  	// Almost same as previous but make sure the "MissingDir" isn't
   140  	// ignore - we don't want to default back to the env var.
   141  	headers = map[string][]string{}
   142  	icmd.RunCmd(icmd.Cmd{
   143  		Command: []string{dockerBinary, "--config", "MissingDir", "-H=" + server.URL[7:], "ps"},
   144  		Env:     append(env, "DOCKER_CONFIG="+cDir),
   145  	}).Assert(c, icmd.Expected{
   146  		ExitCode: 1,
   147  		Error:    "exit status 1",
   148  	})
   149  
   150  	c.Assert(headers["Myheader"], checker.IsNil, check.Commentf("ps6 - Headers shouldn't be the expected value"))
   151  }