func setFromEnv(into flag.Value, envVars string) bool { multiValued, isMulti := into.(multiValued) if len(envVars) > 0 { for _, rev := range strings.Split(envVars, " ") { ev := strings.TrimSpace(rev) if len(ev) == 0 { continue } v := os.Getenv(ev) if len(v) == 0 { continue } if !isMulti { if err := into.Set(v); err == nil { return true } continue } vs := strings.Split(v, ",") if err := setMultivalued(multiValued, vs); err == nil { return true } } } return false }
func TestIPNet(t *testing.T) { testCases := []struct { input string success bool expected string }{ {"0.0.0.0/0", true, "0.0.0.0/0"}, {" 0.0.0.0/0 ", true, "0.0.0.0/0"}, {"1.2.3.4/8", true, "1.0.0.0/8"}, {"127.0.0.1/16", true, "127.0.0.0/16"}, {"255.255.255.255/19", true, "255.255.224.0/19"}, {"255.255.255.255/32", true, "255.255.255.255/32"}, {"", false, ""}, {"/0", false, ""}, {"0", false, ""}, {"0/0", false, ""}, {"localhost/0", false, ""}, {"0.0.0/4", false, ""}, {"0.0.0./8", false, ""}, {"0.0.0.0./12", false, ""}, {"0.0.0.256/16", false, ""}, {"0.0.0.0 /20", false, ""}, {"0.0.0.0/ 24", false, ""}, {"0 . 0 . 0 . 0 / 28", false, ""}, {"0.0.0.0/33", false, ""}, } for i := range testCases { tc := &testCases[i] var f flag.Value = &IPNet{} err := f.Set(tc.input) if err != nil && tc.success == true { t.Errorf("expected success, got %q", err) continue } else if err == nil && tc.success == false { t.Errorf("expected failure") continue } else if tc.success { if f.String() != tc.expected { t.Errorf("expected %q, got %q", tc.expected, f.String()) } } } }
func TestIP(t *testing.T) { testCases := []struct { input string success bool expected string }{ {"0.0.0.0", true, "0.0.0.0"}, {" 0.0.0.0 ", true, "0.0.0.0"}, {"1.2.3.4", true, "1.2.3.4"}, {"127.0.0.1", true, "127.0.0.1"}, {"255.255.255.255", true, "255.255.255.255"}, {"", false, ""}, {"0", false, ""}, {"localhost", false, ""}, {"0.0.0", false, ""}, {"0.0.0.", false, ""}, {"0.0.0.0.", false, ""}, {"0.0.0.256", false, ""}, {"0 . 0 . 0 . 0", false, ""}, } for i := range testCases { tc := &testCases[i] var f flag.Value = &IP{} err := f.Set(tc.input) if err != nil && tc.success == true { t.Errorf("expected success, got %q", err) continue } else if err == nil && tc.success == false { t.Errorf("expected failure") continue } else if tc.success { if f.String() != tc.expected { t.Errorf("expected %q, got %q", tc.expected, f.String()) } } } }
func main() { var flag flag.Value = new(MyFlag) flag.Set("joe") }