blob: d9c9f55ad9b9f99dca5a1b4280b7a3d48620c77f [file] [log] [blame]
Cosmos Nicolaoua18394e2014-09-11 13:18:32 -07001package flags_test
2
3import (
4 "net"
5 "reflect"
6 "strings"
7 "testing"
8
Jiri Simsa764efb72014-12-25 20:57:03 -08009 "v.io/core/veyron/lib/flags"
Cosmos Nicolaoua18394e2014-09-11 13:18:32 -070010)
11
12func TestIPFlag(t *testing.T) {
13 ip := &flags.IPFlag{}
14 if err := ip.Set("172.16.1.22"); err != nil {
15 t.Errorf("unexpected error %s", err)
16 }
17 if got, want := ip.IP, net.ParseIP("172.16.1.22"); !got.Equal(want) {
18 t.Errorf("got %s, expected %s", got, want)
19 }
20 if err := ip.Set("172.16"); err == nil || err.Error() != "failed to parse 172.16 as an IP address" {
21 t.Errorf("expected error %v", err)
22 }
23}
24
25func TestTCPFlag(t *testing.T) {
26 tcp := &flags.TCPProtocolFlag{}
27 if err := tcp.Set("tcp6"); err != nil {
28 t.Errorf("unexpected error %s", err)
29 }
30 if got, want := tcp.Protocol, "tcp6"; got != want {
31 t.Errorf("got %s, expected %s", got, want)
32 }
33 if err := tcp.Set("foo"); err == nil || !strings.Contains(err.Error(), "not a tcp protocol") {
34 t.Errorf("expected error %v", err)
35 }
36}
37
38func TestIPHostPortFlag(t *testing.T) {
39 lh := []*net.IPAddr{{IP: net.ParseIP("127.0.0.1")}}
40 ip6 := []*net.IPAddr{{IP: net.ParseIP("FE80:0000:0000:0000:0202:B3FF:FE1E:8329")}}
41 cases := []struct {
42 input string
43 want flags.IPHostPortFlag
44 str string
45 }{
Cosmos Nicolaoua0251092014-11-09 22:04:37 -080046 {"", flags.IPHostPortFlag{Port: ""}, ""},
Cosmos Nicolaoua18394e2014-09-11 13:18:32 -070047 {":0", flags.IPHostPortFlag{Port: "0"}, ":0"},
48 {":22", flags.IPHostPortFlag{Port: "22"}, ":22"},
49 {"127.0.0.1", flags.IPHostPortFlag{IP: lh, Port: "0"}, "127.0.0.1:0"},
50 {"127.0.0.1:10", flags.IPHostPortFlag{IP: lh, Port: "10"}, "127.0.0.1:10"},
51 {"[]:0", flags.IPHostPortFlag{Port: "0"}, ":0"},
52 {"[FE80:0000:0000:0000:0202:B3FF:FE1E:8329]:100", flags.IPHostPortFlag{IP: ip6, Port: "100"}, "[fe80::202:b3ff:fe1e:8329]:100"},
53 }
54 for _, c := range cases {
55 got, want := &flags.IPHostPortFlag{}, &c.want
56 c.want.Address = c.input
57 if err := got.Set(c.input); err != nil || !reflect.DeepEqual(got, want) {
58 if err != nil {
59 t.Errorf("%q: unexpected error %s", c.input, err)
60 } else {
61 t.Errorf("%q: got %#v, want %#v", c.input, got, want)
62 }
63 }
64 if got.String() != c.str {
65 t.Errorf("%q: got %#v, want %#v", c.input, got.String(), c.str)
66 }
67 }
68
69 host := &flags.IPHostPortFlag{}
70 if err := host.Set("localhost:122"); err != nil {
71 t.Errorf("unexpected error: %s", err)
72 }
73 if len(host.IP) == 0 {
74 t.Errorf("localhost should have resolved to at least one address")
75 }
76 if got, want := host.Port, "122"; got != want {
77 t.Errorf("got %q, want %q", got, want)
78 }
79 if got, want := host.String(), "localhost:122"; got != want {
80 t.Errorf("got %q, want %q", got, want)
81 }
82
83 for _, s := range []string{
84 ":", ":59999999", "nohost.invalid", "nohost.invalid:"} {
85 f := &flags.IPHostPortFlag{}
86 if err := f.Set(s); err == nil {
87 t.Errorf("expected an error for %q", s)
88 }
89 }
90
91}