Skip to content

Commit

Permalink
Add unit test to pkg cliconfig (and thus coverage)
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Demeester <[email protected]>
  • Loading branch information
vdemeester committed Aug 6, 2015
1 parent 5b289cd commit 73ad1b2
Showing 1 changed file with 226 additions and 59 deletions.
285 changes: 226 additions & 59 deletions cliconfig/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -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()
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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())
}
}

0 comments on commit 73ad1b2

Please sign in to comment.