17170: Test arvados-client shell command.
authorTom Clegg <tom@curii.com>
Wed, 13 Jan 2021 05:13:48 +0000 (00:13 -0500)
committerTom Clegg <tom@curii.com>
Wed, 13 Jan 2021 05:13:48 +0000 (00:13 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

cmd/arvados-client/container_gateway.go
cmd/arvados-client/container_gateway_test.go [new file with mode: 0644]
lib/controller/rpc/conn.go

index d15b9d7b5e87c3b086b3e7f0083e5d54a3c849dd..b5fde6cf15bf6d9bc806ebfcc7a212bb9164465b 100644 (file)
@@ -143,7 +143,7 @@ Options:
                LoginUsername: loginUsername,
        })
        if err != nil {
-               fmt.Fprintln(stderr, err)
+               fmt.Fprintln(stderr, "error setting up tunnel:", err)
                return 1
        }
        defer sshconn.Conn.Close()
diff --git a/cmd/arvados-client/container_gateway_test.go b/cmd/arvados-client/container_gateway_test.go
new file mode 100644 (file)
index 0000000..deff7b1
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+package main
+
+import (
+       "bytes"
+       "os"
+       "os/exec"
+
+       "git.arvados.org/arvados.git/sdk/go/arvadostest"
+       check "gopkg.in/check.v1"
+)
+
+func (s *ClientSuite) TestShellGatewayNotAvailable(c *check.C) {
+       var stdout, stderr bytes.Buffer
+       cmd := exec.Command("go", "run", ".", "shell", arvadostest.QueuedContainerUUID, "-o", "controlpath=none", "echo", "ok")
+       cmd.Env = append(cmd.Env, os.Environ()...)
+       cmd.Env = append(cmd.Env, "ARVADOS_API_TOKEN="+arvadostest.ActiveTokenV2)
+       cmd.Stdout = &stdout
+       cmd.Stderr = &stderr
+       c.Check(cmd.Run(), check.NotNil)
+       c.Log(stderr.String())
+       c.Check(stderr.String(), check.Matches, `(?ms).*gateway is not available, container is queued.*`)
+}
index 9b2695b55117439aae32290b6a4a4e741d7e7b65..2accfd8f2f88c4245093e6c1f0b99bdb11a3de00 100644 (file)
@@ -337,13 +337,13 @@ func (conn *Conn) ContainerSSH(ctx context.Context, options arvados.ContainerSSH
        if resp.StatusCode != http.StatusSwitchingProtocols {
                defer resp.Body.Close()
                body, _ := ioutil.ReadAll(resp.Body)
-               err = fmt.Errorf("tunnel connection failed: %d %q", resp.StatusCode, body)
+               err = fmt.Errorf("server did not provide a tunnel: %d %q", resp.StatusCode, body)
                netconn.Close()
                return
        }
        if strings.ToLower(resp.Header.Get("Upgrade")) != "ssh" ||
                strings.ToLower(resp.Header.Get("Connection")) != "upgrade" {
-               err = fmt.Errorf("bad response: Upgrade %q Connection %q", resp.Header.Get("Upgrade"), resp.Header.Get("Connection"))
+               err = fmt.Errorf("bad response from server: Upgrade %q Connection %q", resp.Header.Get("Upgrade"), resp.Header.Get("Connection"))
                netconn.Close()
                return
        }