Change TO Golang config parse to return all errs

Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/fcc34ac9
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/fcc34ac9
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/fcc34ac9

Branch: refs/heads/master
Commit: fcc34ac9cf77490f100cb89731591567953ee82f
Parents: 4ab5a3e
Author: Robert Butts <robert.o.bu...@gmail.com>
Authored: Tue Jul 25 22:50:43 2017 -0600
Committer: Dewayne Richardson <dewr...@apache.org>
Committed: Thu Aug 10 09:46:03 2017 -0600

----------------------------------------------------------------------
 traffic_ops/traffic_ops_golang/config.go | 34 ++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/fcc34ac9/traffic_ops/traffic_ops_golang/config.go
----------------------------------------------------------------------
diff --git a/traffic_ops/traffic_ops_golang/config.go 
b/traffic_ops/traffic_ops_golang/config.go
index 7595181..5911204 100644
--- a/traffic_ops/traffic_ops_golang/config.go
+++ b/traffic_ops/traffic_ops_golang/config.go
@@ -78,30 +78,32 @@ func LoadConfig(fileName string) (Config, error) {
 
 // ParseConfig validates required fields, and parses non-JSON types
 func ParseConfig(cfg Config) (Config, error) {
+       missings := ""
        if cfg.HTTPPort == "" {
-               return Config{}, fmt.Errorf("missing port")
+               missings += "port, "
        }
        if cfg.DBUser == "" {
-               return Config{}, fmt.Errorf("missing database user")
+               missings += "db_user, "
        }
        if cfg.DBPass == "" {
-               return Config{}, fmt.Errorf("missing database password")
+               missings += "db_pass, "
        }
        if cfg.DBServer == "" {
-               return Config{}, fmt.Errorf("missing database server")
+               missings += "db_server, "
        }
        if cfg.DBDB == "" {
-               return Config{}, fmt.Errorf("missing database name")
+               missings += "db_name, "
        }
        if cfg.TOSecret == "" {
-               return Config{}, fmt.Errorf("missing secret")
+               missings += "to_secret, "
        }
        if cfg.CertPath == "" {
-               return Config{}, fmt.Errorf("missing certificate path")
+               missings += "cert_path, "
        }
        if cfg.KeyPath == "" {
-               return Config{}, fmt.Errorf("missing certificate key path")
+               missings += "key_path, "
        }
+
        if cfg.LogLocationError == "" {
                cfg.LogLocationError = log.LogLocationNull
        }
@@ -118,9 +120,23 @@ func ParseConfig(cfg Config) (Config, error) {
                cfg.LogLocationEvent = log.LogLocationNull
        }
 
+       invalidTOURLStr := ""
        var err error
        if cfg.TOURL, err = url.Parse(cfg.TOURLStr); err != nil {
-               return Config{}, fmt.Errorf("Invalid Traffic Ops URL '%v': 
err", cfg.TOURL, err)
+               invalidTOURLStr = fmt.Sprintf("invalid Traffic Ops URL '%v': 
%v", cfg.TOURLStr, err)
+       }
+
+       if len(missings) > 0 {
+               missings = "missing fields: " + missings[:len(missings)-2] // 
strip final `, `
+       }
+
+       errStr := missings
+       if errStr != "" && invalidTOURLStr != "" {
+               errStr += "; "
+       }
+       errStr += invalidTOURLStr
+       if errStr != "" {
+               return Config{}, fmt.Errorf(errStr)
        }
 
        return cfg, nil

Reply via email to