Merge branch 'master' into 12018-sync-groups-tool
[arvados.git] / services / keep-web / cadaver_test.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package main
6
7 import (
8         "bytes"
9         "io"
10         "os/exec"
11
12         "git.curoverse.com/arvados.git/sdk/go/arvadostest"
13         check "gopkg.in/check.v1"
14 )
15
16 func (s *IntegrationSuite) TestWebdavWithCadaver(c *check.C) {
17         basePath := "/c=" + arvadostest.FooAndBarFilesInDirUUID + "/t=" + arvadostest.ActiveToken + "/"
18         type testcase struct {
19                 path  string
20                 cmd   string
21                 match string
22         }
23         for _, trial := range []testcase{
24                 {
25                         path:  basePath,
26                         cmd:   "ls\n",
27                         match: `(?ms).*dir1 *0 .*`,
28                 },
29                 {
30                         path:  basePath,
31                         cmd:   "ls dir1\n",
32                         match: `(?ms).*bar *3.*foo *3 .*`,
33                 },
34                 {
35                         path:  basePath + "_/dir1",
36                         cmd:   "ls\n",
37                         match: `(?ms).*bar *3.*foo *3 .*`,
38                 },
39                 {
40                         path:  basePath + "dir1/",
41                         cmd:   "ls\n",
42                         match: `(?ms).*bar *3.*foo *3 .*`,
43                 },
44         } {
45                 c.Logf("%s %#v", "http://"+s.testServer.Addr, trial)
46                 cmd := exec.Command("cadaver", "http://"+s.testServer.Addr+trial.path)
47                 cmd.Stdin = bytes.NewBufferString(trial.cmd)
48                 stdout, err := cmd.StdoutPipe()
49                 c.Assert(err, check.Equals, nil)
50                 cmd.Stderr = cmd.Stdout
51                 go cmd.Start()
52
53                 var buf bytes.Buffer
54                 _, err = io.Copy(&buf, stdout)
55                 c.Check(err, check.Equals, nil)
56                 err = cmd.Wait()
57                 c.Check(err, check.Equals, nil)
58                 c.Check(buf.String(), check.Matches, trial.match)
59         }
60 }