docker_cli_config_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import (
  3. "io/ioutil"
  4. "net/http"
  5. "net/http/httptest"
  6. "os"
  7. "os/exec"
  8. "path/filepath"
  9. "testing"
  10. "github.com/docker/docker/pkg/homedir"
  11. )
  12. func TestConfigHttpHeader(t *testing.T) {
  13. testRequires(t, UnixCli) // Can't set/unset HOME on windows right now
  14. // We either need a level of Go that supports Unsetenv (for cases
  15. // when HOME/USERPROFILE isn't set), or we need to be able to use
  16. // os/user but user.Current() only works if we aren't statically compiling
  17. var headers map[string][]string
  18. server := httptest.NewServer(http.HandlerFunc(
  19. func(w http.ResponseWriter, r *http.Request) {
  20. headers = r.Header
  21. }))
  22. defer server.Close()
  23. homeKey := homedir.Key()
  24. homeVal := homedir.Get()
  25. tmpDir, _ := ioutil.TempDir("", "fake-home")
  26. defer os.RemoveAll(tmpDir)
  27. dotDocker := filepath.Join(tmpDir, ".docker")
  28. os.Mkdir(dotDocker, 0600)
  29. tmpCfg := filepath.Join(dotDocker, "config.json")
  30. defer func() { os.Setenv(homeKey, homeVal) }()
  31. os.Setenv(homeKey, tmpDir)
  32. data := `{
  33. "HttpHeaders": { "MyHeader": "MyValue" }
  34. }`
  35. err := ioutil.WriteFile(tmpCfg, []byte(data), 0600)
  36. if err != nil {
  37. t.Fatalf("Err creating file(%s): %v", tmpCfg, err)
  38. }
  39. cmd := exec.Command(dockerBinary, "-H="+server.URL[7:], "ps")
  40. out, _, _ := runCommandWithOutput(cmd)
  41. if headers["Myheader"] == nil || headers["Myheader"][0] != "MyValue" {
  42. t.Fatalf("Missing/bad header: %q\nout:%v", headers, out)
  43. }
  44. logDone("config - add new http headers")
  45. }