// LoadAuth parses an AuthInfo object from a file path. It prompts user and creates file if it doesn't exist. func (a *PromptingAuthLoader) LoadAuth(path string) (*clientauth.Info, error) { var auth clientauth.Info // Prompt for user/pass and write a file if none exists. if _, err := os.Stat(path); os.IsNotExist(err) { auth = *a.Prompt() data, err := json.Marshal(auth) if err != nil { return &auth, err } err = ioutil.WriteFile(path, data, 0600) return &auth, err } authPtr, err := clientauth.LoadFromFile(path) if err != nil { return nil, err } return authPtr, nil }
func TestLoadFromFile(t *testing.T) { loadAuthInfoTests := []struct { authData string authInfo *clientauth.Info expectErr bool }{ { `{"user": "******", "password": "******"}`, &clientauth.Info{User: "******", Password: "******"}, false, }, { "", nil, true, }, } for _, loadAuthInfoTest := range loadAuthInfoTests { tt := loadAuthInfoTest aifile, err := ioutil.TempFile("", "testAuthInfo") if err != nil { t.Errorf("Unexpected error: %v", err) } if tt.authData != "missing" { defer os.Remove(aifile.Name()) defer aifile.Close() _, err = aifile.WriteString(tt.authData) if err != nil { t.Errorf("Unexpected error: %v", err) } } else { aifile.Close() os.Remove(aifile.Name()) } authInfo, err := clientauth.LoadFromFile(aifile.Name()) gotErr := err != nil if gotErr != tt.expectErr { t.Errorf("expected errorness: %v, actual errorness: %v", tt.expectErr, gotErr) } if !reflect.DeepEqual(authInfo, tt.authInfo) { t.Errorf("Expected %v, got %v", tt.authInfo, authInfo) } } }
// LoadAuth for defaultAuthLoader simply delegates to clientauth.LoadFromFile func (*defaultAuthLoader) LoadAuth(path string) (*clientauth.Info, error) { return clientauth.LoadFromFile(path) }