Browse Source

Merge pull request #8920 from gyuho/fix-flag

pkg/flags: fix "SetFlagsFromEnv" error masking
Gyuho Lee 8 years ago
parent
commit
289653d914
2 changed files with 18 additions and 1 deletions
  1. 3 1
      pkg/flags/flag.go
  2. 15 0
      pkg/flags/flag_test.go

+ 3 - 1
pkg/flags/flag.go

@@ -78,7 +78,9 @@ func SetFlagsFromEnv(prefix string, fs *flag.FlagSet) error {
 	})
 	usedEnvKey := make(map[string]bool)
 	fs.VisitAll(func(f *flag.Flag) {
-		err = setFlagFromEnv(fs, prefix, f.Name, usedEnvKey, alreadySet, true)
+		if serr := setFlagFromEnv(fs, prefix, f.Name, usedEnvKey, alreadySet, true); serr != nil {
+			err = serr
+		}
 	})
 	verifyEnv(prefix, usedEnvKey, alreadySet)
 	return err

+ 15 - 0
pkg/flags/flag_test.go

@@ -76,3 +76,18 @@ func TestSetFlagsFromEnvBad(t *testing.T) {
 		t.Errorf("err=nil, want != nil")
 	}
 }
+
+func TestSetFlagsFromEnvParsingError(t *testing.T) {
+	fs := flag.NewFlagSet("etcd", flag.ContinueOnError)
+	var tickMs uint
+	fs.UintVar(&tickMs, "heartbeat-interval", 0, "Time (in milliseconds) of a heartbeat interval.")
+
+	if oerr := os.Setenv("ETCD_HEARTBEAT_INTERVAL", "100 # ms"); oerr != nil {
+		t.Fatal(oerr)
+	}
+	defer os.Unsetenv("ETCD_HEARTBEAT_INTERVAL")
+
+	if serr := SetFlagsFromEnv("ETCD", fs); serr.Error() != `invalid value "100 # ms" for ETCD_HEARTBEAT_INTERVAL: strconv.ParseUint: parsing "100 # ms": invalid syntax` {
+		t.Fatalf("expected parsing error, got %v", serr)
+	}
+}