blob: 9341fc7751fd1031f8ad87d1890e84553c0a2f20 [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: "",
Robert Kroegera99ad142014-10-30 17:56:39 -070033 logDir: "",
Robert Kroegerdd07b362014-09-18 17:34:42 -070034 argv0: "",
Robin Thellend58647322014-10-28 12:07:47 -070035 argv: []string{""},
Robert Kroegerdd07b362014-09-18 17:34:42 -070036 envv: []string{"A=B"},
Robert Kroeger93550552014-10-28 16:42:53 -070037 dryrun: false,
38 remove: false,
Robert Kroegerdd07b362014-09-18 17:34:42 -070039 },
40 },
41
42 {
Robert Kroegerda977d72014-09-22 10:48:51 -070043 []string{"setuidhelper", "--minuid", "1", "--username", testUserName, "--workspace", "/hello",
Robert Kroegera99ad142014-10-30 17:56:39 -070044 "--logdir", "/logging", "--run", "/bin/veyron", "--", "one", "two"},
Robert Kroegerdd07b362014-09-18 17:34:42 -070045 []string{"A=B"},
46 nil,
47 WorkParameters{
Robert Kroegerda977d72014-09-22 10:48:51 -070048 uid: testUid,
49 gid: testGid,
Robert Kroegerdd07b362014-09-18 17:34:42 -070050 workspace: "/hello",
Robert Kroegera99ad142014-10-30 17:56:39 -070051 logDir: "/logging",
Robert Kroegerdd07b362014-09-18 17:34:42 -070052 argv0: "/bin/veyron",
Robin Thellend58647322014-10-28 12:07:47 -070053 argv: []string{"/bin/veyron", "one", "two"},
Robert Kroegerdd07b362014-09-18 17:34:42 -070054 envv: []string{"A=B"},
Robert Kroeger93550552014-10-28 16:42:53 -070055 dryrun: false,
56 remove: false,
57 },
58 },
59 {
60 []string{"setuidhelper", "--username", testUserName},
61 []string{"A=B"},
62 fmt.Errorf("suidhelper does not permit uids less than 501"),
63 WorkParameters{},
64 },
65
66 {
67 []string{"setuidhelper", "--rm", "hello", "vanadium"},
68 []string{"A=B"},
69 nil,
70 WorkParameters{
71 uid: 0,
72 gid: 0,
73 workspace: "",
Robert Kroegera99ad142014-10-30 17:56:39 -070074 logDir: "",
Robert Kroeger93550552014-10-28 16:42:53 -070075 argv0: "",
76 argv: []string{"hello", "vanadium"},
77 envv: nil,
78 dryrun: false,
79 remove: true,
Robert Kroegerdd07b362014-09-18 17:34:42 -070080 },
81 },
Robert Kroegerda977d72014-09-22 10:48:51 -070082 {
83 []string{"setuidhelper", "--username", testUserName},
84 []string{"A=B"},
Asim Shankarc33b4642014-10-07 00:24:52 -070085 fmt.Errorf("suidhelper does not permit uids less than 501"),
Robert Kroegerda977d72014-09-22 10:48:51 -070086 WorkParameters{},
87 },
Robert Kroegerc6175582014-11-21 16:03:16 -080088
89 {
90 []string{"setuidhelper", "--minuid", "1", "--username", testUserName, "--workspace", "/hello",
91 "--logdir", "/logging", "--run", "/bin/veyron", "--dryrun", "--", "one", "two"},
92 []string{"A=B"},
93 nil,
94 WorkParameters{
95 uid: testUid,
96 gid: testGid,
97 workspace: "/hello",
98 logDir: "/logging",
99 argv0: "/bin/veyron",
100 argv: []string{"/bin/veyron", "one", "two"},
101 envv: []string{"A=B"},
102 dryrun: true,
103 remove: false,
104 },
105 },
Robert Kroegerdd07b362014-09-18 17:34:42 -0700106 }
107
108 for _, c := range cases {
109 var wp WorkParameters
110 fs := flag.NewFlagSet(c.cmdline[0], flag.ExitOnError)
111 setupFlags(fs)
112 fs.Parse(c.cmdline[1:])
113 if err := wp.ProcessArguments(fs, c.env); !reflect.DeepEqual(err, c.err) {
114 t.Fatalf("got %v, expected %v error", err, c.err)
115 }
116 if !reflect.DeepEqual(wp, c.expected) {
117 t.Fatalf("got %#v expected %#v", wp, c.expected)
118 }
119 }
120}