]> git.arvados.org - arvados.git/blob - lib/crunchrun/docker_test.go
Merge branch '23009-multiselect-bug' into main. Closes #23009
[arvados.git] / lib / crunchrun / docker_test.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package crunchrun
6
7 import (
8         "io/ioutil"
9         "os/exec"
10         "time"
11
12         "git.arvados.org/arvados.git/sdk/go/arvados"
13         dockercontainer "github.com/docker/docker/api/types/container"
14         . "gopkg.in/check.v1"
15 )
16
17 var _ = Suite(&dockerSuite{})
18
19 type dockerSuite struct {
20         executorSuite
21 }
22
23 func (s *dockerSuite) SetUpSuite(c *C) {
24         _, err := exec.LookPath("docker")
25         if err != nil {
26                 c.Skip("looks like docker is not installed")
27         }
28         s.newExecutor = func(c *C) {
29                 exec.Command("docker", "rm", "zzzzz-zzzzz-zzzzzzzzzzzzzzz").Run()
30                 var err error
31                 s.executor, err = newDockerExecutor("zzzzz-zzzzz-zzzzzzzzzzzzzzz", c.Logf, time.Second/2)
32                 c.Assert(err, IsNil)
33         }
34 }
35
36 func (s *dockerSuite) TestLoadImageError(c *C) {
37         imagefile := c.MkDir() + "/bogus-image.tar"
38         err := ioutil.WriteFile(imagefile, []byte("this is not a docker image"), 0777)
39         c.Assert(err, IsNil)
40         err = s.executor.LoadImage("", imagefile, arvados.Container{}, "", nil)
41         c.Assert(err, ErrorMatches, "ImageLoad: unexpected EOF")
42 }
43
44 var _ = Suite(&dockerStubSuite{})
45
46 // dockerStubSuite tests don't really connect to the docker service,
47 // so we can run them even if docker is not installed.
48 type dockerStubSuite struct{}
49
50 func (s *dockerStubSuite) TestDockerContainerConfig(c *C) {
51         e, err := newDockerExecutor("zzzzz-zzzzz-zzzzzzzzzzzzzzz", c.Logf, time.Second/2)
52         c.Assert(err, IsNil)
53         cfg, hostCfg := e.config(containerSpec{
54                 VCPUs:          4,
55                 RAM:            123123123,
56                 WorkingDir:     "/WorkingDir",
57                 Env:            map[string]string{"FOO": "bar"},
58                 BindMounts:     map[string]bindmount{"/mnt": {HostPath: "/hostpath", ReadOnly: true}},
59                 EnableNetwork:  false,
60                 GPUStack:       "cuda",
61                 GPUDeviceCount: 3,
62         })
63         c.Check(cfg.WorkingDir, Equals, "/WorkingDir")
64         c.Check(cfg.Env, DeepEquals, []string{"FOO=bar"})
65         c.Check(hostCfg.NetworkMode, Equals, dockercontainer.NetworkMode("none"))
66         c.Check(hostCfg.Resources.NanoCPUs, Equals, int64(4000000000))
67         c.Check(hostCfg.Resources.Memory, Equals, int64(123123123))
68         c.Check(hostCfg.Resources.MemorySwap, Equals, int64(123123123))
69         c.Check(hostCfg.Resources.KernelMemory, Equals, int64(123123123))
70         c.Check(hostCfg.Resources.DeviceRequests, DeepEquals, []dockercontainer.DeviceRequest{{
71                 Driver:       "nvidia",
72                 Count:        3,
73                 Capabilities: [][]string{{"gpu", "nvidia", "compute", "utility"}},
74         }})
75 }