Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 1 | package impl |
| 2 | |
| 3 | import ( |
| 4 | "flag" |
| 5 | "fmt" |
| 6 | "reflect" |
| 7 | "testing" |
| 8 | ) |
| 9 | |
| 10 | func 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 Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame^] | 26 | []string{"setuidhelper", "--minuid", "1", "--username", testUserName}, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 27 | []string{"A=B"}, |
| 28 | nil, |
| 29 | WorkParameters{ |
Robert Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame^] | 30 | uid: testUid, |
| 31 | gid: testGid, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 32 | workspace: "", |
| 33 | stderrLog: "", |
| 34 | stdoutLog: "", |
| 35 | argv0: "", |
| 36 | argv: []string{}, |
| 37 | envv: []string{"A=B"}, |
| 38 | }, |
| 39 | }, |
| 40 | |
| 41 | { |
Robert Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame^] | 42 | []string{"setuidhelper", "--minuid", "1", "--username", testUserName, "--workspace", "/hello", |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 43 | "--stdoutlog", "/stdout", "--stderrlog", "/stderr", "--run", "/bin/veyron", "--", "one", "two"}, |
| 44 | []string{"A=B"}, |
| 45 | nil, |
| 46 | WorkParameters{ |
Robert Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame^] | 47 | uid: testUid, |
| 48 | gid: testGid, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 49 | 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 Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame^] | 57 | { |
| 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 Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 64 | } |
| 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 | } |