blob: e5c23c875cf268c2e9fa9d05267577454be7bf9b [file] [log] [blame]
Jiri Simsad7616c92015-03-24 23:44:30 -07001// Copyright 2015 The Vanadium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Cosmos Nicolaoua18394e2014-09-11 13:18:32 -07005package flags_test
6
7import (
8 "net"
9 "reflect"
10 "strings"
11 "testing"
12
Jiri Simsaffceefa2015-02-28 11:03:34 -080013 "v.io/x/ref/lib/flags"
Cosmos Nicolaoua18394e2014-09-11 13:18:32 -070014)
15
16func TestIPFlag(t *testing.T) {
17 ip := &flags.IPFlag{}
18 if err := ip.Set("172.16.1.22"); err != nil {
19 t.Errorf("unexpected error %s", err)
20 }
21 if got, want := ip.IP, net.ParseIP("172.16.1.22"); !got.Equal(want) {
22 t.Errorf("got %s, expected %s", got, want)
23 }
Mike Burrows4d7b13b2015-03-31 18:15:21 -070024 if err := ip.Set("172.16"); err == nil || !strings.Contains(err.Error(), "failed to parse 172.16 as an IP address") {
Cosmos Nicolaoua18394e2014-09-11 13:18:32 -070025 t.Errorf("expected error %v", err)
26 }
27}
28
29func TestTCPFlag(t *testing.T) {
30 tcp := &flags.TCPProtocolFlag{}
31 if err := tcp.Set("tcp6"); err != nil {
32 t.Errorf("unexpected error %s", err)
33 }
34 if got, want := tcp.Protocol, "tcp6"; got != want {
35 t.Errorf("got %s, expected %s", got, want)
36 }
37 if err := tcp.Set("foo"); err == nil || !strings.Contains(err.Error(), "not a tcp protocol") {
38 t.Errorf("expected error %v", err)
39 }
40}
41
42func TestIPHostPortFlag(t *testing.T) {
43 lh := []*net.IPAddr{{IP: net.ParseIP("127.0.0.1")}}
44 ip6 := []*net.IPAddr{{IP: net.ParseIP("FE80:0000:0000:0000:0202:B3FF:FE1E:8329")}}
45 cases := []struct {
46 input string
47 want flags.IPHostPortFlag
48 str string
49 }{
Cosmos Nicolaoua0251092014-11-09 22:04:37 -080050 {"", flags.IPHostPortFlag{Port: ""}, ""},
Cosmos Nicolaoua18394e2014-09-11 13:18:32 -070051 {":0", flags.IPHostPortFlag{Port: "0"}, ":0"},
52 {":22", flags.IPHostPortFlag{Port: "22"}, ":22"},
53 {"127.0.0.1", flags.IPHostPortFlag{IP: lh, Port: "0"}, "127.0.0.1:0"},
54 {"127.0.0.1:10", flags.IPHostPortFlag{IP: lh, Port: "10"}, "127.0.0.1:10"},
55 {"[]:0", flags.IPHostPortFlag{Port: "0"}, ":0"},
56 {"[FE80:0000:0000:0000:0202:B3FF:FE1E:8329]:100", flags.IPHostPortFlag{IP: ip6, Port: "100"}, "[fe80::202:b3ff:fe1e:8329]:100"},
57 }
58 for _, c := range cases {
59 got, want := &flags.IPHostPortFlag{}, &c.want
60 c.want.Address = c.input
61 if err := got.Set(c.input); err != nil || !reflect.DeepEqual(got, want) {
62 if err != nil {
63 t.Errorf("%q: unexpected error %s", c.input, err)
64 } else {
65 t.Errorf("%q: got %#v, want %#v", c.input, got, want)
66 }
67 }
68 if got.String() != c.str {
69 t.Errorf("%q: got %#v, want %#v", c.input, got.String(), c.str)
70 }
71 }
72
73 host := &flags.IPHostPortFlag{}
74 if err := host.Set("localhost:122"); err != nil {
75 t.Errorf("unexpected error: %s", err)
76 }
77 if len(host.IP) == 0 {
78 t.Errorf("localhost should have resolved to at least one address")
79 }
80 if got, want := host.Port, "122"; got != want {
81 t.Errorf("got %q, want %q", got, want)
82 }
83 if got, want := host.String(), "localhost:122"; got != want {
84 t.Errorf("got %q, want %q", got, want)
85 }
86
87 for _, s := range []string{
88 ":", ":59999999", "nohost.invalid", "nohost.invalid:"} {
89 f := &flags.IPHostPortFlag{}
90 if err := f.Set(s); err == nil {
91 t.Errorf("expected an error for %q", s)
92 }
93 }
94
95}