7582: Working on tests.
[arvados.git] / sdk / go / crunchrunner / crunchrunner_test.go
index 7d4c62a06ba47acb2ab26eff89f69ea0786fa800..127c434bc947ec9a0f4f8fe4c4c976a854828a79 100644 (file)
@@ -1,16 +1,9 @@
 package main
 
 import (
-       "crypto/md5"
-       "flag"
-       "fmt"
        "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
        . "gopkg.in/check.v1"
-       "io"
        "io/ioutil"
-       "log"
-       "net"
-       "net/http"
        "os"
        "testing"
 )
@@ -20,6 +13,203 @@ func Test(t *testing.T) {
        TestingT(t)
 }
 
+type TestSuite struct{}
+
 // Gocheck boilerplate
-var _ = Suite(&ServerRequiredSuite{})
-var _ = Suite(&StandaloneSuite{})
+var _ = Suite(&TestSuite{})
+
+type ArvTestClient struct {
+}
+
+func (t ArvTestClient) Create(resourceType string, parameters arvadosclient.Dict, output interface{}) error {
+       return nil
+}
+
+func (t ArvTestClient) Delete(resource string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+func (t ArvTestClient) Update(resourceType string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+func (t ArvTestClient) Get(resourceType string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+func (t ArvTestClient) List(resource string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+func (s *TestSuite) TestSimpleRun(c *C) {
+
+       api := ArvTestClient{}
+
+       tmpdir, _ := ioutil.TempDir("", "")
+       defer func() {
+               os.RemoveAll(tmpdir)
+       }()
+
+       err := runner(api,
+               "zzzz-8i9sb-111111111111111",
+               "zzzz-ot0gb-111111111111111",
+               tmpdir,
+               "",
+               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
+                       commands: []string{"echo", "foo"}}}}},
+               Task{sequence: 0})
+       c.Check(err, IsNil)
+
+}
+
+func checkOutput(c *C, tmpdir string) {
+       file, err := os.Open(tmpdir + "/" + "outdir/output.txt")
+       c.Assert(err, IsNil)
+
+       data := make([]byte, 100)
+       var count int
+       count, err = file.Read(data)
+       c.Assert(err, IsNil)
+       c.Check(string(data[0:count]), Equals, "foo\n")
+}
+
+func (s *TestSuite) TestSimpleRunSubtask(c *C) {
+
+       api := ArvTestClient{}
+
+       tmpdir, _ := ioutil.TempDir("", "")
+       defer func() {
+               os.RemoveAll(tmpdir)
+       }()
+
+       err := runner(api,
+               "zzzz-8i9sb-111111111111111",
+               "zzzz-ot0gb-111111111111111",
+               tmpdir,
+               "",
+               Job{script_parameters: Tasks{[]TaskDef{
+                       TaskDef{commands: []string{"echo", "bar"}},
+                       TaskDef{commands: []string{"echo", "foo"}}}}},
+               Task{parameters: TaskDef{
+                       commands: []string{"echo", "foo"},
+                       stdout:   "output.txt"},
+                       sequence: 1})
+       c.Check(err, IsNil)
+
+       checkOutput(c, tmpdir)
+}
+
+func (s *TestSuite) TestRedirect(c *C) {
+
+       api := ArvTestClient{}
+
+       tmpfile, _ := ioutil.TempFile("", "")
+       tmpfile.Write([]byte("foo\n"))
+       tmpfile.Sync()
+       defer tmpfile.Close()
+
+       tmpdir, _ := ioutil.TempDir("", "")
+       defer func() {
+               os.RemoveAll(tmpdir)
+       }()
+
+       err := runner(api,
+               "zzzz-8i9sb-111111111111111",
+               "zzzz-ot0gb-111111111111111",
+               tmpdir,
+               "",
+               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
+                       commands: []string{"cat"},
+                       stdout:   "output.txt",
+                       stdin:    tmpfile.Name()}}}},
+               Task{sequence: 0})
+       c.Check(err, IsNil)
+
+       checkOutput(c, tmpdir)
+}
+
+func (s *TestSuite) TestEnv(c *C) {
+
+       api := ArvTestClient{}
+
+       tmpdir, _ := ioutil.TempDir("", "")
+       defer func() {
+               os.RemoveAll(tmpdir)
+       }()
+
+       err := runner(api,
+               "zzzz-8i9sb-111111111111111",
+               "zzzz-ot0gb-111111111111111",
+               tmpdir,
+               "",
+               Job{script_parameters: Tasks{[]TaskDef{TaskDef{
+                       commands: []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)
+}
+
+type SubtaskTestClient struct {
+       c     *C
+       parms []Task
+       i     int
+}
+
+func (t *SubtaskTestClient) Create(resourceType string, parameters arvadosclient.Dict, output interface{}) error {
+       t.c.Check(resourceType, Equals, "job_tasks")
+       t.c.Check(parameters, DeepEquals, arvadosclient.Dict{"job_task": t.parms[t.i]})
+       t.i += 1
+       return nil
+}
+
+func (t SubtaskTestClient) Delete(resource string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+func (t SubtaskTestClient) Update(resourceType string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+func (t SubtaskTestClient) Get(resourceType string, uuid string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+func (t SubtaskTestClient) List(resource string, parameters arvadosclient.Dict, output interface{}) (err error) {
+       return nil
+}
+
+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{
+                               commands: []string{"echo", "bar"}}},
+               Task{job_uuid: "zzzz-8i9sb-111111111111111",
+                       created_by_job_task_uuid: "zzzz-ot0gb-111111111111111",
+                       sequence:                 1,
+                       parameters: TaskDef{
+                               commands: []string{"echo", "foo"}}}},
+               0}
+
+       tmpdir, _ := ioutil.TempDir("", "")
+       defer func() {
+               os.RemoveAll(tmpdir)
+       }()
+
+       err := runner(&api,
+               "zzzz-8i9sb-111111111111111",
+               "zzzz-ot0gb-111111111111111",
+               tmpdir,
+               "",
+               Job{script_parameters: Tasks{[]TaskDef{
+                       TaskDef{commands: []string{"echo", "bar"}},
+                       TaskDef{commands: []string{"echo", "foo"}}}}},
+               Task{sequence: 0})
+       c.Check(err, IsNil)
+
+}