11807: Migrate old records in jobs table from YAML to JSON.
[arvados.git] / sdk / go / crunchrunner / crunchrunner_test.go
index 5c309b547b4d3b70bd937ea0dd7bac7bab7de3c6..fcc77090ae5492401f47f9fbc7cd9e609e4c3e1a 100644 (file)
@@ -1,8 +1,6 @@
 package main
 
 import (
-       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
-       . "gopkg.in/check.v1"
        "io"
        "io/ioutil"
        "log"
@@ -10,6 +8,9 @@ import (
        "syscall"
        "testing"
        "time"
+
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+       . "gopkg.in/check.v1"
 )
 
 // Gocheck boilerplate
@@ -35,9 +36,9 @@ func (t ArvTestClient) Create(resourceType string, parameters arvadosclient.Dict
 func (t ArvTestClient) Update(resourceType string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
        t.c.Check(resourceType, Equals, "job_tasks")
        t.c.Check(parameters, DeepEquals, arvadosclient.Dict{"job_task": Task{
-               output:   t.manifest,
-               success:  t.success,
-               progress: 1}})
+               Output:   t.manifest,
+               Success:  t.success,
+               Progress: 1}})
        return nil
 }
 
@@ -53,9 +54,9 @@ func (s *TestSuite) TestSimpleRun(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"echo", "foo"}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"echo", "foo"}}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
 }
 
@@ -88,13 +89,13 @@ func (s *TestSuite) TestSimpleRunSubtask(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{
-                       TaskDef{command: []string{"echo", "bar"}},
-                       TaskDef{command: []string{"echo", "foo"}}}}},
-               Task{parameters: TaskDef{
-                       command: []string{"echo", "foo"},
-                       stdout:  "output.txt"},
-                       sequence: 1})
+               Job{ScriptParameters: Tasks{[]TaskDef{
+                       {Command: []string{"echo", "bar"}},
+                       {Command: []string{"echo", "foo"}}}}},
+               Task{Parameters: TaskDef{
+                       Command: []string{"echo", "foo"},
+                       Stdout:  "output.txt"},
+                       Sequence: 1})
        c.Check(err, IsNil)
 
        checkOutput(c, tmpdir)
@@ -118,11 +119,11 @@ func (s *TestSuite) TestRedirect(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"cat"},
-                       stdout:  "output.txt",
-                       stdin:   tmpfile.Name()}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"cat"},
+                       Stdout:  "output.txt",
+                       Stdin:   tmpfile.Name()}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
 
        checkOutput(c, tmpdir)
@@ -140,11 +141,11 @@ func (s *TestSuite) TestEnv(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"/bin/sh", "-c", "echo $BAR"},
-                       stdout:  "output.txt",
-                       env:     map[string]string{"BAR": "foo"}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"/bin/sh", "-c", "echo $BAR"},
+                       Stdout:  "output.txt",
+                       Env:     map[string]string{"BAR": "foo"}}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
        checkOutput(c, tmpdir)
 }
@@ -161,11 +162,11 @@ func (s *TestSuite) TestEnvSubstitute(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "foo\n",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"/bin/sh", "-c", "echo $BAR"},
-                       stdout:  "output.txt",
-                       env:     map[string]string{"BAR": "$(task.keep)"}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"/bin/sh", "-c", "echo $BAR"},
+                       Stdout:  "output.txt",
+                       Env:     map[string]string{"BAR": "$(task.keep)"}}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
        checkOutput(c, tmpdir)
 }
@@ -182,11 +183,11 @@ func (s *TestSuite) TestEnvReplace(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"/bin/sh", "-c", "echo $PATH"},
-                       stdout:  "output.txt",
-                       env:     map[string]string{"PATH": "foo"}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"/bin/sh", "-c", "echo $PATH"},
+                       Stdout:  "output.txt",
+                       Env:     map[string]string{"PATH": "foo"}}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
        checkOutput(c, tmpdir)
 }
@@ -211,16 +212,16 @@ func (t SubtaskTestClient) Update(resourceType string, uuid string, parameters a
 func (s *TestSuite) TestScheduleSubtask(c *C) {
 
        api := SubtaskTestClient{c, []Task{
-               Task{job_uuid: "zzzz-8i9sb-111111111111111",
-                       created_by_job_task_uuid: "zzzz-ot0gb-111111111111111",
-                       sequence:                 1,
-                       parameters: TaskDef{
-                               command: []string{"echo", "bar"}}},
-               Task{job_uuid: "zzzz-8i9sb-111111111111111",
-                       created_by_job_task_uuid: "zzzz-ot0gb-111111111111111",
-                       sequence:                 1,
-                       parameters: TaskDef{
-                               command: []string{"echo", "foo"}}}},
+               {JobUUID: "zzzz-8i9sb-111111111111111",
+                       CreatedByJobTaskUUID: "zzzz-ot0gb-111111111111111",
+                       Sequence:             1,
+                       Parameters: TaskDef{
+                               Command: []string{"echo", "bar"}}},
+               {JobUUID: "zzzz-8i9sb-111111111111111",
+                       CreatedByJobTaskUUID: "zzzz-ot0gb-111111111111111",
+                       Sequence:             1,
+                       Parameters: TaskDef{
+                               Command: []string{"echo", "foo"}}}},
                0}
 
        tmpdir, _ := ioutil.TempDir("", "")
@@ -233,10 +234,10 @@ func (s *TestSuite) TestScheduleSubtask(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{
-                       TaskDef{command: []string{"echo", "bar"}},
-                       TaskDef{command: []string{"echo", "foo"}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{
+                       {Command: []string{"echo", "bar"}},
+                       {Command: []string{"echo", "foo"}}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
 
 }
@@ -252,9 +253,9 @@ func (s *TestSuite) TestRunFail(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"/bin/sh", "-c", "exit 1"}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"/bin/sh", "-c", "exit 1"}}}}},
+               Task{Sequence: 0})
        c.Check(err, FitsTypeOf, PermFail{})
 }
 
