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 | bdc917c | 2014-10-24 12:41:47 -0700 | [diff] [blame] | 5 | package flags_test |
| 6 | |
| 7 | import ( |
| 8 | "flag" |
Cosmos Nicolaou | 4e213d7 | 2014-10-26 22:21:52 -0700 | [diff] [blame] | 9 | "io/ioutil" |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 10 | "os" |
| 11 | "reflect" |
Cosmos Nicolaou | bdc917c | 2014-10-24 12:41:47 -0700 | [diff] [blame] | 12 | "testing" |
| 13 | |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 14 | "v.io/x/ref" |
Jiri Simsa | ffceefa | 2015-02-28 11:03:34 -0800 | [diff] [blame] | 15 | "v.io/x/ref/lib/flags" |
Cosmos Nicolaou | bdc917c | 2014-10-24 12:41:47 -0700 | [diff] [blame] | 16 | ) |
| 17 | |
| 18 | func TestFlags(t *testing.T) { |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 19 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
| 20 | if flags.CreateAndRegister(fs) != nil { |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 21 | t.Fatalf("should have returned a nil value") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 22 | } |
| 23 | fl := flags.CreateAndRegister(fs, flags.Runtime) |
| 24 | if fl == nil { |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 25 | t.Errorf("should have succeeded") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 26 | } |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 27 | creds := "creddir" |
| 28 | roots := []string{"ab:cd:ef"} |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 29 | args := []string{"--v23.credentials=" + creds, "--v23.namespace.root=" + roots[0]} |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 30 | fl.Parse(args, nil) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 31 | rtf := fl.RuntimeFlags() |
| 32 | if got, want := rtf.NamespaceRoots, roots; !reflect.DeepEqual(got, want) { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 33 | t.Errorf("got %v, want %v", got, want) |
Cosmos Nicolaou | bdc917c | 2014-10-24 12:41:47 -0700 | [diff] [blame] | 34 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 35 | if got, want := rtf.Credentials, creds; !reflect.DeepEqual(got, want) { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 36 | t.Errorf("got %v, want %v", got, want) |
Cosmos Nicolaou | bdc917c | 2014-10-24 12:41:47 -0700 | [diff] [blame] | 37 | } |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 38 | if got, want := fl.HasGroup(flags.Listen), false; got != want { |
| 39 | t.Errorf("got %t, want %t", got, want) |
| 40 | } |
| 41 | // Make sure we have a deep copy. |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 42 | rtf.NamespaceRoots[0] = "oooh" |
| 43 | rtf = fl.RuntimeFlags() |
| 44 | if got, want := rtf.NamespaceRoots, roots; !reflect.DeepEqual(got, want) { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 45 | t.Errorf("got %v, want %v", got, want) |
Cosmos Nicolaou | 4e213d7 | 2014-10-26 22:21:52 -0700 | [diff] [blame] | 46 | } |
| 47 | } |
| 48 | |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 49 | func TestPermissionsFlags(t *testing.T) { |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 50 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 51 | fl := flags.CreateAndRegister(fs, flags.Runtime, flags.Permissions) |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 52 | args := []string{"--v23.permissions.file=runtime:foo.json", "--v23.permissions.file=bar:bar.json", "--v23.permissions.file=baz:bar:baz.json"} |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 53 | fl.Parse(args, nil) |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 54 | permsf := fl.PermissionsFlags() |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 55 | |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 56 | if got, want := permsf.PermissionsFile("runtime"), "foo.json"; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 57 | t.Errorf("got %q, want %q", got, want) |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 58 | } |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 59 | if got, want := permsf.PermissionsFile("bar"), "bar.json"; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 60 | t.Errorf("got %q, want %q", got, want) |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 61 | } |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 62 | if got, want := permsf.PermissionsFile("wombat"), ""; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 63 | t.Errorf("got %q, want %q", got, want) |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 64 | } |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 65 | if got, want := permsf.PermissionsFile("baz"), "bar:baz.json"; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 66 | t.Errorf("got %q, want %q", got, want) |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 67 | } |
| 68 | } |
| 69 | |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 70 | func TestPermissionsLiteralFlags(t *testing.T) { |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 71 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 72 | fl := flags.CreateAndRegister(fs, flags.Runtime, flags.Permissions) |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 73 | args := []string{"--v23.permissions.literal=hedgehog"} |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 74 | fl.Parse(args, nil) |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 75 | permsf := fl.PermissionsFlags() |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 76 | |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 77 | if got, want := permsf.PermissionsFile("runtime"), ""; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 78 | t.Errorf("got %q, want %q", got, want) |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 79 | } |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 80 | if got, want := permsf.PermissionsLiteral(), "hedgehog"; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 81 | t.Errorf("got %q, want %q", got, want) |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 82 | } |
| 83 | } |
| 84 | |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 85 | func TestPermissionsLiteralBoth(t *testing.T) { |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 86 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 87 | fl := flags.CreateAndRegister(fs, flags.Runtime, flags.Permissions) |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 88 | args := []string{"--v23.permissions.file=runtime:foo.json", "--v23.permissions.literal=hedgehog"} |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 89 | fl.Parse(args, nil) |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 90 | permsf := fl.PermissionsFlags() |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 91 | |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 92 | if got, want := permsf.PermissionsFile("runtime"), "foo.json"; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 93 | t.Errorf("got %q, want %q", got, want) |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 94 | } |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 95 | if got, want := permsf.PermissionsLiteral(), "hedgehog"; got != want { |
Asim Shankar | a036a0f | 2015-05-08 11:22:54 -0700 | [diff] [blame] | 96 | t.Errorf("got %q, want %q", got, want) |
Robert Kroeger | 5096c4b | 2014-12-10 15:08:45 -0800 | [diff] [blame] | 97 | } |
| 98 | } |
| 99 | |
Cosmos Nicolaou | 4e213d7 | 2014-10-26 22:21:52 -0700 | [diff] [blame] | 100 | func TestFlagError(t *testing.T) { |
| 101 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
| 102 | fs.SetOutput(ioutil.Discard) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 103 | fl := flags.CreateAndRegister(fs, flags.Runtime) |
Cosmos Nicolaou | 4e213d7 | 2014-10-26 22:21:52 -0700 | [diff] [blame] | 104 | addr := "192.168.10.1:0" |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 105 | args := []string{"--xxxv23.tcp.address=" + addr, "not an arg"} |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 106 | err := fl.Parse(args, nil) |
Cosmos Nicolaou | 4e213d7 | 2014-10-26 22:21:52 -0700 | [diff] [blame] | 107 | if err == nil { |
| 108 | t.Fatalf("expected this to fail!") |
| 109 | } |
| 110 | if got, want := len(fl.Args()), 1; got != want { |
| 111 | t.Errorf("got %d, want %d [args: %v]", got, want, fl.Args()) |
| 112 | } |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 113 | |
| 114 | fs = flag.NewFlagSet("test", flag.ContinueOnError) |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 115 | fl = flags.CreateAndRegister(fs, flags.Permissions) |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 116 | args = []string{"--v23.permissions.file=noname"} |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 117 | err = fl.Parse(args, nil) |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 118 | if err == nil { |
| 119 | t.Fatalf("expected this to fail!") |
| 120 | } |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 121 | } |
| 122 | |
| 123 | func TestFlagsGroups(t *testing.T) { |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 124 | fl := flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Runtime, flags.Listen) |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 125 | if got, want := fl.HasGroup(flags.Listen), true; got != want { |
| 126 | t.Errorf("got %t, want %t", got, want) |
| 127 | } |
| 128 | addr := "192.168.10.1:0" |
| 129 | roots := []string{"ab:cd:ef"} |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 130 | args := []string{"--v23.tcp.address=" + addr, "--v23.namespace.root=" + roots[0]} |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 131 | fl.Parse(args, nil) |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 132 | lf := fl.ListenFlags() |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 133 | if got, want := fl.RuntimeFlags().NamespaceRoots, roots; !reflect.DeepEqual(got, want) { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 134 | t.Errorf("got %v, want %v", got, want) |
| 135 | } |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 136 | if got, want := lf.Addrs[0].Address, addr; got != want { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 137 | t.Errorf("got %q, want %q", got, want) |
| 138 | } |
| 139 | } |
| 140 | |
Asim Shankar | 95910b6 | 2014-10-31 22:02:29 -0700 | [diff] [blame] | 141 | const ( |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 142 | rootEnvVar = ref.EnvNamespacePrefix |
| 143 | rootEnvVar0 = ref.EnvNamespacePrefix + "0" |
Asim Shankar | 95910b6 | 2014-10-31 22:02:29 -0700 | [diff] [blame] | 144 | ) |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 145 | |
| 146 | func TestEnvVars(t *testing.T) { |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 147 | oldcreds := os.Getenv(ref.EnvCredentials) |
| 148 | defer os.Setenv(ref.EnvCredentials, oldcreds) |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 149 | |
| 150 | oldroot := os.Getenv(rootEnvVar) |
| 151 | oldroot0 := os.Getenv(rootEnvVar0) |
| 152 | defer os.Setenv(rootEnvVar, oldroot) |
| 153 | defer os.Setenv(rootEnvVar0, oldroot0) |
| 154 | |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 155 | os.Setenv(ref.EnvCredentials, "bar") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 156 | fl := flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Runtime) |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 157 | if err := fl.Parse([]string{}, nil); err != nil { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 158 | t.Fatalf("unexpected error: %s", err) |
| 159 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 160 | rtf := fl.RuntimeFlags() |
| 161 | if got, want := rtf.Credentials, "bar"; got != want { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 162 | t.Errorf("got %q, want %q", got, want) |
| 163 | } |
| 164 | |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 165 | if err := fl.Parse([]string{"--v23.credentials=baz"}, nil); err != nil { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 166 | t.Fatalf("unexpected error: %s", err) |
| 167 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 168 | rtf = fl.RuntimeFlags() |
| 169 | if got, want := rtf.Credentials, "baz"; got != want { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 170 | t.Errorf("got %q, want %q", got, want) |
| 171 | } |
| 172 | |
| 173 | os.Setenv(rootEnvVar, "a:1") |
| 174 | os.Setenv(rootEnvVar0, "a:2") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 175 | fl = flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Runtime) |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 176 | if err := fl.Parse([]string{}, nil); err != nil { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 177 | t.Fatalf("unexpected error: %s", err) |
| 178 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 179 | rtf = fl.RuntimeFlags() |
| 180 | if got, want := rtf.NamespaceRoots, []string{"a:1", "a:2"}; !reflect.DeepEqual(got, want) { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 181 | t.Errorf("got %q, want %q", got, want) |
| 182 | } |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 183 | if err := fl.Parse([]string{"--v23.namespace.root=b:1", "--v23.namespace.root=b:2", "--v23.namespace.root=b:3", "--v23.credentials=b:4"}, nil); err != nil { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 184 | t.Fatalf("unexpected error: %s", err) |
| 185 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 186 | rtf = fl.RuntimeFlags() |
| 187 | if got, want := rtf.NamespaceRoots, []string{"b:1", "b:2", "b:3"}; !reflect.DeepEqual(got, want) { |
Cosmos Nicolaou | d811b07 | 2014-10-28 17:46:27 -0700 | [diff] [blame] | 188 | t.Errorf("got %q, want %q", got, want) |
| 189 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 190 | if got, want := rtf.Credentials, "b:4"; got != want { |
| 191 | t.Errorf("got %q, want %q", got, want) |
| 192 | } |
Cosmos Nicolaou | bdc917c | 2014-10-24 12:41:47 -0700 | [diff] [blame] | 193 | } |
Cosmos Nicolaou | 9896004 | 2014-10-31 00:05:51 -0700 | [diff] [blame] | 194 | |
| 195 | func TestDefaults(t *testing.T) { |
| 196 | oldroot := os.Getenv(rootEnvVar) |
| 197 | oldroot0 := os.Getenv(rootEnvVar0) |
| 198 | defer os.Setenv(rootEnvVar, oldroot) |
| 199 | defer os.Setenv(rootEnvVar0, oldroot0) |
| 200 | |
| 201 | os.Setenv(rootEnvVar, "") |
| 202 | os.Setenv(rootEnvVar0, "") |
| 203 | |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 204 | fl := flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Runtime, flags.Permissions) |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 205 | if err := fl.Parse([]string{}, nil); err != nil { |
Cosmos Nicolaou | 9896004 | 2014-10-31 00:05:51 -0700 | [diff] [blame] | 206 | t.Fatalf("unexpected error: %s", err) |
| 207 | } |
| 208 | rtf := fl.RuntimeFlags() |
Asim Shankar | 8196c1e | 2015-04-08 22:42:18 -0700 | [diff] [blame] | 209 | if got, want := rtf.NamespaceRoots, []string{"/(dev.v.io/role/vprod/service/mounttabled)@ns.dev.v.io:8101"}; !reflect.DeepEqual(got, want) { |
Cosmos Nicolaou | 9896004 | 2014-10-31 00:05:51 -0700 | [diff] [blame] | 210 | t.Errorf("got %q, want %q", got, want) |
| 211 | } |
Adam Sadovsky | a4d4a69 | 2015-04-20 11:36:49 -0700 | [diff] [blame] | 212 | permsf := fl.PermissionsFlags() |
| 213 | if got, want := permsf.PermissionsFile(""), ""; got != want { |
Cosmos Nicolaou | 7823737 | 2014-11-04 18:19:09 -0800 | [diff] [blame] | 214 | t.Errorf("got %q, want %q", got, want) |
| 215 | } |
Cosmos Nicolaou | 9896004 | 2014-10-31 00:05:51 -0700 | [diff] [blame] | 216 | } |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 217 | |
| 218 | func TestListenFlags(t *testing.T) { |
| 219 | fl := flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Listen) |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 220 | if err := fl.Parse([]string{}, nil); err != nil { |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 221 | t.Fatalf("unexpected error: %s", err) |
| 222 | } |
| 223 | lf := fl.ListenFlags() |
| 224 | if got, want := len(lf.Addrs), 1; got != want { |
| 225 | t.Errorf("got %d, want %d", got, want) |
| 226 | } |
Nicolas LaCasse | 29d1d3a | 2015-01-22 10:48:18 -0800 | [diff] [blame] | 227 | |
| 228 | // Test the default protocol and address is "wsh" and ":0". |
| 229 | def := struct{ Protocol, Address string }{"wsh", ":0"} |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 230 | if got, want := lf.Addrs[0], def; !reflect.DeepEqual(got, want) { |
| 231 | t.Errorf("got %v, want %v", got, want) |
| 232 | } |
| 233 | |
| 234 | fl = flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Listen) |
| 235 | if err := fl.Parse([]string{ |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 236 | "--v23.tcp.address=172.0.0.1:10", // Will default to protocol "wsh". |
| 237 | "--v23.tcp.protocol=tcp", "--v23.tcp.address=127.0.0.10:34", |
| 238 | "--v23.tcp.protocol=ws4", "--v23.tcp.address=127.0.0.10:44", |
| 239 | "--v23.tcp.protocol=tcp6", "--v23.tcp.address=172.0.0.100:100"}, nil); err != nil { |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 240 | t.Fatalf("unexpected error: %s", err) |
| 241 | } |
| 242 | lf = fl.ListenFlags() |
Nicolas LaCasse | 29d1d3a | 2015-01-22 10:48:18 -0800 | [diff] [blame] | 243 | if got, want := len(lf.Addrs), 4; got != want { |
Cosmos Nicolaou | 036c30c | 2015-03-24 10:05:20 -0700 | [diff] [blame] | 244 | t.Fatalf("got %d, want %d", got, want) |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 245 | } |
Nicolas LaCasse | 29d1d3a | 2015-01-22 10:48:18 -0800 | [diff] [blame] | 246 | for i, p := range []string{"wsh", "tcp", "ws4", "tcp6"} { |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 247 | if got, want := lf.Addrs[i].Protocol, p; got != want { |
| 248 | t.Errorf("got %q, want %q", got, want) |
| 249 | } |
| 250 | } |
Nicolas LaCasse | 29d1d3a | 2015-01-22 10:48:18 -0800 | [diff] [blame] | 251 | for i, p := range []string{"172.0.0.1:10", "127.0.0.10:34", "127.0.0.10:44", "172.0.0.100:100"} { |
Cosmos Nicolaou | ae8dd21 | 2014-12-13 23:43:08 -0800 | [diff] [blame] | 252 | if got, want := lf.Addrs[i].Address, p; got != want { |
| 253 | t.Errorf("got %q, want %q", got, want) |
| 254 | } |
| 255 | } |
| 256 | } |
Cosmos Nicolaou | 96fa917 | 2014-12-16 12:57:18 -0800 | [diff] [blame] | 257 | |
| 258 | func TestDuplicateFlags(t *testing.T) { |
| 259 | fl := flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Listen) |
| 260 | if err := fl.Parse([]string{ |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 261 | "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=172.0.0.1:34", |
| 262 | "--v23.tcp.protocol=tcp", "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=172.0.0.1:34", |
| 263 | "--v23.tcp.protocol=ws", "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=172.0.0.1:34", "--v23.tcp.address=172.0.0.1:34"}, nil); err != nil { |
Cosmos Nicolaou | 96fa917 | 2014-12-16 12:57:18 -0800 | [diff] [blame] | 264 | t.Fatalf("unexpected error: %s", err) |
| 265 | } |
| 266 | lf := fl.ListenFlags() |
Nicolas LaCasse | 29d1d3a | 2015-01-22 10:48:18 -0800 | [diff] [blame] | 267 | if got, want := len(lf.Addrs), 6; got != want { |
Cosmos Nicolaou | 96fa917 | 2014-12-16 12:57:18 -0800 | [diff] [blame] | 268 | t.Errorf("got %d, want %d", got, want) |
| 269 | } |
| 270 | expected := flags.ListenAddrs{ |
Nicolas LaCasse | 29d1d3a | 2015-01-22 10:48:18 -0800 | [diff] [blame] | 271 | {"wsh", "172.0.0.1:10"}, |
| 272 | {"wsh", "172.0.0.1:34"}, |
Cosmos Nicolaou | 96fa917 | 2014-12-16 12:57:18 -0800 | [diff] [blame] | 273 | {"tcp", "172.0.0.1:10"}, |
| 274 | {"tcp", "172.0.0.1:34"}, |
| 275 | {"ws", "172.0.0.1:10"}, |
| 276 | {"ws", "172.0.0.1:34"}, |
| 277 | } |
| 278 | if got, want := lf.Addrs, expected; !reflect.DeepEqual(got, want) { |
| 279 | t.Fatalf("got %#v, want %#v", got, want) |
| 280 | } |
| 281 | if err := fl.Parse([]string{ |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 282 | "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=172.0.0.1:34", |
| 283 | "--v23.tcp.protocol=tcp", "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=127.0.0.1:34", "--v23.tcp.address=127.0.0.1:34", |
| 284 | "--v23.tcp.protocol=ws", "--v23.tcp.address=172.0.0.1:10", "--v23.tcp.address=127.0.0.1:34", "--v23.tcp.address=127.0.0.1:34"}, nil); err != nil { |
Cosmos Nicolaou | 96fa917 | 2014-12-16 12:57:18 -0800 | [diff] [blame] | 285 | t.Fatalf("unexpected error: %s", err) |
| 286 | } |
Nicolas LaCasse | 29d1d3a | 2015-01-22 10:48:18 -0800 | [diff] [blame] | 287 | if got, want := len(lf.Addrs), 6; got != want { |
Cosmos Nicolaou | 96fa917 | 2014-12-16 12:57:18 -0800 | [diff] [blame] | 288 | t.Errorf("got %d, want %d", got, want) |
| 289 | } |
| 290 | if got, want := lf.Addrs, expected; !reflect.DeepEqual(got, want) { |
| 291 | t.Fatalf("got %#v, want %#v", got, want) |
| 292 | } |
| 293 | |
| 294 | fl = flags.CreateAndRegister(flag.NewFlagSet("test", flag.ContinueOnError), flags.Runtime) |
| 295 | |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 296 | if err := fl.Parse([]string{"--v23.namespace.root=ab", "--v23.namespace.root=xy", "--v23.namespace.root=ab"}, nil); err != nil { |
Cosmos Nicolaou | 96fa917 | 2014-12-16 12:57:18 -0800 | [diff] [blame] | 297 | t.Fatalf("unexpected error: %s", err) |
| 298 | } |
| 299 | |
| 300 | rf := fl.RuntimeFlags() |
| 301 | if got, want := len(rf.NamespaceRoots), 2; got != want { |
| 302 | t.Errorf("got %d, want %d", got, want) |
| 303 | } |
| 304 | if got, want := rf.NamespaceRoots, []string{"ab", "xy"}; !reflect.DeepEqual(got, want) { |
| 305 | t.Fatalf("got %#v, want %#v", got, want) |
| 306 | } |
| 307 | } |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 308 | |
| 309 | func TestConfig(t *testing.T) { |
| 310 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
| 311 | var testFlag1, testFlag2 string |
| 312 | fs.StringVar(&testFlag1, "test_flag1", "default1", "") |
| 313 | fs.StringVar(&testFlag2, "test_flag2", "default2", "") |
| 314 | fl := flags.CreateAndRegister(fs, flags.Runtime) |
| 315 | args := []string{ |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 316 | "--v23.namespace.root=argRoot1", |
| 317 | "--v23.namespace.root=argRoot2", |
| 318 | "--v23.vtrace.cache-size=1234", |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 319 | } |
| 320 | config := map[string]string{ |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 321 | "v23.namespace.root": "configRoot", |
| 322 | "v23.credentials": "configCreds", |
| 323 | "v23.vtrace.cache-size": "4321", |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 324 | "test_flag1": "test value", |
| 325 | "flag.that.does.not.exist": "some value", |
| 326 | } |
| 327 | if err := fl.Parse(args, config); err != nil { |
| 328 | t.Errorf("Parse(%v, %v) failed: %v", args, config, err) |
| 329 | } |
| 330 | rtf := fl.RuntimeFlags() |
| 331 | if got, want := rtf.NamespaceRoots, []string{"argRoot1", "argRoot2", "configRoot"}; !reflect.DeepEqual(got, want) { |
| 332 | t.Errorf("Namespace roots: got %v, want %v", got, want) |
| 333 | } |
| 334 | if got, want := rtf.Credentials, "configCreds"; got != want { |
| 335 | t.Errorf("Credentials: got %v, want %v", got, want) |
| 336 | } |
| 337 | if got, want := testFlag1, "test value"; got != want { |
| 338 | t.Errorf("Test flag 1: got %v, want %v", got, want) |
| 339 | } |
| 340 | if got, want := testFlag2, "default2"; got != want { |
| 341 | t.Errorf("Test flag 2: got %v, want %v", got, want) |
| 342 | } |
| 343 | if got, want := rtf.Vtrace.CacheSize, 4321; got != want { |
| 344 | t.Errorf("Test flag 2: got %v, want %v", got, want) |
| 345 | } |
| 346 | } |
Cosmos Nicolaou | 036c30c | 2015-03-24 10:05:20 -0700 | [diff] [blame] | 347 | |
| 348 | func TestRefreshDefaults(t *testing.T) { |
Asim Shankar | 8196c1e | 2015-04-08 22:42:18 -0700 | [diff] [blame] | 349 | orig := flags.DefaultNamespaceRoot() |
| 350 | defer flags.SetDefaultNamespaceRoot(orig) |
Cosmos Nicolaou | 036c30c | 2015-03-24 10:05:20 -0700 | [diff] [blame] | 351 | defer flags.SetDefaultHostPort(":0") |
| 352 | defer flags.SetDefaultProtocol("wsh") |
| 353 | |
| 354 | nsRoot := "/127.0.0.1:8101" |
| 355 | hostPort := "128.0.0.1:11" |
| 356 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
| 357 | fl := flags.CreateAndRegister(fs, flags.Runtime, flags.Listen) |
| 358 | // It's possible to set defaults after CreateAndRegister, but before Parse. |
| 359 | flags.SetDefaultNamespaceRoot(nsRoot) |
| 360 | flags.SetDefaultHostPort(hostPort) |
| 361 | flags.SetDefaultProtocol("tcp6") |
| 362 | fl.Parse([]string{}, nil) |
| 363 | rtf := fl.RuntimeFlags() |
| 364 | if got, want := rtf.NamespaceRoots, []string{nsRoot}; !reflect.DeepEqual(got, want) { |
| 365 | t.Errorf("got %v, want %v", got, want) |
| 366 | } |
| 367 | lf := fl.ListenFlags() |
| 368 | want := flags.ListenAddrs{struct{ Protocol, Address string }{"tcp6", hostPort}} |
| 369 | if got := lf.Addrs; !reflect.DeepEqual(got, want) { |
| 370 | t.Errorf("got %v, want %v", got, want) |
| 371 | } |
| 372 | changed := "/128.1.1.1:1" |
| 373 | flags.SetDefaultNamespaceRoot(changed) |
| 374 | fl.Parse([]string{}, nil) |
| 375 | rtf = fl.RuntimeFlags() |
| 376 | if got, want := rtf.NamespaceRoots, []string{changed}; !reflect.DeepEqual(got, want) { |
| 377 | t.Errorf("got %v, want %v", got, want) |
| 378 | } |
| 379 | } |
| 380 | |
| 381 | func TestRefreshAlreadySetDefaults(t *testing.T) { |
Asim Shankar | 8196c1e | 2015-04-08 22:42:18 -0700 | [diff] [blame] | 382 | orig := flags.DefaultNamespaceRoot() |
| 383 | defer flags.SetDefaultNamespaceRoot(orig) |
Cosmos Nicolaou | 036c30c | 2015-03-24 10:05:20 -0700 | [diff] [blame] | 384 | defer flags.SetDefaultHostPort(":0") |
| 385 | defer flags.SetDefaultProtocol("wsh") |
| 386 | |
| 387 | fs := flag.NewFlagSet("test", flag.ContinueOnError) |
| 388 | fl := flags.CreateAndRegister(fs, flags.Runtime, flags.Listen) |
| 389 | nsRoot := "/127.0.1.1:10" |
| 390 | hostPort := "127.0.0.1:10" |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 391 | fl.Parse([]string{"--v23.namespace.root", nsRoot, "--v23.tcp.address", hostPort}, nil) |
Cosmos Nicolaou | 036c30c | 2015-03-24 10:05:20 -0700 | [diff] [blame] | 392 | rtf := fl.RuntimeFlags() |
| 393 | if got, want := rtf.NamespaceRoots, []string{nsRoot}; !reflect.DeepEqual(got, want) { |
| 394 | t.Errorf("got %v, want %v", got, want) |
| 395 | } |
| 396 | flags.SetDefaultNamespaceRoot("/128.1.1.1:2") |
| 397 | flags.SetDefaultHostPort("128.0.0.1:11") |
| 398 | fl.Parse([]string{}, nil) |
| 399 | rtf = fl.RuntimeFlags() |
| 400 | if got, want := rtf.NamespaceRoots, []string{nsRoot}; !reflect.DeepEqual(got, want) { |
| 401 | t.Errorf("got %v, want %v", got, want) |
| 402 | } |
| 403 | lf := fl.ListenFlags() |
| 404 | want := flags.ListenAddrs{struct{ Protocol, Address string }{"wsh", hostPort}} |
| 405 | if got := lf.Addrs; !reflect.DeepEqual(got, want) { |
| 406 | t.Errorf("got %v, want %v", got, want) |
| 407 | } |
| 408 | } |