8784: Fix test for latest firefox.
[arvados.git] / sdk / go / arvados / collection_fs_test.go
1 package arvados
2
3 import (
4         "io"
5         "net/http"
6         "os"
7         "testing"
8
9         "git.curoverse.com/arvados.git/sdk/go/arvadostest"
10         check "gopkg.in/check.v1"
11 )
12
13 var _ = check.Suite(&CollectionFSSuite{})
14
15 type CollectionFSSuite struct {
16         client *Client
17         coll   Collection
18         fs     http.FileSystem
19 }
20
21 func (s *CollectionFSSuite) SetUpTest(c *check.C) {
22         s.client = NewClientFromEnv()
23         err := s.client.RequestAndDecode(&s.coll, "GET", "arvados/v1/collections/"+arvadostest.FooAndBarFilesInDirUUID, nil, nil)
24         c.Assert(err, check.IsNil)
25         s.fs = s.coll.FileSystem(s.client, nil)
26 }
27
28 func (s *CollectionFSSuite) TestReaddirFull(c *check.C) {
29         f, err := s.fs.Open("/dir1")
30         c.Assert(err, check.IsNil)
31
32         st, err := f.Stat()
33         c.Assert(err, check.IsNil)
34         c.Check(st.Size(), check.Equals, int64(2))
35         c.Check(st.IsDir(), check.Equals, true)
36
37         fis, err := f.Readdir(0)
38         c.Check(err, check.IsNil)
39         c.Check(len(fis), check.Equals, 2)
40         if len(fis) > 0 {
41                 c.Check(fis[0].Size(), check.Equals, int64(3))
42         }
43 }
44
45 func (s *CollectionFSSuite) TestReaddirLimited(c *check.C) {
46         f, err := s.fs.Open("./dir1")
47         c.Assert(err, check.IsNil)
48
49         fis, err := f.Readdir(1)
50         c.Check(err, check.IsNil)
51         c.Check(len(fis), check.Equals, 1)
52         if len(fis) > 0 {
53                 c.Check(fis[0].Size(), check.Equals, int64(3))
54         }
55
56         fis, err = f.Readdir(1)
57         c.Check(err, check.Equals, io.EOF)
58         c.Check(len(fis), check.Equals, 1)
59         if len(fis) > 0 {
60                 c.Check(fis[0].Size(), check.Equals, int64(3))
61         }
62
63         fis, err = f.Readdir(1)
64         c.Check(len(fis), check.Equals, 0)
65         c.Check(err, check.NotNil)
66         c.Check(err, check.Equals, io.EOF)
67
68         f, err = s.fs.Open("dir1")
69         c.Assert(err, check.IsNil)
70         fis, err = f.Readdir(1)
71         c.Check(len(fis), check.Equals, 1)
72         c.Assert(err, check.IsNil)
73         fis, err = f.Readdir(2)
74         c.Check(len(fis), check.Equals, 1)
75         c.Assert(err, check.Equals, io.EOF)
76         fis, err = f.Readdir(2)
77         c.Check(len(fis), check.Equals, 0)
78         c.Assert(err, check.Equals, io.EOF)
79 }
80
81 func (s *CollectionFSSuite) TestPathMunge(c *check.C) {
82         for _, path := range []string{".", "/", "./", "///", "/../", "/./.."} {
83                 f, err := s.fs.Open(path)
84                 c.Assert(err, check.IsNil)
85
86                 st, err := f.Stat()
87                 c.Assert(err, check.IsNil)
88                 c.Check(st.Size(), check.Equals, int64(1))
89                 c.Check(st.IsDir(), check.Equals, true)
90         }
91         for _, path := range []string{"/dir1", "dir1", "./dir1", "///dir1//.//", "../dir1/../dir1/"} {
92                 c.Logf("%q", path)
93                 f, err := s.fs.Open(path)
94                 c.Assert(err, check.IsNil)
95
96                 st, err := f.Stat()
97                 c.Assert(err, check.IsNil)
98                 c.Check(st.Size(), check.Equals, int64(2))
99                 c.Check(st.IsDir(), check.Equals, true)
100         }
101 }
102
103 func (s *CollectionFSSuite) TestNotExist(c *check.C) {
104         for _, path := range []string{"/no", "no", "./no", "n/o", "/n/o"} {
105                 f, err := s.fs.Open(path)
106                 c.Assert(f, check.IsNil)
107                 c.Assert(err, check.NotNil)
108                 c.Assert(os.IsNotExist(err), check.Equals, true)
109         }
110 }
111
112 func (s *CollectionFSSuite) TestOpenFile(c *check.C) {
113         c.Skip("cannot test files with nil keepclient")
114
115         f, err := s.fs.Open("/foo.txt")
116         c.Assert(err, check.IsNil)
117         st, err := f.Stat()
118         c.Assert(err, check.IsNil)
119         c.Check(st.Size(), check.Equals, int64(3))
120 }
121
122 // Gocheck boilerplate
123 func Test(t *testing.T) {
124         check.TestingT(t)
125 }