12 "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
16 // Gocheck boilerplate
17 func Test(t *testing.T) {
21 type TestSuite struct{}
23 // Gocheck boilerplate
24 var _ = Suite(&TestSuite{})
26 type ArvTestClient struct {
32 func (t ArvTestClient) Create(resourceType string, parameters arvadosclient.Dict, output interface{}) error {
36 func (t ArvTestClient) Update(resourceType string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
37 t.c.Check(resourceType, Equals, "job_tasks")
38 t.c.Check(parameters, DeepEquals, arvadosclient.Dict{"job_task": Task{
45 func (s *TestSuite) TestSimpleRun(c *C) {
46 tmpdir, _ := ioutil.TempDir("", "")
51 err := runner(ArvTestClient{c, "", true},
53 "zzzz-8i9sb-111111111111111",
54 "zzzz-ot0gb-111111111111111",
57 Job{ScriptParameters: Tasks{[]TaskDef{{
58 Command: []string{"echo", "foo"}}}}},
63 func checkOutput(c *C, tmpdir string) {
64 file, err := os.Open(tmpdir + "/outdir/output.txt")
67 data := make([]byte, 100)
72 count, err = file.Read(data[offset:])
75 c.Assert(err, Equals, io.EOF)
76 c.Check(string(data[0:offset]), Equals, "foo\n")
79 func (s *TestSuite) TestSimpleRunSubtask(c *C) {
80 tmpdir, _ := ioutil.TempDir("", "")
85 err := runner(ArvTestClient{c,
86 ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
88 "zzzz-8i9sb-111111111111111",
89 "zzzz-ot0gb-111111111111111",
92 Job{ScriptParameters: Tasks{[]TaskDef{
93 {Command: []string{"echo", "bar"}},
94 {Command: []string{"echo", "foo"}}}}},
95 Task{Parameters: TaskDef{
96 Command: []string{"echo", "foo"},
97 Stdout: "output.txt"},
101 checkOutput(c, tmpdir)
104 func (s *TestSuite) TestRedirect(c *C) {
105 tmpfile, _ := ioutil.TempFile("", "")
106 tmpfile.Write([]byte("foo\n"))
108 defer os.Remove(tmpfile.Name())
110 tmpdir, _ := ioutil.TempDir("", "")
115 err := runner(ArvTestClient{c,
116 ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
118 "zzzz-8i9sb-111111111111111",
119 "zzzz-ot0gb-111111111111111",
122 Job{ScriptParameters: Tasks{[]TaskDef{{
123 Command: []string{"cat"},
124 Stdout: "output.txt",
125 Stdin: tmpfile.Name()}}}},
129 checkOutput(c, tmpdir)
132 func (s *TestSuite) TestEnv(c *C) {
133 tmpdir, _ := ioutil.TempDir("", "")
138 err := runner(ArvTestClient{c, ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
140 "zzzz-8i9sb-111111111111111",
141 "zzzz-ot0gb-111111111111111",
144 Job{ScriptParameters: Tasks{[]TaskDef{{
145 Command: []string{"/bin/sh", "-c", "echo $BAR"},
146 Stdout: "output.txt",
147 Env: map[string]string{"BAR": "foo"}}}}},
150 checkOutput(c, tmpdir)
153 func (s *TestSuite) TestEnvSubstitute(c *C) {
154 tmpdir, _ := ioutil.TempDir("", "")
159 err := runner(ArvTestClient{c, ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
161 "zzzz-8i9sb-111111111111111",
162 "zzzz-ot0gb-111111111111111",
165 Job{ScriptParameters: Tasks{[]TaskDef{{
166 Command: []string{"/bin/sh", "-c", "echo $BAR"},
167 Stdout: "output.txt",
168 Env: map[string]string{"BAR": "$(task.keep)"}}}}},
171 checkOutput(c, tmpdir)
174 func (s *TestSuite) TestEnvReplace(c *C) {
175 tmpdir, _ := ioutil.TempDir("", "")
180 err := runner(ArvTestClient{c, ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
182 "zzzz-8i9sb-111111111111111",
183 "zzzz-ot0gb-111111111111111",
186 Job{ScriptParameters: Tasks{[]TaskDef{{
187 Command: []string{"/bin/sh", "-c", "echo $PATH"},
188 Stdout: "output.txt",
189 Env: map[string]string{"PATH": "foo"}}}}},
192 checkOutput(c, tmpdir)
195 type SubtaskTestClient struct {
201 func (t *SubtaskTestClient) Create(resourceType string, parameters arvadosclient.Dict, output interface{}) error {
202 t.c.Check(resourceType, Equals, "job_tasks")
203 t.c.Check(parameters, DeepEquals, arvadosclient.Dict{"job_task": t.parms[t.i]})
208 func (t SubtaskTestClient) Update(resourceType string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
212 func (s *TestSuite) TestScheduleSubtask(c *C) {
214 api := SubtaskTestClient{c, []Task{
215 {JobUUID: "zzzz-8i9sb-111111111111111",
216 CreatedByJobTaskUUID: "zzzz-ot0gb-111111111111111",
219 Command: []string{"echo", "bar"}}},
220 {JobUUID: "zzzz-8i9sb-111111111111111",
221 CreatedByJobTaskUUID: "zzzz-ot0gb-111111111111111",
224 Command: []string{"echo", "foo"}}}},
227 tmpdir, _ := ioutil.TempDir("", "")
232 err := runner(&api, KeepTestClient{},
233 "zzzz-8i9sb-111111111111111",
234 "zzzz-ot0gb-111111111111111",
237 Job{ScriptParameters: Tasks{[]TaskDef{
238 {Command: []string{"echo", "bar"}},
239 {Command: []string{"echo", "foo"}}}}},
245 func (s *TestSuite) TestRunFail(c *C) {
246 tmpdir, _ := ioutil.TempDir("", "")
251 err := runner(ArvTestClient{c, "", false}, KeepTestClient{},
252 "zzzz-8i9sb-111111111111111",
253 "zzzz-ot0gb-111111111111111",
256 Job{ScriptParameters: Tasks{[]TaskDef{{
257 Command: []string{"/bin/sh", "-c", "exit 1"}}}}},
259 c.Check(err, FitsTypeOf, PermFail{})
262 func (s *TestSuite) TestRunSuccessCode(c *C) {
263 tmpdir, _ := ioutil.TempDir("", "")
268 err := runner(ArvTestClient{c, "", true}, KeepTestClient{},
269 "zzzz-8i9sb-111111111111111",
270 "zzzz-ot0gb-111111111111111",
273 Job{ScriptParameters: Tasks{[]TaskDef{{
274 Command: []string{"/bin/sh", "-c", "exit 1"},
275 SuccessCodes: []int{0, 1}}}}},
280 func (s *TestSuite) TestRunFailCode(c *C) {
281 tmpdir, _ := ioutil.TempDir("", "")
286 err := runner(ArvTestClient{c, "", false}, KeepTestClient{},
287 "zzzz-8i9sb-111111111111111",
288 "zzzz-ot0gb-111111111111111",
291 Job{ScriptParameters: Tasks{[]TaskDef{{
292 Command: []string{"/bin/sh", "-c", "exit 0"},
293 PermanentFailCodes: []int{0, 1}}}}},
295 c.Check(err, FitsTypeOf, PermFail{})
298 func (s *TestSuite) TestRunTempFailCode(c *C) {
299 tmpdir, _ := ioutil.TempDir("", "")
304 err := runner(ArvTestClient{c, "", false}, KeepTestClient{},
305 "zzzz-8i9sb-111111111111111",
306 "zzzz-ot0gb-111111111111111",
309 Job{ScriptParameters: Tasks{[]TaskDef{{
310 Command: []string{"/bin/sh", "-c", "exit 1"},
311 TemporaryFailCodes: []int{1}}}}},
313 c.Check(err, FitsTypeOf, TempFail{})
316 func (s *TestSuite) TestVwd(c *C) {
317 tmpfile, _ := ioutil.TempFile("", "")
318 tmpfile.Write([]byte("foo\n"))
320 defer os.Remove(tmpfile.Name())
322 tmpdir, _ := ioutil.TempDir("", "")
327 err := runner(ArvTestClient{c, ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
329 "zzzz-8i9sb-111111111111111",
330 "zzzz-ot0gb-111111111111111",
333 Job{ScriptParameters: Tasks{[]TaskDef{{
334 Command: []string{"ls", "output.txt"},
335 Vwd: map[string]string{
336 "output.txt": tmpfile.Name()}}}}},
339 checkOutput(c, tmpdir)
342 func (s *TestSuite) TestSubstitutionStdin(c *C) {
343 keepmount, _ := ioutil.TempDir("", "")
344 ioutil.WriteFile(keepmount+"/"+"file1.txt", []byte("foo\n"), 0600)
346 os.RemoveAll(keepmount)
349 log.Print("Keepmount is ", keepmount)
351 tmpdir, _ := ioutil.TempDir("", "")
356 log.Print("tmpdir is ", tmpdir)
358 err := runner(ArvTestClient{c,
359 ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
361 "zzzz-8i9sb-111111111111111",
362 "zzzz-ot0gb-111111111111111",
365 Job{ScriptParameters: Tasks{[]TaskDef{{
366 Command: []string{"cat"},
367 Stdout: "output.txt",
368 Stdin: "$(task.keep)/file1.txt"}}}},
371 checkOutput(c, tmpdir)
374 func (s *TestSuite) TestSubstitutionCommandLine(c *C) {
375 keepmount, _ := ioutil.TempDir("", "")
376 ioutil.WriteFile(keepmount+"/"+"file1.txt", []byte("foo\n"), 0600)
378 os.RemoveAll(keepmount)
381 tmpdir, _ := ioutil.TempDir("", "")
386 err := runner(ArvTestClient{c,
387 ". d3b07384d113edec49eaa6238ad5ff00+4 0:4:output.txt\n", true},
389 "zzzz-8i9sb-111111111111111",
390 "zzzz-ot0gb-111111111111111",
393 Job{ScriptParameters: Tasks{[]TaskDef{{
394 Command: []string{"cat", "$(task.keep)/file1.txt"},
395 Stdout: "output.txt"}}}},
399 checkOutput(c, tmpdir)
402 func (s *TestSuite) TestSignal(c *C) {
403 tmpdir, _ := ioutil.TempDir("", "")
409 time.Sleep(1 * time.Second)
410 self, _ := os.FindProcess(os.Getpid())
411 self.Signal(syscall.SIGINT)
414 err := runner(ArvTestClient{c,
417 "zzzz-8i9sb-111111111111111",
418 "zzzz-ot0gb-111111111111111",
421 Job{ScriptParameters: Tasks{[]TaskDef{{
422 Command: []string{"sleep", "4"}}}}},
424 c.Check(err, FitsTypeOf, PermFail{})
428 func (s *TestSuite) TestQuoting(c *C) {
429 tmpdir, _ := ioutil.TempDir("", "")
434 err := runner(ArvTestClient{c,
435 "./s\\040ub:dir d3b07384d113edec49eaa6238ad5ff00+4 0:4::e\\040vil\n", true},
437 "zzzz-8i9sb-111111111111111",
438 "zzzz-ot0gb-111111111111111",
441 Job{ScriptParameters: Tasks{[]TaskDef{{
442 Command: []string{"echo", "foo"},
443 Stdout: "s ub:dir/:e vi\nl"}}}},
448 func (s *TestSuite) TestKeepTmp(c *C) {
449 tmpdir, _ := ioutil.TempDir("", "")
454 os.Setenv("TASK_KEEPMOUNT_TMP", tmpdir)
455 defer os.Setenv("TASK_KEEPMOUNT_TMP", "")
457 fn, err := os.Create(tmpdir + "/.arvados#collection")
458 fn.Write([]byte("{\"manifest_text\":\". unparsed 0:3:foo\\n\",\"uuid\":null}"))
461 err = runner(ArvTestClient{c,
462 ". unparsed 0:3:foo\n", true},
464 "zzzz-8i9sb-111111111111111",
465 "zzzz-ot0gb-111111111111111",
468 Job{ScriptParameters: Tasks{[]TaskDef{{
469 Command: []string{"echo", "foo"},
470 KeepTmpOutput: true}}}},