1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
13 var _ = Suite(&singularitySuite{})
15 type singularitySuite struct {
19 func (s *singularitySuite) SetUpSuite(c *C) {
20 _, err := exec.LookPath("singularity")
22 c.Skip("looks like singularity is not installed")
24 s.newExecutor = func(c *C) {
26 s.executor, err = newSingularityExecutor(c.Logf)
31 func (s *singularitySuite) TestInject(c *C) {
32 path, err := exec.LookPath("nsenter")
33 if err != nil || path != "/var/lib/arvados/bin/nsenter" {
34 c.Skip("looks like /var/lib/arvados/bin/nsenter is not installed -- re-run `arvados-server install`?")
36 s.executorSuite.TestInject(c)
39 var _ = Suite(&singularityStubSuite{})
41 // singularityStubSuite tests don't really invoke singularity, so we
42 // can run them even if singularity is not installed.
43 type singularityStubSuite struct{}
45 func (s *singularityStubSuite) TestSingularityExecArgs(c *C) {
46 e, err := newSingularityExecutor(c.Logf)
48 err = e.Create(containerSpec{
49 WorkingDir: "/WorkingDir",
50 Env: map[string]string{"FOO": "bar"},
51 BindMounts: map[string]bindmount{"/mnt": {HostPath: "/hostpath", ReadOnly: true}},
56 e.imageFilename = "/fake/image.sif"
57 cmd := e.execCmd("./singularity")
58 c.Check(cmd.Args, DeepEquals, []string{"./singularity", "exec", "--containall", "--cleanenv", "--pwd", "/WorkingDir", "--net", "--network=none", "--nv", "--bind", "/hostpath:/mnt:ro", "/fake/image.sif"})
59 c.Check(cmd.Env, DeepEquals, []string{"SINGULARITYENV_FOO=bar"})