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