X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/644f5de63e2b8b02e054fcbb3e9af39560cffae3..31007a99c336423f2b34a306028ec0aa41b1dd3a:/services/crunch-run/crunchrun_test.go?ds=sidebyside diff --git a/services/crunch-run/crunchrun_test.go b/services/crunch-run/crunchrun_test.go index e1d9fed730..a524e481d1 100644 --- a/services/crunch-run/crunchrun_test.go +++ b/services/crunch-run/crunchrun_test.go @@ -7,7 +7,6 @@ package main import ( "bufio" "bytes" - "context" "crypto/md5" "encoding/json" "errors" @@ -28,7 +27,9 @@ import ( "git.curoverse.com/arvados.git/sdk/go/arvados" "git.curoverse.com/arvados.git/sdk/go/arvadosclient" + "git.curoverse.com/arvados.git/sdk/go/arvadostest" "git.curoverse.com/arvados.git/sdk/go/manifest" + "golang.org/x/net/context" dockertypes "github.com/docker/docker/api/types" dockercontainer "github.com/docker/docker/api/types/container" @@ -243,8 +244,23 @@ func (client *ArvTestClient) Call(method, resourceType, uuid, action string, par func (client *ArvTestClient) CallRaw(method, resourceType, uuid, action string, parameters arvadosclient.Dict) (reader io.ReadCloser, err error) { var j []byte - if method == "GET" && resourceType == "containers" && action == "" && !client.callraw { - j, err = json.Marshal(client.Container) + if method == "GET" && resourceType == "nodes" && uuid == "" && action == "" { + j = []byte(`{ + "kind": "arvados#nodeList", + "items": [{ + "uuid": "zzzzz-7ekkf-2z3mc76g2q73aio", + "hostname": "compute2", + "properties": {"total_cpu_cores": 16} + }]}`) + } else if method == "GET" && resourceType == "containers" && action == "" && !client.callraw { + if uuid == "" { + j, err = json.Marshal(map[string]interface{}{ + "items": []interface{}{client.Container}, + "kind": "arvados#nodeList", + }) + } else { + j, err = json.Marshal(client.Container) + } } else { j = []byte(`{ "command": ["sleep", "1"], @@ -767,6 +783,7 @@ func (s *TestSuite) TestCrunchstat(c *C) { } func (s *TestSuite) TestNodeInfoLog(c *C) { + os.Setenv("SLURMD_NODENAME", "compute2") api, _, _ := FullRunHelper(c, `{ "command": ["sleep", "1"], "container_image": "d4ab34d3d4f8a72f5c4973051ae69fab+122", @@ -785,12 +802,19 @@ func (s *TestSuite) TestNodeInfoLog(c *C) { c.Check(api.CalledWith("container.exit_code", 0), NotNil) c.Check(api.CalledWith("container.state", "Complete"), NotNil) + c.Assert(api.Logs["node"], NotNil) + json := api.Logs["node"].String() + c.Check(json, Matches, `(?ms).*"uuid": *"zzzzz-7ekkf-2z3mc76g2q73aio".*`) + c.Check(json, Matches, `(?ms).*"total_cpu_cores": *16.*`) + c.Check(json, Not(Matches), `(?ms).*"info":.*`) + c.Assert(api.Logs["node-info"], NotNil) - c.Check(api.Logs["node-info"].String(), Matches, `(?ms).*Host Information.*`) - c.Check(api.Logs["node-info"].String(), Matches, `(?ms).*CPU Information.*`) - c.Check(api.Logs["node-info"].String(), Matches, `(?ms).*Memory Information.*`) - c.Check(api.Logs["node-info"].String(), Matches, `(?ms).*Disk Space.*`) - c.Check(api.Logs["node-info"].String(), Matches, `(?ms).*Disk INodes.*`) + json = api.Logs["node-info"].String() + c.Check(json, Matches, `(?ms).*Host Information.*`) + c.Check(json, Matches, `(?ms).*CPU Information.*`) + c.Check(json, Matches, `(?ms).*Memory Information.*`) + c.Check(json, Matches, `(?ms).*Disk Space.*`) + c.Check(json, Matches, `(?ms).*Disk INodes.*`) } func (s *TestSuite) TestContainerRecordLog(c *C) { @@ -950,7 +974,7 @@ func (s *TestSuite) testStopContainer(c *C, setup func(cr *ContainerRunner)) { c.Check(api.CalledWith("container.log", nil), NotNil) c.Check(api.CalledWith("container.state", "Cancelled"), NotNil) - c.Check(strings.HasSuffix(api.Logs["stdout"].String(), "foo\n"), Equals, true) + c.Check(api.Logs["stdout"].String(), Matches, "(?ms).*foo\n$") } func (s *TestSuite) TestFullRunSetEnv(c *C) { @@ -1263,6 +1287,64 @@ func (s *TestSuite) TestSetupMounts(c *C) { cr.CleanupDirs() checkEmpty() } + + // git_tree mounts + { + i = 0 + cr.ArvMountPoint = "" + (*GitMountSuite)(nil).useTestGitServer(c) + cr.token = arvadostest.ActiveToken + cr.Container.Mounts = make(map[string]arvados.Mount) + cr.Container.Mounts = map[string]arvados.Mount{ + "/tip": { + Kind: "git_tree", + UUID: arvadostest.Repository2UUID, + Commit: "fd3531f42995344f36c30b79f55f27b502f3d344", + Path: "/", + }, + "/non-tip": { + Kind: "git_tree", + UUID: arvadostest.Repository2UUID, + Commit: "5ebfab0522851df01fec11ec55a6d0f4877b542e", + Path: "/", + }, + } + cr.OutputPath = "/tmp" + + err := cr.SetupMounts() + c.Check(err, IsNil) + + // dirMap[mountpoint] == tmpdir + dirMap := make(map[string]string) + for _, bind := range cr.Binds { + tokens := strings.Split(bind, ":") + dirMap[tokens[1]] = tokens[0] + + if cr.Container.Mounts[tokens[1]].Writable { + c.Check(len(tokens), Equals, 2) + } else { + c.Check(len(tokens), Equals, 3) + c.Check(tokens[2], Equals, "ro") + } + } + + data, err := ioutil.ReadFile(dirMap["/tip"] + "/dir1/dir2/file with mode 0644") + c.Check(err, IsNil) + c.Check(string(data), Equals, "\000\001\002\003") + _, err = ioutil.ReadFile(dirMap["/tip"] + "/file only on testbranch") + c.Check(err, FitsTypeOf, &os.PathError{}) + c.Check(os.IsNotExist(err), Equals, true) + + data, err = ioutil.ReadFile(dirMap["/non-tip"] + "/dir1/dir2/file with mode 0644") + c.Check(err, IsNil) + c.Check(string(data), Equals, "\000\001\002\003") + data, err = ioutil.ReadFile(dirMap["/non-tip"] + "/file only on testbranch") + c.Check(err, IsNil) + c.Check(string(data), Equals, "testfile\n") + + cr.CleanupDirs() + checkEmpty() + } } func (s *TestSuite) TestStdout(c *C) {