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: "", |
Robert Kroeger | a99ad14 | 2014-10-30 17:56:39 -0700 | [diff] [blame] | 33 | logDir: "", |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 34 | argv0: "", |
Robin Thellend | 5864732 | 2014-10-28 12:07:47 -0700 | [diff] [blame] | 35 | argv: []string{""}, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 36 | envv: []string{"A=B"}, |
Robert Kroeger | 9355055 | 2014-10-28 16:42:53 -0700 | [diff] [blame] | 37 | dryrun: false, |
| 38 | remove: false, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 39 | }, |
| 40 | }, |
| 41 | |
| 42 | { |
Robert Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame] | 43 | []string{"setuidhelper", "--minuid", "1", "--username", testUserName, "--workspace", "/hello", |
Robert Kroeger | a99ad14 | 2014-10-30 17:56:39 -0700 | [diff] [blame] | 44 | "--logdir", "/logging", "--run", "/bin/veyron", "--", "one", "two"}, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 45 | []string{"A=B"}, |
| 46 | nil, |
| 47 | WorkParameters{ |
Robert Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame] | 48 | uid: testUid, |
| 49 | gid: testGid, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 50 | workspace: "/hello", |
Robert Kroeger | a99ad14 | 2014-10-30 17:56:39 -0700 | [diff] [blame] | 51 | logDir: "/logging", |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 52 | argv0: "/bin/veyron", |
Robin Thellend | 5864732 | 2014-10-28 12:07:47 -0700 | [diff] [blame] | 53 | argv: []string{"/bin/veyron", "one", "two"}, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 54 | envv: []string{"A=B"}, |
Robert Kroeger | 9355055 | 2014-10-28 16:42:53 -0700 | [diff] [blame] | 55 | 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 Kroeger | a99ad14 | 2014-10-30 17:56:39 -0700 | [diff] [blame] | 74 | logDir: "", |
Robert Kroeger | 9355055 | 2014-10-28 16:42:53 -0700 | [diff] [blame] | 75 | argv0: "", |
| 76 | argv: []string{"hello", "vanadium"}, |
| 77 | envv: nil, |
| 78 | dryrun: false, |
| 79 | remove: true, |
Robert Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 80 | }, |
| 81 | }, |
Robert Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame] | 82 | { |
| 83 | []string{"setuidhelper", "--username", testUserName}, |
| 84 | []string{"A=B"}, |
Asim Shankar | c33b464 | 2014-10-07 00:24:52 -0700 | [diff] [blame] | 85 | fmt.Errorf("suidhelper does not permit uids less than 501"), |
Robert Kroeger | da977d7 | 2014-09-22 10:48:51 -0700 | [diff] [blame] | 86 | WorkParameters{}, |
| 87 | }, |
Robert Kroeger | c617558 | 2014-11-21 16:03:16 -0800 | [diff] [blame] | 88 | |
| 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 Kroeger | dd07b36 | 2014-09-18 17:34:42 -0700 | [diff] [blame] | 106 | } |
| 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 | } |