19281: Test embedded hello-world image with docker and singularity. 19281-diagnostics-image
authorTom Clegg <tom@curii.com>
Mon, 25 Jul 2022 18:04:21 +0000 (14:04 -0400)
committerTom Clegg <tom@curii.com>
Mon, 25 Jul 2022 18:04:21 +0000 (14:04 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

lib/crunchrun/executor_test.go
lib/diagnostics/cmd.go

index ea6e610d8b7921f97532461cc75dcea4427318f6..e757f579fe957eff333892c2fc7a12de9fff82e2 100644 (file)
@@ -8,12 +8,14 @@ import (
        "bytes"
        "fmt"
        "io"
+       "io/ioutil"
        "net"
        "net/http"
        "os"
        "strings"
        "time"
 
+       "git.arvados.org/arvados.git/lib/diagnostics"
        "git.arvados.org/arvados.git/sdk/go/arvados"
        "git.arvados.org/arvados.git/sdk/go/arvadostest"
        "golang.org/x/net/context"
@@ -63,6 +65,21 @@ func (s *executorSuite) TestExecTrivialContainer(c *C) {
        c.Check(s.stderr.String(), Equals, "")
 }
 
+func (s *executorSuite) TestDiagnosticsImage(c *C) {
+       s.newExecutor(c)
+       imagefile := c.MkDir() + "/hello-world.tar"
+       err := ioutil.WriteFile(imagefile, diagnostics.HelloWorldDockerImage, 0777)
+       c.Assert(err, IsNil)
+       err = s.executor.LoadImage("", imagefile, arvados.Container{}, "", nil)
+       c.Assert(err, IsNil)
+
+       c.Logf("Using container runtime: %s", s.executor.Runtime())
+       s.spec.Image = "hello-world"
+       s.spec.Command = []string{"/hello"}
+       s.checkRun(c, 0)
+       c.Check(s.stdout.String(), Matches, `(?ms)\nHello from Docker!\n.*`)
+}
+
 func (s *executorSuite) TestExitStatus(c *C) {
        s.spec.Command = []string{"false"}
        s.checkRun(c, 1)
index b381a3c8c1195b6e75afefd97fdcb9b90d450f74..86adc325d7c9bffabd439728ced743c6ec930d58 100644 (file)
@@ -59,7 +59,7 @@ func (Command) RunCommand(prog string, args []string, stdin io.Reader, stdout, s
 
 // docker save hello-world > hello-world.tar
 //go:embed hello-world.tar
-var helloWorldDockerImage []byte
+var HelloWorldDockerImage []byte
 
 type diagnoser struct {
        stdout        io.Writer
@@ -378,7 +378,7 @@ func (diag *diagnoser) runtests() {
        // as "sha256:{...}.tar"
        var imageSHA2 string
        {
-               tr := tar.NewReader(bytes.NewReader(helloWorldDockerImage))
+               tr := tar.NewReader(bytes.NewReader(HelloWorldDockerImage))
                for {
                        hdr, err := tr.Next()
                        if err == io.EOF {
@@ -404,7 +404,7 @@ func (diag *diagnoser) runtests() {
                if collection.UUID == "" {
                        return fmt.Errorf("skipping, no test collection")
                }
-               req, err := http.NewRequestWithContext(ctx, "PUT", cluster.Services.WebDAVDownload.ExternalURL.String()+"c="+collection.UUID+"/sha256:"+imageSHA2+".tar", bytes.NewReader(helloWorldDockerImage))
+               req, err := http.NewRequestWithContext(ctx, "PUT", cluster.Services.WebDAVDownload.ExternalURL.String()+"c="+collection.UUID+"/sha256:"+imageSHA2+".tar", bytes.NewReader(HelloWorldDockerImage))
                if err != nil {
                        return fmt.Errorf("BUG? http.NewRequest: %s", err)
                }
@@ -478,7 +478,7 @@ func (diag *diagnoser) runtests() {
                        if resp.StatusCode != trial.status {
                                return fmt.Errorf("unexpected response status: %s", resp.Status)
                        }
-                       if trial.status == http.StatusOK && !bytes.Equal(body, helloWorldDockerImage) {
+                       if trial.status == http.StatusOK && !bytes.Equal(body, HelloWorldDockerImage) {
                                excerpt := body
                                if len(excerpt) > 128 {
                                        excerpt = append([]byte(nil), body[:128]...)