blob: e912f02025e57ffe241f2c3b49ebaf61ffc5f879 [file] [log] [blame]
Robert Kroegerdd07b362014-09-18 17:34:42 -07001package impl
2
3import (
4 "flag"
5 "fmt"
6 "reflect"
7 "testing"
8)
9
10func TestParseArguments(t *testing.T) {
11 cases := []struct {
12 cmdline []string
13 env []string
14 err error
15 expected WorkParameters
16 }{
17
18 {
19 []string{"setuidhelper"},
20 []string{},
21 fmt.Errorf("--username missing"),
22 WorkParameters{},
23 },
24
25 {
Robert Kroegerda977d72014-09-22 10:48:51 -070026 []string{"setuidhelper", "--minuid", "1", "--username", testUserName},
Robert Kroegerdd07b362014-09-18 17:34:42 -070027 []string{"A=B"},
28 nil,
29 WorkParameters{
Robert Kroegerda977d72014-09-22 10:48:51 -070030 uid: testUid,
31 gid: testGid,
Robert Kroegerdd07b362014-09-18 17:34:42 -070032 workspace: "",
33 stderrLog: "",
34 stdoutLog: "",
35 argv0: "",
36 argv: []string{},
37 envv: []string{"A=B"},
38 },
39 },
40
41 {
Robert Kroegerda977d72014-09-22 10:48:51 -070042 []string{"setuidhelper", "--minuid", "1", "--username", testUserName, "--workspace", "/hello",
Robert Kroegerdd07b362014-09-18 17:34:42 -070043 "--stdoutlog", "/stdout", "--stderrlog", "/stderr", "--run", "/bin/veyron", "--", "one", "two"},
44 []string{"A=B"},
45 nil,
46 WorkParameters{
Robert Kroegerda977d72014-09-22 10:48:51 -070047 uid: testUid,
48 gid: testGid,
Robert Kroegerdd07b362014-09-18 17:34:42 -070049 workspace: "/hello",
50 stderrLog: "/stderr",
51 stdoutLog: "/stdout",
52 argv0: "/bin/veyron",
53 argv: []string{"one", "two"},
54 envv: []string{"A=B"},
55 },
56 },
Robert Kroegerda977d72014-09-22 10:48:51 -070057 {
58 []string{"setuidhelper", "--username", testUserName},
59 []string{"A=B"},
60 // 501 comes from the default value of --minuid.
61 fmt.Errorf("suidhelper does not permit uids less than 501"),
62 WorkParameters{},
63 },
Robert Kroegerdd07b362014-09-18 17:34:42 -070064 }
65
66 for _, c := range cases {
67 var wp WorkParameters
68 fs := flag.NewFlagSet(c.cmdline[0], flag.ExitOnError)
69 setupFlags(fs)
70 fs.Parse(c.cmdline[1:])
71 if err := wp.ProcessArguments(fs, c.env); !reflect.DeepEqual(err, c.err) {
72 t.Fatalf("got %v, expected %v error", err, c.err)
73 }
74 if !reflect.DeepEqual(wp, c.expected) {
75 t.Fatalf("got %#v expected %#v", wp, c.expected)
76 }
77 }
78}