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