Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // 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 Nicolaou | a18394e | 2014-09-11 13:18:32 -0700 | [diff] [blame] | 5 | package flags_test |
| 6 | |
| 7 | import ( |
| 8 | "net" |
| 9 | "reflect" |
| 10 | "strings" |
| 11 | "testing" |
| 12 | |
Jiri Simsa | ffceefa | 2015-02-28 11:03:34 -0800 | [diff] [blame] | 13 | "v.io/x/ref/lib/flags" |
Cosmos Nicolaou | a18394e | 2014-09-11 13:18:32 -0700 | [diff] [blame] | 14 | ) |
| 15 | |
| 16 | func 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 Burrows | 4d7b13b | 2015-03-31 18:15:21 -0700 | [diff] [blame] | 24 | if err := ip.Set("172.16"); err == nil || !strings.Contains(err.Error(), "failed to parse 172.16 as an IP address") { |
Cosmos Nicolaou | a18394e | 2014-09-11 13:18:32 -0700 | [diff] [blame] | 25 | t.Errorf("expected error %v", err) |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | func 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 | |
| 42 | func 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 Nicolaou | a025109 | 2014-11-09 22:04:37 -0800 | [diff] [blame] | 50 | {"", flags.IPHostPortFlag{Port: ""}, ""}, |
Cosmos Nicolaou | a18394e | 2014-09-11 13:18:32 -0700 | [diff] [blame] | 51 | {":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 | } |