Prechádzať zdrojové kódy

Merge pull request #1283 from crosbymichael/username-not-set

Copy authConfigs on save so data is not modified
Victor Vieux 12 rokov pred
rodič
commit
7df6c4b9ad
2 zmenil súbory, kde vykonal 48 pridanie a 6 odobranie
  1. 10 5
      auth/auth.go
  2. 38 1
      auth/auth_test.go

+ 10 - 5
auth/auth.go

@@ -116,14 +116,19 @@ func SaveConfig(configFile *ConfigFile) error {
 		os.Remove(confFile)
 		return nil
 	}
+
+	configs := make(map[string]AuthConfig, len(configFile.Configs))
 	for k, authConfig := range configFile.Configs {
-		authConfig.Auth = encodeAuth(&authConfig)
-		authConfig.Username = ""
-		authConfig.Password = ""
-		configFile.Configs[k] = authConfig
+		authCopy := authConfig
+
+		authCopy.Auth = encodeAuth(&authCopy)
+		authCopy.Username = ""
+		authCopy.Password = ""
+
+		configs[k] = authCopy
 	}
 
-	b, err := json.Marshal(configFile.Configs)
+	b, err := json.Marshal(configs)
 	if err != nil {
 		return err
 	}

+ 38 - 1
auth/auth_test.go

@@ -3,6 +3,7 @@ package auth
 import (
 	"crypto/rand"
 	"encoding/hex"
+	"io/ioutil"
 	"os"
 	"strings"
 	"testing"
@@ -51,7 +52,7 @@ func TestCreateAccount(t *testing.T) {
 	}
 	token := hex.EncodeToString(tokenBuffer)[:12]
 	username := "ut" + token
-	authConfig := &AuthConfig{Username: username, Password: "test42", Email: "docker-ut+"+token+"@example.com"}
+	authConfig := &AuthConfig{Username: username, Password: "test42", Email: "docker-ut+" + token + "@example.com"}
 	status, err := Login(authConfig)
 	if err != nil {
 		t.Fatal(err)
@@ -73,3 +74,39 @@ func TestCreateAccount(t *testing.T) {
 		t.Fatalf("Expected message \"%s\" but found \"%s\" instead", expectedError, err)
 	}
 }
+
+func TestSameAuthDataPostSave(t *testing.T) {
+	root, err := ioutil.TempDir("", "docker-test")
+	if err != nil {
+		t.Fatal(err)
+	}
+	configFile := &ConfigFile{
+		rootPath: root,
+		Configs:  make(map[string]AuthConfig, 1),
+	}
+
+	configFile.Configs["testIndex"] = AuthConfig{
+		Username: "docker-user",
+		Password: "docker-pass",
+		Email:    "docker@docker.io",
+	}
+
+	err = SaveConfig(configFile)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	authConfig := configFile.Configs["testIndex"]
+	if authConfig.Username != "docker-user" {
+		t.Fail()
+	}
+	if authConfig.Password != "docker-pass" {
+		t.Fail()
+	}
+	if authConfig.Email != "docker@docker.io" {
+		t.Fail()
+	}
+	if authConfig.Auth != "" {
+		t.Fail()
+	}
+}