OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / spf13 / pflag / ip_slice_test.go
1 package pflag
2
3 import (
4         "fmt"
5         "net"
6         "strings"
7         "testing"
8 )
9
10 func setUpIPSFlagSet(ipsp *[]net.IP) *FlagSet {
11         f := NewFlagSet("test", ContinueOnError)
12         f.IPSliceVar(ipsp, "ips", []net.IP{}, "Command separated list!")
13         return f
14 }
15
16 func setUpIPSFlagSetWithDefault(ipsp *[]net.IP) *FlagSet {
17         f := NewFlagSet("test", ContinueOnError)
18         f.IPSliceVar(ipsp, "ips",
19                 []net.IP{
20                         net.ParseIP("192.168.1.1"),
21                         net.ParseIP("0:0:0:0:0:0:0:1"),
22                 },
23                 "Command separated list!")
24         return f
25 }
26
27 func TestEmptyIP(t *testing.T) {
28         var ips []net.IP
29         f := setUpIPSFlagSet(&ips)
30         err := f.Parse([]string{})
31         if err != nil {
32                 t.Fatal("expected no error; got", err)
33         }
34
35         getIPS, err := f.GetIPSlice("ips")
36         if err != nil {
37                 t.Fatal("got an error from GetIPSlice():", err)
38         }
39         if len(getIPS) != 0 {
40                 t.Fatalf("got ips %v with len=%d but expected length=0", getIPS, len(getIPS))
41         }
42 }
43
44 func TestIPS(t *testing.T) {
45         var ips []net.IP
46         f := setUpIPSFlagSet(&ips)
47
48         vals := []string{"192.168.1.1", "10.0.0.1", "0:0:0:0:0:0:0:2"}
49         arg := fmt.Sprintf("--ips=%s", strings.Join(vals, ","))
50         err := f.Parse([]string{arg})
51         if err != nil {
52                 t.Fatal("expected no error; got", err)
53         }
54         for i, v := range ips {
55                 if ip := net.ParseIP(vals[i]); ip == nil {
56                         t.Fatalf("invalid string being converted to IP address: %s", vals[i])
57                 } else if !ip.Equal(v) {
58                         t.Fatalf("expected ips[%d] to be %s but got: %s from GetIPSlice", i, vals[i], v)
59                 }
60         }
61 }
62
63 func TestIPSDefault(t *testing.T) {
64         var ips []net.IP
65         f := setUpIPSFlagSetWithDefault(&ips)
66
67         vals := []string{"192.168.1.1", "0:0:0:0:0:0:0:1"}
68         err := f.Parse([]string{})
69         if err != nil {
70                 t.Fatal("expected no error; got", err)
71         }
72         for i, v := range ips {
73                 if ip := net.ParseIP(vals[i]); ip == nil {
74                         t.Fatalf("invalid string being converted to IP address: %s", vals[i])
75                 } else if !ip.Equal(v) {
76                         t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v)
77                 }
78         }
79
80         getIPS, err := f.GetIPSlice("ips")
81         if err != nil {
82                 t.Fatal("got an error from GetIPSlice")
83         }
84         for i, v := range getIPS {
85                 if ip := net.ParseIP(vals[i]); ip == nil {
86                         t.Fatalf("invalid string being converted to IP address: %s", vals[i])
87                 } else if !ip.Equal(v) {
88                         t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v)
89                 }
90         }
91 }
92
93 func TestIPSWithDefault(t *testing.T) {
94         var ips []net.IP
95         f := setUpIPSFlagSetWithDefault(&ips)
96
97         vals := []string{"192.168.1.1", "0:0:0:0:0:0:0:1"}
98         arg := fmt.Sprintf("--ips=%s", strings.Join(vals, ","))
99         err := f.Parse([]string{arg})
100         if err != nil {
101                 t.Fatal("expected no error; got", err)
102         }
103         for i, v := range ips {
104                 if ip := net.ParseIP(vals[i]); ip == nil {
105                         t.Fatalf("invalid string being converted to IP address: %s", vals[i])
106                 } else if !ip.Equal(v) {
107                         t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v)
108                 }
109         }
110
111         getIPS, err := f.GetIPSlice("ips")
112         if err != nil {
113                 t.Fatal("got an error from GetIPSlice")
114         }
115         for i, v := range getIPS {
116                 if ip := net.ParseIP(vals[i]); ip == nil {
117                         t.Fatalf("invalid string being converted to IP address: %s", vals[i])
118                 } else if !ip.Equal(v) {
119                         t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v)
120                 }
121         }
122 }
123
124 func TestIPSCalledTwice(t *testing.T) {
125         var ips []net.IP
126         f := setUpIPSFlagSet(&ips)
127
128         in := []string{"192.168.1.2,0:0:0:0:0:0:0:1", "10.0.0.1"}
129         expected := []net.IP{net.ParseIP("192.168.1.2"), net.ParseIP("0:0:0:0:0:0:0:1"), net.ParseIP("10.0.0.1")}
130         argfmt := "ips=%s"
131         arg1 := fmt.Sprintf(argfmt, in[0])
132         arg2 := fmt.Sprintf(argfmt, in[1])
133         err := f.Parse([]string{arg1, arg2})
134         if err != nil {
135                 t.Fatal("expected no error; got", err)
136         }
137         for i, v := range ips {
138                 if !expected[i].Equal(v) {
139                         t.Fatalf("expected ips[%d] to be %s but got: %s", i, expected[i], v)
140                 }
141         }
142 }
143
144 func TestIPSBadQuoting(t *testing.T) {
145
146         tests := []struct {
147                 Want    []net.IP
148                 FlagArg []string
149         }{
150                 {
151                         Want: []net.IP{
152                                 net.ParseIP("a4ab:61d:f03e:5d7d:fad7:d4c2:a1a5:568"),
153                                 net.ParseIP("203.107.49.208"),
154                                 net.ParseIP("14.57.204.90"),
155                         },
156                         FlagArg: []string{
157                                 "a4ab:61d:f03e:5d7d:fad7:d4c2:a1a5:568",
158                                 "203.107.49.208",
159                                 "14.57.204.90",
160                         },
161                 },
162                 {
163                         Want: []net.IP{
164                                 net.ParseIP("204.228.73.195"),
165                                 net.ParseIP("86.141.15.94"),
166                         },
167                         FlagArg: []string{
168                                 "204.228.73.195",
169                                 "86.141.15.94",
170                         },
171                 },
172                 {
173                         Want: []net.IP{
174                                 net.ParseIP("c70c:db36:3001:890f:c6ea:3f9b:7a39:cc3f"),
175                                 net.ParseIP("4d17:1d6e:e699:bd7a:88c5:5e7e:ac6a:4472"),
176                         },
177                         FlagArg: []string{
178                                 "c70c:db36:3001:890f:c6ea:3f9b:7a39:cc3f",
179                                 "4d17:1d6e:e699:bd7a:88c5:5e7e:ac6a:4472",
180                         },
181                 },
182                 {
183                         Want: []net.IP{
184                                 net.ParseIP("5170:f971:cfac:7be3:512a:af37:952c:bc33"),
185                                 net.ParseIP("93.21.145.140"),
186                                 net.ParseIP("2cac:61d3:c5ff:6caf:73e0:1b1a:c336:c1ca"),
187                         },
188                         FlagArg: []string{
189                                 " 5170:f971:cfac:7be3:512a:af37:952c:bc33  , 93.21.145.140     ",
190                                 "2cac:61d3:c5ff:6caf:73e0:1b1a:c336:c1ca",
191                         },
192                 },
193                 {
194                         Want: []net.IP{
195                                 net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"),
196                                 net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"),
197                                 net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"),
198                                 net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"),
199                         },
200                         FlagArg: []string{
201                                 `"2e5e:66b2:6441:848:5b74:76ea:574c:3a7b,        2e5e:66b2:6441:848:5b74:76ea:574c:3a7b,2e5e:66b2:6441:848:5b74:76ea:574c:3a7b     "`,
202                                 " 2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"},
203                 },
204         }
205
206         for i, test := range tests {
207
208                 var ips []net.IP
209                 f := setUpIPSFlagSet(&ips)
210
211                 if err := f.Parse([]string{fmt.Sprintf("--ips=%s", strings.Join(test.FlagArg, ","))}); err != nil {
212                         t.Fatalf("flag parsing failed with error: %s\nparsing:\t%#v\nwant:\t\t%s",
213                                 err, test.FlagArg, test.Want[i])
214                 }
215
216                 for j, b := range ips {
217                         if !b.Equal(test.Want[j]) {
218                                 t.Fatalf("bad value parsed for test %d on net.IP %d:\nwant:\t%s\ngot:\t%s", i, j, test.Want[j], b)
219                         }
220                 }
221         }
222 }