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