1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
12 "git.arvados.org/arvados.git/sdk/go/arvados"
13 dockercontainer "github.com/docker/docker/api/types/container"
17 var _ = Suite(&dockerSuite{})
19 type dockerSuite struct {
23 func (s *dockerSuite) SetUpSuite(c *C) {
24 _, err := exec.LookPath("docker")
26 c.Skip("looks like docker is not installed")
28 s.newExecutor = func(c *C) {
29 exec.Command("docker", "rm", "zzzzz-zzzzz-zzzzzzzzzzzzzzz").Run()
31 s.executor, err = newDockerExecutor("zzzzz-zzzzz-zzzzzzzzzzzzzzz", c.Logf, time.Second/2)
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)
40 err = s.executor.LoadImage("", imagefile, arvados.Container{}, "", nil)
41 c.Assert(err, ErrorMatches, "ImageLoad: unexpected EOF")
44 var _ = Suite(&dockerStubSuite{})
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{}
50 func (s *dockerStubSuite) TestDockerContainerConfig(c *C) {
51 e, err := newDockerExecutor("zzzzz-zzzzz-zzzzzzzzzzzzzzz", c.Logf, time.Second/2)
53 cfg, hostCfg := e.config(containerSpec{
56 WorkingDir: "/WorkingDir",
57 Env: map[string]string{"FOO": "bar"},
58 BindMounts: map[string]bindmount{"/mnt": {HostPath: "/hostpath", ReadOnly: true}},
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{{
73 Capabilities: [][]string{{"gpu", "nvidia", "compute", "utility"}},