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 | |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 5 | package rt_test |
| 6 | |
| 7 | import ( |
| 8 | "fmt" |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 9 | "io/ioutil" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 10 | "os" |
| 11 | "regexp" |
| 12 | "testing" |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 13 | "time" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 14 | |
Cosmos Nicolaou | 1381f8a | 2015-03-13 09:40:34 -0700 | [diff] [blame] | 15 | "v.io/v23" |
Matt Rosencrantz | 250558f | 2015-03-17 11:37:31 -0700 | [diff] [blame] | 16 | "v.io/v23/context" |
Cosmos Nicolaou | 1381f8a | 2015-03-13 09:40:34 -0700 | [diff] [blame] | 17 | "v.io/v23/security" |
Cosmos Nicolaou | 0e4e392 | 2015-06-10 16:30:09 -0700 | [diff] [blame] | 18 | |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 19 | "v.io/x/ref" |
Cosmos Nicolaou | e9c622d | 2015-07-10 11:09:42 -0700 | [diff] [blame] | 20 | "v.io/x/ref/internal/logger" |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 21 | vsecurity "v.io/x/ref/lib/security" |
Cosmos Nicolaou | 1381f8a | 2015-03-13 09:40:34 -0700 | [diff] [blame] | 22 | "v.io/x/ref/test" |
| 23 | "v.io/x/ref/test/expect" |
| 24 | "v.io/x/ref/test/modules" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 25 | ) |
| 26 | |
Suharsh Sivakumar | d19c95d | 2015-02-19 14:44:50 -0800 | [diff] [blame] | 27 | //go:generate v23 test generate |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 28 | |
| 29 | func TestInit(t *testing.T) { |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 30 | ref.EnvClearCredentials() |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 31 | ctx, shutdown := v23.Init() |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 32 | defer shutdown() |
Matt Rosencrantz | f1c3b44 | 2015-01-12 17:53:08 -0800 | [diff] [blame] | 33 | |
Cosmos Nicolaou | e9c622d | 2015-07-10 11:09:42 -0700 | [diff] [blame] | 34 | mgr := logger.Manager(ctx) |
| 35 | fmt.Println(mgr) |
| 36 | args := fmt.Sprintf("%s", mgr) |
| 37 | expected := regexp.MustCompile("name=vanadium logdirs=\\[/tmp\\] logtostderr=true|false alsologtostderr=false|true max_stack_buf_size=4292608 v=[0-9] stderrthreshold=2 vmodule= vfilepath= log_backtrace_at=:0") |
| 38 | |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 39 | if !expected.MatchString(args) { |
Cosmos Nicolaou | 0e4e392 | 2015-06-10 16:30:09 -0700 | [diff] [blame] | 40 | t.Errorf("unexpected default args: %s, want %s", args, expected) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 41 | } |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 42 | p := v23.GetPrincipal(ctx) |
Asim Shankar | 220a015 | 2014-10-30 21:21:09 -0700 | [diff] [blame] | 43 | if p == nil { |
| 44 | t.Fatalf("A new principal should have been created") |
| 45 | } |
| 46 | if p.BlessingStore() == nil { |
| 47 | t.Fatalf("The principal must have a BlessingStore") |
| 48 | } |
Asim Shankar | 2bf7b1e | 2015-02-27 00:45:12 -0800 | [diff] [blame] | 49 | if p.BlessingStore().Default().IsZero() { |
| 50 | t.Errorf("Principal().BlessingStore().Default() should not be the zero value") |
Asim Shankar | 220a015 | 2014-10-30 21:21:09 -0700 | [diff] [blame] | 51 | } |
Asim Shankar | 2bf7b1e | 2015-02-27 00:45:12 -0800 | [diff] [blame] | 52 | if p.BlessingStore().ForPeer().IsZero() { |
| 53 | t.Errorf("Principal().BlessingStore().ForPeer() should not be the zero value") |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 54 | } |
| 55 | } |
| 56 | |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 57 | var child = modules.Register(func(env *modules.Env, args ...string) error { |
Cosmos Nicolaou | e9c622d | 2015-07-10 11:09:42 -0700 | [diff] [blame] | 58 | ctx, shutdown := test.V23Init() |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 59 | defer shutdown() |
Matt Rosencrantz | 0610a23 | 2014-12-04 10:26:39 -0800 | [diff] [blame] | 60 | |
Cosmos Nicolaou | e9c622d | 2015-07-10 11:09:42 -0700 | [diff] [blame] | 61 | mgr := logger.Manager(ctx) |
| 62 | ctx.Infof("%s\n", mgr) |
| 63 | fmt.Fprintf(env.Stdout, "%s\n", mgr) |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 64 | modules.WaitForEOF(env.Stdin) |
| 65 | fmt.Fprintf(env.Stdout, "done\n") |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 66 | return nil |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 67 | }, "child") |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 68 | |
| 69 | func TestInitArgs(t *testing.T) { |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 70 | sh, err := modules.NewShell(nil, nil, testing.Verbose(), t) |
Cosmos Nicolaou | 344cc4a | 2014-11-26 15:38:43 -0800 | [diff] [blame] | 71 | if err != nil { |
| 72 | t.Fatalf("unexpected error: %s", err) |
| 73 | } |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 74 | defer sh.Cleanup(os.Stderr, os.Stderr) |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 75 | h, err := sh.Start(nil, child, "--logtostderr=true", "--vmodule=*=3", "--", "foobar") |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 76 | if err != nil { |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 77 | t.Fatalf("unexpected error: %s", err) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 78 | } |
Cosmos Nicolaou | 0e4e392 | 2015-06-10 16:30:09 -0700 | [diff] [blame] | 79 | h.Expect(fmt.Sprintf("name=vlog "+ |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 80 | "logdirs=[%s] "+ |
| 81 | "logtostderr=true "+ |
| 82 | "alsologtostderr=true "+ |
| 83 | "max_stack_buf_size=4292608 "+ |
Cosmos Nicolaou | d83b90b | 2014-11-30 15:01:31 -0800 | [diff] [blame] | 84 | "v=0 "+ |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 85 | "stderrthreshold=2 "+ |
Cosmos Nicolaou | d83b90b | 2014-11-30 15:01:31 -0800 | [diff] [blame] | 86 | "vmodule=*=3 "+ |
Cosmos Nicolaou | 616c8e8 | 2015-06-11 15:16:42 -0700 | [diff] [blame] | 87 | "vfilepath= "+ |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 88 | "log_backtrace_at=:0", |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 89 | os.TempDir())) |
| 90 | h.CloseStdin() |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 91 | h.Expect("done") |
| 92 | h.ExpectEOF() |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 93 | h.Shutdown(os.Stderr, os.Stderr) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 94 | } |
Ankur | 7c89059 | 2014-10-02 11:36:28 -0700 | [diff] [blame] | 95 | |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 96 | func validatePrincipal(p security.Principal) error { |
| 97 | if p == nil { |
| 98 | return fmt.Errorf("nil principal") |
Matt Rosencrantz | 0610a23 | 2014-12-04 10:26:39 -0800 | [diff] [blame] | 99 | } |
Ankur | d864681 | 2015-03-12 10:48:41 -0700 | [diff] [blame] | 100 | call := security.NewCall(&security.CallParams{LocalPrincipal: p, RemoteBlessings: p.BlessingStore().Default()}) |
Matt Rosencrantz | 250558f | 2015-03-17 11:37:31 -0700 | [diff] [blame] | 101 | ctx, cancel := context.RootContext() |
| 102 | defer cancel() |
Todd Wang | 4264e4b | 2015-04-16 22:43:40 -0700 | [diff] [blame] | 103 | blessings, rejected := security.RemoteBlessingNames(ctx, call) |
Asim Shankar | 2bf7b1e | 2015-02-27 00:45:12 -0800 | [diff] [blame] | 104 | if n := len(blessings); n != 1 { |
| 105 | return fmt.Errorf("rt.Principal().BlessingStore().Default() return blessings:%v (rejected:%v), want exactly one recognized blessing", blessings, rejected) |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 106 | } |
| 107 | return nil |
| 108 | } |
| 109 | |
| 110 | func defaultBlessing(p security.Principal) string { |
Ankur | d864681 | 2015-03-12 10:48:41 -0700 | [diff] [blame] | 111 | call := security.NewCall(&security.CallParams{LocalPrincipal: p, RemoteBlessings: p.BlessingStore().Default()}) |
Matt Rosencrantz | 250558f | 2015-03-17 11:37:31 -0700 | [diff] [blame] | 112 | ctx, cancel := context.RootContext() |
| 113 | defer cancel() |
Todd Wang | 4264e4b | 2015-04-16 22:43:40 -0700 | [diff] [blame] | 114 | b, _ := security.RemoteBlessingNames(ctx, call) |
Ryan Brown | 41093a9 | 2015-02-10 10:59:14 -0800 | [diff] [blame] | 115 | return b[0] |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 116 | } |
| 117 | |
| 118 | func tmpDir(t *testing.T) string { |
| 119 | dir, err := ioutil.TempDir("", "rt_test_dir") |
| 120 | if err != nil { |
| 121 | t.Fatalf("unexpected error: %s", err) |
| 122 | } |
| 123 | return dir |
| 124 | } |
| 125 | |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 126 | var principal = modules.Register(func(env *modules.Env, args ...string) error { |
Todd Wang | 60052d8 | 2015-05-22 15:00:10 -0700 | [diff] [blame] | 127 | ctx, shutdown := test.V23Init() |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 128 | defer shutdown() |
Matt Rosencrantz | 0610a23 | 2014-12-04 10:26:39 -0800 | [diff] [blame] | 129 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 130 | p := v23.GetPrincipal(ctx) |
Matt Rosencrantz | f1c3b44 | 2015-01-12 17:53:08 -0800 | [diff] [blame] | 131 | if err := validatePrincipal(p); err != nil { |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 132 | return err |
| 133 | } |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 134 | fmt.Fprintf(env.Stdout, "DEFAULT_BLESSING=%s\n", defaultBlessing(p)) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 135 | return nil |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 136 | }, "principal") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 137 | |
| 138 | // Runner runs a principal as a subprocess and reports back with its |
| 139 | // own security info and it's childs. |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 140 | var runner = modules.Register(func(env *modules.Env, args ...string) error { |
Todd Wang | 60052d8 | 2015-05-22 15:00:10 -0700 | [diff] [blame] | 141 | ctx, shutdown := test.V23Init() |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 142 | defer shutdown() |
| 143 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 144 | p := v23.GetPrincipal(ctx) |
Matt Rosencrantz | f1c3b44 | 2015-01-12 17:53:08 -0800 | [diff] [blame] | 145 | if err := validatePrincipal(p); err != nil { |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 146 | return err |
Ankur | 7c89059 | 2014-10-02 11:36:28 -0700 | [diff] [blame] | 147 | } |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 148 | fmt.Fprintf(env.Stdout, "RUNNER_DEFAULT_BLESSING=%v\n", defaultBlessing(p)) |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 149 | sh, err := modules.NewShell(ctx, p, false, nil) |
Cosmos Nicolaou | 344cc4a | 2014-11-26 15:38:43 -0800 | [diff] [blame] | 150 | if err != nil { |
| 151 | return err |
| 152 | } |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 153 | if _, err := sh.Start(nil, principal, args...); err != nil { |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 154 | return err |
| 155 | } |
Suharsh Sivakumar | d02ac22 | 2014-11-18 14:02:15 -0800 | [diff] [blame] | 156 | // Cleanup copies the output of sh to these Writers. |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 157 | sh.Cleanup(env.Stdout, env.Stderr) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 158 | return nil |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 159 | }, "runner") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 160 | |
Suharsh Sivakumar | 4d36f81 | 2015-01-15 13:58:00 -0800 | [diff] [blame] | 161 | func createCredentialsInDir(t *testing.T, dir string, blessing string) { |
| 162 | principal, err := vsecurity.CreatePersistentPrincipal(dir, nil) |
| 163 | if err != nil { |
| 164 | t.Fatalf("unexpected error: %s", err) |
| 165 | } |
| 166 | if err := vsecurity.InitDefaultBlessings(principal, blessing); err != nil { |
| 167 | t.Fatalf("unexpected error: %s", err) |
| 168 | } |
| 169 | } |
| 170 | |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 171 | func TestPrincipalInheritance(t *testing.T) { |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 172 | sh, err := modules.NewShell(nil, nil, testing.Verbose(), t) |
Cosmos Nicolaou | 344cc4a | 2014-11-26 15:38:43 -0800 | [diff] [blame] | 173 | if err != nil { |
| 174 | t.Fatalf("unexpected error: %s", err) |
| 175 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 176 | defer func() { |
| 177 | sh.Cleanup(os.Stdout, os.Stderr) |
| 178 | }() |
| 179 | |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 180 | // Test that the child inherits from the parent's credentials correctly. |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 181 | // The running test process may or may not have a credentials directory set |
| 182 | // up so we have to use a 'runner' process to ensure the correct setup. |
| 183 | cdir := tmpDir(t) |
| 184 | defer os.RemoveAll(cdir) |
| 185 | |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 186 | createCredentialsInDir(t, cdir, "test") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 187 | |
| 188 | // directory supplied by the environment. |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 189 | credEnv := []string{ref.EnvCredentials + "=" + cdir} |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 190 | |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 191 | h, err := sh.Start(credEnv, runner) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 192 | if err != nil { |
| 193 | t.Fatalf("unexpected error: %s", err) |
| 194 | } |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 195 | |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 196 | runnerBlessing := h.ExpectVar("RUNNER_DEFAULT_BLESSING") |
| 197 | principalBlessing := h.ExpectVar("DEFAULT_BLESSING") |
| 198 | if err := h.Error(); err != nil { |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 199 | t.Fatalf("failed to read input from children: %s", err) |
| 200 | } |
| 201 | h.Shutdown(os.Stdout, os.Stderr) |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 202 | |
| 203 | wantRunnerBlessing := "test" |
| 204 | wantPrincipalBlessing := "test/child" |
| 205 | if runnerBlessing != wantRunnerBlessing || principalBlessing != wantPrincipalBlessing { |
| 206 | t.Fatalf("unexpected default blessing: got runner %s, principal %s, want runner %s, principal %s", runnerBlessing, principalBlessing, wantRunnerBlessing, wantPrincipalBlessing) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 207 | } |
| 208 | |
| 209 | } |
| 210 | |
| 211 | func TestPrincipalInit(t *testing.T) { |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 212 | // Collect the process' public key and error status |
| 213 | collect := func(sh *modules.Shell, env []string, args ...string) string { |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 214 | h, err := sh.Start(env, principal, args...) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 215 | if err != nil { |
| 216 | t.Fatalf("unexpected error: %s", err) |
| 217 | } |
| 218 | s := expect.NewSession(t, h.Stdout(), time.Minute) |
| 219 | s.SetVerbosity(testing.Verbose()) |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 220 | return s.ExpectVar("DEFAULT_BLESSING") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 221 | } |
| 222 | |
| 223 | // A credentials directory may, or may, not have been already specified. |
| 224 | // Either way, we want to use our own, so we set it aside and use our own. |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 225 | origCredentialsDir := os.Getenv(ref.EnvCredentials) |
| 226 | defer os.Setenv(ref.EnvCredentials, origCredentialsDir) |
| 227 | if err := os.Setenv(ref.EnvCredentials, ""); err != nil { |
Ankur | 7c89059 | 2014-10-02 11:36:28 -0700 | [diff] [blame] | 228 | t.Fatal(err) |
| 229 | } |
| 230 | |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 231 | // We create two shells -- one initializing the principal for a child process |
| 232 | // via a credentials directory and the other via an agent. |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 233 | sh, err := modules.NewShell(nil, nil, testing.Verbose(), t) |
Cosmos Nicolaou | 344cc4a | 2014-11-26 15:38:43 -0800 | [diff] [blame] | 234 | if err != nil { |
| 235 | t.Fatalf("unexpected error: %s", err) |
| 236 | } |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 237 | defer sh.Cleanup(os.Stderr, os.Stderr) |
| 238 | |
Todd Wang | 60052d8 | 2015-05-22 15:00:10 -0700 | [diff] [blame] | 239 | ctx, shutdown := test.V23Init() |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 240 | defer shutdown() |
| 241 | |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 242 | agentSh, err := modules.NewShell(ctx, v23.GetPrincipal(ctx), testing.Verbose(), t) |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 243 | if err != nil { |
| 244 | t.Fatalf("unexpected error: %s", err) |
| 245 | } |
| 246 | defer agentSh.Cleanup(os.Stderr, os.Stderr) |
| 247 | |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 248 | // Test that with ref.EnvCredentials unset the runtime's Principal |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 249 | // is correctly initialized for both shells. |
| 250 | if len(collect(sh, nil)) == 0 { |
| 251 | t.Fatalf("Without agent: child returned an empty default blessings set") |
| 252 | } |
Cosmos Nicolaou | a18a1eb | 2015-03-12 13:15:01 -0700 | [diff] [blame] | 253 | if got, want := collect(agentSh, nil), test.TestBlessing+security.ChainSeparator+"child"; got != want { |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 254 | t.Fatalf("With agent: got %q, want %q", got, want) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 255 | } |
| 256 | |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 257 | // Test that credentials specified via the ref.EnvCredentials |
Asim Shankar | 59b8b69 | 2015-03-30 01:23:36 -0700 | [diff] [blame] | 258 | // environment variable take precedence over an agent. |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 259 | cdir1 := tmpDir(t) |
| 260 | defer os.RemoveAll(cdir1) |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 261 | createCredentialsInDir(t, cdir1, "test_env") |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 262 | credEnv := []string{ref.EnvCredentials + "=" + cdir1} |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 263 | |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 264 | if got, want := collect(sh, credEnv), "test_env"; got != want { |
| 265 | t.Errorf("Without agent: got default blessings: %q, want %q", got, want) |
| 266 | } |
| 267 | if got, want := collect(agentSh, credEnv), "test_env"; got != want { |
| 268 | t.Errorf("With agent: got default blessings: %q, want %q", got, want) |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 269 | } |
| 270 | |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 271 | // Test that credentials specified via the command line take precedence over the |
Todd Wang | 8123b5e | 2015-05-14 18:44:43 -0700 | [diff] [blame] | 272 | // ref.EnvCredentials environment variable and also the agent. |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 273 | cdir2 := tmpDir(t) |
| 274 | defer os.RemoveAll(cdir2) |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 275 | createCredentialsInDir(t, cdir2, "test_cmd") |
Cosmos Nicolaou | e5b4150 | 2014-10-29 22:55:09 -0700 | [diff] [blame] | 276 | |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 277 | if got, want := collect(sh, credEnv, "--v23.credentials="+cdir2), "test_cmd"; got != want { |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 278 | t.Errorf("Without agent: got %q, want %q", got, want) |
| 279 | } |
Asim Shankar | f32d24d | 2015-04-01 16:34:26 -0700 | [diff] [blame] | 280 | if got, want := collect(agentSh, credEnv, "--v23.credentials="+cdir2), "test_cmd"; got != want { |
Ankur | a4b7c4a | 2015-02-02 11:41:24 -0800 | [diff] [blame] | 281 | t.Errorf("With agent: got %q, want %q", got, want) |
Ankur | 7c89059 | 2014-10-02 11:36:28 -0700 | [diff] [blame] | 282 | } |
| 283 | } |