@@ -269,10 +270,10 @@ func (s *TestSuite) TestRunSuccessCode(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command:      []string{"/bin/sh", "-c", "exit 1"},
-                       successCodes: []int{0, 1}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command:      []string{"/bin/sh", "-c", "exit 1"},
+                       SuccessCodes: []int{0, 1}}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
 }
 
@@ -287,10 +288,10 @@ func (s *TestSuite) TestRunFailCode(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command:            []string{"/bin/sh", "-c", "exit 0"},
-                       permanentFailCodes: []int{0, 1}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command:            []string{"/bin/sh", "-c", "exit 0"},
+                       PermanentFailCodes: []int{0, 1}}}}},
+               Task{Sequence: 0})
        c.Check(err, FitsTypeOf, PermFail{})
 }
 
@@ -305,10 +306,10 @@ func (s *TestSuite) TestRunTempFailCode(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command:            []string{"/bin/sh", "-c", "exit 1"},
-                       temporaryFailCodes: []int{1}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command:            []string{"/bin/sh", "-c", "exit 1"},
+                       TemporaryFailCodes: []int{1}}}}},
+               Task{Sequence: 0})
        c.Check(err, FitsTypeOf, TempFail{})
 }
 
@@ -329,11 +330,11 @@ func (s *TestSuite) TestVwd(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"ls", "output.txt"},
-                       vwd: map[string]string{
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"ls", "output.txt"},
+                       Vwd: map[string]string{
                                "output.txt": tmpfile.Name()}}}}},
-               Task{sequence: 0})
+               Task{Sequence: 0})
        c.Check(err, IsNil)
        checkOutput(c, tmpdir)
 }
@@ -361,11 +362,11 @@ func (s *TestSuite) TestSubstitutionStdin(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                keepmount,
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"cat"},
-                       stdout:  "output.txt",
-                       stdin:   "$(task.keep)/file1.txt"}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"cat"},
+                       Stdout:  "output.txt",
+                       Stdin:   "$(task.keep)/file1.txt"}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
        checkOutput(c, tmpdir)
 }
@@ -389,10 +390,10 @@ func (s *TestSuite) TestSubstitutionCommandLine(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                keepmount,
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"cat", "$(task.keep)/file1.txt"},
-                       stdout:  "output.txt"}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"cat", "$(task.keep)/file1.txt"},
+                       Stdout:  "output.txt"}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
 
        checkOutput(c, tmpdir)
@@ -417,9 +418,9 @@ func (s *TestSuite) TestSignal(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"sleep", "4"}}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"sleep", "4"}}}}},
+               Task{Sequence: 0})
        c.Check(err, FitsTypeOf, PermFail{})
 
 }
@@ -437,9 +438,37 @@ func (s *TestSuite) TestQuoting(c *C) {
                "zzzz-ot0gb-111111111111111",
                tmpdir,
                "",
-               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
-                       command: []string{"echo", "foo"},
-                       stdout:  "s ub:dir/:e vi\nl"}}}},
-               Task{sequence: 0})
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command: []string{"echo", "foo"},
+                       Stdout:  "s ub:dir/:e vi\nl"}}}},
+               Task{Sequence: 0})
        c.Check(err, IsNil)
 }
+
+func (s *TestSuite) TestKeepTmp(c *C) {
+       tmpdir, _ := ioutil.TempDir("", "")
+       defer func() {
+               os.RemoveAll(tmpdir)
+       }()
+
+       os.Setenv("TASK_KEEPMOUNT_TMP", tmpdir)
+       defer os.Setenv("TASK_KEEPMOUNT_TMP", "")
+
+       fn, err := os.Create(tmpdir + "/.arvados#collection")
+       fn.Write([]byte("{\"manifest_text\":\". unparsed 0:3:foo\\n\",\"uuid\":null}"))
+       defer fn.Close()
+
+       err = runner(ArvTestClient{c,
+               ". unparsed 0:3:foo\n", true},
+               KeepTestClient{},
+               "zzzz-8i9sb-111111111111111",
+               "zzzz-ot0gb-111111111111111",
+               tmpdir,
+               "",
+               Job{ScriptParameters: Tasks{[]TaskDef{{
+                       Command:       []string{"echo", "foo"},
+                       KeepTmpOutput: true}}}},
+               Task{Sequence: 0})
+       c.Check(err, IsNil)
+
+}