-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add unit test to pkg cliconfig (and thus coverage)
Signed-off-by: Vincent Demeester <[email protected]>
- Loading branch information
1 parent
5b289cd
commit 73ad1b2
Showing
1 changed file
with
226 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,35 +4,57 @@ import ( | |
"io/ioutil" | ||
"os" | ||
"path/filepath" | ||
"runtime" | ||
"strings" | ||
"testing" | ||
|
||
"github.com/docker/docker/pkg/homedir" | ||
) | ||
|
||
func TestMissingFile(t *testing.T) { | ||
tmpHome, _ := ioutil.TempDir("", "config-test") | ||
func TestEmptyConfigDir(t *testing.T) { | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
config, err := Load(tmpHome) | ||
SetConfigDir(tmpHome) | ||
|
||
config, err := Load("") | ||
if err != nil { | ||
t.Fatalf("Failed loading on missing file: %q", err) | ||
t.Fatalf("Failed loading on empty config dir: %q", err) | ||
} | ||
|
||
expectedConfigFilename := filepath.Join(tmpHome, ConfigFileName) | ||
if config.Filename() != expectedConfigFilename { | ||
t.Fatalf("Expected config filename %s, got %s", expectedConfigFilename, config.Filename()) | ||
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
err = config.Save() | ||
saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
} | ||
|
||
func TestMissingFile(t *testing.T) { | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatalf("Failed to save: %q", err) | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName)) | ||
if !strings.Contains(string(buf), `"auths":`) { | ||
t.Fatalf("Should have save in new form: %s", string(buf)) | ||
config, err := Load(tmpHome) | ||
if err != nil { | ||
t.Fatalf("Failed loading on missing file: %q", err) | ||
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
} | ||
|
||
func TestSaveFileToDirs(t *testing.T) { | ||
tmpHome, _ := ioutil.TempDir("", "config-test") | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
tmpHome += "/.docker" | ||
|
||
|
@@ -42,56 +64,158 @@ func TestSaveFileToDirs(t *testing.T) { | |
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
err = config.Save() | ||
if err != nil { | ||
t.Fatalf("Failed to save: %q", err) | ||
} | ||
|
||
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName)) | ||
if !strings.Contains(string(buf), `"auths":`) { | ||
t.Fatalf("Should have save in new form: %s", string(buf)) | ||
} | ||
saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
} | ||
|
||
func TestEmptyFile(t *testing.T) { | ||
tmpHome, _ := ioutil.TempDir("", "config-test") | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
fn := filepath.Join(tmpHome, ConfigFileName) | ||
ioutil.WriteFile(fn, []byte(""), 0600) | ||
if err := ioutil.WriteFile(fn, []byte(""), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
_, err := Load(tmpHome) | ||
_, err = Load(tmpHome) | ||
if err == nil { | ||
t.Fatalf("Was supposed to fail") | ||
} | ||
} | ||
|
||
func TestEmptyJson(t *testing.T) { | ||
tmpHome, _ := ioutil.TempDir("", "config-test") | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
fn := filepath.Join(tmpHome, ConfigFileName) | ||
ioutil.WriteFile(fn, []byte("{}"), 0600) | ||
if err := ioutil.WriteFile(fn, []byte("{}"), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
config, err := Load(tmpHome) | ||
if err != nil { | ||
t.Fatalf("Failed loading on empty json file: %q", err) | ||
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
err = config.Save() | ||
saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
} | ||
|
||
func TestOldInvalidsAuth(t *testing.T) { | ||
invalids := map[string]string{ | ||
`username = test`: "The Auth config file is empty", | ||
`username | ||
password | ||
email`: "Invalid Auth config file", | ||
`username = test | ||
email`: "Invalid auth configuration file", | ||
`username = am9lam9lOmhlbGxv | ||
email`: "Invalid Auth config file", | ||
} | ||
|
||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatalf("Failed to save: %q", err) | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
homeKey := homedir.Key() | ||
homeVal := homedir.Get() | ||
|
||
defer func() { os.Setenv(homeKey, homeVal) }() | ||
os.Setenv(homeKey, tmpHome) | ||
|
||
for content, expectedError := range invalids { | ||
fn := filepath.Join(tmpHome, oldConfigfile) | ||
if err := ioutil.WriteFile(fn, []byte(content), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
config, err := Load(tmpHome) | ||
if err == nil || err.Error() != expectedError { | ||
t.Fatalf("Should have failed, got: %q, %q", config, err) | ||
} | ||
|
||
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName)) | ||
if !strings.Contains(string(buf), `"auths":`) { | ||
t.Fatalf("Should have save in new form: %s", string(buf)) | ||
} | ||
} | ||
|
||
func TestOldJson(t *testing.T) { | ||
if runtime.GOOS == "windows" { | ||
return | ||
func TestOldValidAuth(t *testing.T) { | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
homeKey := homedir.Key() | ||
homeVal := homedir.Get() | ||
|
||
defer func() { os.Setenv(homeKey, homeVal) }() | ||
os.Setenv(homeKey, tmpHome) | ||
|
||
fn := filepath.Join(tmpHome, oldConfigfile) | ||
js := `username = am9lam9lOmhlbGxv | ||
email = [email protected]` | ||
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
tmpHome, _ := ioutil.TempDir("", "config-test") | ||
config, err := Load(tmpHome) | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
// defaultIndexserver is https://index.docker.io/v1/ | ||
ac := config.AuthConfigs["https://index.docker.io/v1/"] | ||
if ac.Email != "[email protected]" || ac.Username != "joejoe" || ac.Password != "hello" { | ||
t.Fatalf("Missing data from parsing:\n%q", config) | ||
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
|
||
if !strings.Contains(configStr, "[email protected]") { | ||
t.Fatalf("Should have save in new form: %s", configStr) | ||
} | ||
} | ||
|
||
func TestOldJsonInvalid(t *testing.T) { | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
homeKey := homedir.Key() | ||
homeVal := homedir.Get() | ||
|
||
defer func() { os.Setenv(homeKey, homeVal) }() | ||
os.Setenv(homeKey, tmpHome) | ||
|
||
fn := filepath.Join(tmpHome, oldConfigfile) | ||
js := `{"https://index.docker.io/v1/":{"auth":"test","email":"[email protected]"}}` | ||
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
config, err := Load(tmpHome) | ||
if err == nil || err.Error() != "Invalid auth configuration file" { | ||
t.Fatalf("Expected an error got : %v, %v", config, err) | ||
} | ||
} | ||
|
||
func TestOldJson(t *testing.T) { | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
homeKey := homedir.Key() | ||
|
@@ -102,7 +226,9 @@ func TestOldJson(t *testing.T) { | |
|
||
fn := filepath.Join(tmpHome, oldConfigfile) | ||
js := `{"https://index.docker.io/v1/":{"auth":"am9lam9lOmhlbGxv","email":"[email protected]"}}` | ||
ioutil.WriteFile(fn, []byte(js), 0600) | ||
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
config, err := Load(tmpHome) | ||
if err != nil { | ||
|
@@ -115,23 +241,25 @@ func TestOldJson(t *testing.T) { | |
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
err = config.Save() | ||
if err != nil { | ||
t.Fatalf("Failed to save: %q", err) | ||
} | ||
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
|
||
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName)) | ||
if !strings.Contains(string(buf), `"auths":`) || | ||
!strings.Contains(string(buf), "[email protected]") { | ||
t.Fatalf("Should have save in new form: %s", string(buf)) | ||
if !strings.Contains(configStr, "[email protected]") { | ||
t.Fatalf("Should have save in new form: %s", configStr) | ||
} | ||
} | ||
|
||
func TestNewJson(t *testing.T) { | ||
tmpHome, _ := ioutil.TempDir("", "config-test") | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
fn := filepath.Join(tmpHome, ConfigFileName) | ||
js := ` { "auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "[email protected]" } } }` | ||
ioutil.WriteFile(fn, []byte(js), 0600) | ||
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
config, err := Load(tmpHome) | ||
if err != nil { | ||
|
@@ -144,26 +272,28 @@ func TestNewJson(t *testing.T) { | |
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
err = config.Save() | ||
if err != nil { | ||
t.Fatalf("Failed to save: %q", err) | ||
} | ||
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
|
||
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName)) | ||
if !strings.Contains(string(buf), `"auths":`) || | ||
!strings.Contains(string(buf), "[email protected]") { | ||
t.Fatalf("Should have save in new form: %s", string(buf)) | ||
if !strings.Contains(configStr, "[email protected]") { | ||
t.Fatalf("Should have save in new form: %s", configStr) | ||
} | ||
} | ||
|
||
func TestJsonWithPsFormat(t *testing.T) { | ||
tmpHome, _ := ioutil.TempDir("", "config-test") | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
fn := filepath.Join(tmpHome, ConfigFileName) | ||
js := `{ | ||
"auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "[email protected]" } }, | ||
"psFormat": "table {{.ID}}\\t{{.Label \"com.docker.label.cpu\"}}" | ||
}` | ||
ioutil.WriteFile(fn, []byte(js), 0600) | ||
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
config, err := Load(tmpHome) | ||
if err != nil { | ||
|
@@ -175,14 +305,51 @@ func TestJsonWithPsFormat(t *testing.T) { | |
} | ||
|
||
// Now save it and make sure it shows up in new form | ||
err = config.Save() | ||
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome) | ||
if !strings.Contains(configStr, `"psFormat":`) || | ||
!strings.Contains(configStr, "{{.ID}}") { | ||
t.Fatalf("Should have save in new form: %s", configStr) | ||
} | ||
} | ||
|
||
// Save it and make sure it shows up in new form | ||
func saveConfigAndValidateNewFormat(t *testing.T, config *ConfigFile, homeFolder string) string { | ||
err := config.Save() | ||
if err != nil { | ||
t.Fatalf("Failed to save: %q", err) | ||
} | ||
|
||
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName)) | ||
if !strings.Contains(string(buf), `"psFormat":`) || | ||
!strings.Contains(string(buf), "{{.ID}}") { | ||
buf, err := ioutil.ReadFile(filepath.Join(homeFolder, ConfigFileName)) | ||
if !strings.Contains(string(buf), `"auths":`) { | ||
t.Fatalf("Should have save in new form: %s", string(buf)) | ||
} | ||
return string(buf) | ||
} | ||
|
||
func TestConfigDir(t *testing.T) { | ||
tmpHome, err := ioutil.TempDir("", "config-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(tmpHome) | ||
|
||
if ConfigDir() == tmpHome { | ||
t.Fatalf("Expected ConfigDir to be different than %s by default, but was the same", tmpHome) | ||
} | ||
|
||
// Update configDir | ||
SetConfigDir(tmpHome) | ||
|
||
if ConfigDir() != tmpHome { | ||
t.Fatalf("Expected ConfigDir to %s, but was %s", tmpHome, ConfigDir()) | ||
} | ||
} | ||
|
||
func TestConfigFile(t *testing.T) { | ||
configFilename := "configFilename" | ||
configFile := NewConfigFile(configFilename) | ||
|
||
if configFile.Filename() != configFilename { | ||
t.Fatalf("Expected %s, got %s", configFilename, configFile.Filename()) | ||
} | ||
} |