|  | package pflag | 
|  |  | 
|  | import ( | 
|  | "fmt" | 
|  | "net" | 
|  | "os" | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | func setUpIPNet(ip *net.IPNet) *FlagSet { | 
|  | f := NewFlagSet("test", ContinueOnError) | 
|  | _, def, _ := net.ParseCIDR("0.0.0.0/0") | 
|  | f.IPNetVar(ip, "address", *def, "IP Address") | 
|  | return f | 
|  | } | 
|  |  | 
|  | 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, ""}, | 
|  | } | 
|  |  | 
|  | devnull, _ := os.Open(os.DevNull) | 
|  | os.Stderr = devnull | 
|  | for i := range testCases { | 
|  | var addr net.IPNet | 
|  | f := setUpIPNet(&addr) | 
|  |  | 
|  | tc := &testCases[i] | 
|  |  | 
|  | arg := fmt.Sprintf("--address=%s", tc.input) | 
|  | err := f.Parse([]string{arg}) | 
|  | 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 { | 
|  | ip, err := f.GetIPNet("address") | 
|  | if err != nil { | 
|  | t.Errorf("Got error trying to fetch the IP flag: %v", err) | 
|  | } | 
|  | if ip.String() != tc.expected { | 
|  | t.Errorf("expected %q, got %q", tc.expected, ip.String()) | 
|  | } | 
|  | } | 
|  | } | 
|  | } |