1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: Apache-2.0
17 "git.arvados.org/arvados.git/lib/controller/rpc"
18 "git.arvados.org/arvados.git/lib/crunchrun"
19 "git.arvados.org/arvados.git/sdk/go/arvados"
20 "git.arvados.org/arvados.git/sdk/go/arvadostest"
21 check "gopkg.in/check.v1"
24 func (s *ClientSuite) TestShellGatewayNotAvailable(c *check.C) {
25 var stdout, stderr bytes.Buffer
26 cmd := exec.Command("go", "run", ".", "shell", arvadostest.QueuedContainerUUID, "-o", "controlpath=none", "echo", "ok")
27 cmd.Env = append(cmd.Env, os.Environ()...)
28 cmd.Env = append(cmd.Env, "ARVADOS_API_TOKEN="+arvadostest.ActiveTokenV2)
31 c.Check(cmd.Run(), check.NotNil)
32 c.Log(stderr.String())
33 c.Check(stderr.String(), check.Matches, `(?ms).*container is not running yet \(state is "Queued"\).*`)
36 func (s *ClientSuite) TestShellGateway(c *check.C) {
38 c.Check(arvados.NewClientFromEnv().RequestAndDecode(nil, "POST", "database/reset", nil, nil), check.IsNil)
40 uuid := arvadostest.QueuedContainerUUID
41 h := hmac.New(sha256.New, []byte(arvadostest.SystemRootToken))
43 authSecret := fmt.Sprintf("%x", h.Sum(nil))
44 dcid := "theperthcountyconspiracy"
45 gw := crunchrun.Gateway{
46 DockerContainerID: &dcid,
49 AuthSecret: authSecret,
52 c.Assert(err, check.IsNil)
54 rpcconn := rpc.NewConn("",
57 Host: os.Getenv("ARVADOS_API_HOST"),
60 func(context.Context) ([]string, error) {
61 return []string{arvadostest.SystemRootToken}, nil
63 _, err = rpcconn.ContainerUpdate(context.TODO(), arvados.UpdateOptions{UUID: uuid, Attrs: map[string]interface{}{
64 "state": arvados.ContainerStateLocked,
66 c.Assert(err, check.IsNil)
67 _, err = rpcconn.ContainerUpdate(context.TODO(), arvados.UpdateOptions{UUID: uuid, Attrs: map[string]interface{}{
68 "state": arvados.ContainerStateRunning,
69 "gateway_address": gw.Address,
71 c.Assert(err, check.IsNil)
73 var stdout, stderr bytes.Buffer
74 cmd := exec.Command("go", "run", ".", "shell", uuid, "-o", "controlpath=none", "-o", "userknownhostsfile="+c.MkDir()+"/known_hosts", "echo", "ok")
75 cmd.Env = append(cmd.Env, os.Environ()...)
76 cmd.Env = append(cmd.Env, "ARVADOS_API_TOKEN="+arvadostest.ActiveTokenV2)
79 c.Check(cmd.Run(), check.NotNil)
80 c.Log(stderr.String())
81 c.Check(stderr.String(), check.Matches, `(?ms).*(No such container: theperthcountyconspiracy|exec: \"docker\": executable file not found in \$PATH).*`)