13111: Improve deadlock prevention. Prevent unsupported renames.
[arvados.git] / sdk / go / arvados / fs_site_test.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package arvados
6
7 import (
8         "net/http"
9         "os"
10
11         "git.curoverse.com/arvados.git/sdk/go/arvadostest"
12         check "gopkg.in/check.v1"
13 )
14
15 var _ = check.Suite(&SiteFSSuite{})
16
17 type SiteFSSuite struct {
18         client *Client
19         fs     FileSystem
20         kc     keepClient
21 }
22
23 func (s *SiteFSSuite) SetUpTest(c *check.C) {
24         s.client = NewClientFromEnv()
25         s.kc = &keepClientStub{
26                 blocks: map[string][]byte{
27                         "3858f62230ac3c915f300c664312c63f": []byte("foobar"),
28                 }}
29         s.fs = s.client.SiteFileSystem(s.kc)
30 }
31
32 func (s *SiteFSSuite) TestHttpFileSystemInterface(c *check.C) {
33         _, ok := s.fs.(http.FileSystem)
34         c.Check(ok, check.Equals, true)
35 }
36
37 func (s *SiteFSSuite) TestByIDEmpty(c *check.C) {
38         f, err := s.fs.Open("/by_id")
39         c.Assert(err, check.IsNil)
40         fis, err := f.Readdir(-1)
41         c.Check(len(fis), check.Equals, 0)
42 }
43
44 func (s *SiteFSSuite) TestByUUID(c *check.C) {
45         f, err := s.fs.Open("/by_id")
46         c.Assert(err, check.IsNil)
47         fis, err := f.Readdir(-1)
48         c.Check(err, check.IsNil)
49         c.Check(len(fis), check.Equals, 0)
50
51         err = s.fs.Mkdir("/by_id/"+arvadostest.FooCollection, 0755)
52         c.Check(err, check.Equals, os.ErrExist)
53
54         f, err = s.fs.Open("/by_id/" + arvadostest.NonexistentCollection)
55         c.Assert(err, check.Equals, os.ErrNotExist)
56
57         f, err = s.fs.Open("/by_id/" + arvadostest.FooCollection)
58         c.Assert(err, check.IsNil)
59         fis, err = f.Readdir(-1)
60         var names []string
61         for _, fi := range fis {
62                 names = append(names, fi.Name())
63         }
64         c.Check(names, check.DeepEquals, []string{"foo"})
65
66         _, err = s.fs.OpenFile("/by_id/"+arvadostest.NonexistentCollection, os.O_RDWR|os.O_CREATE, 0755)
67         c.Check(err, check.Equals, ErrInvalidOperation)
68         err = s.fs.Rename("/by_id/"+arvadostest.FooCollection, "/by_id/beep")
69         c.Check(err, check.Equals, ErrInvalidArgument)
70         err = s.fs.Rename("/by_id/"+arvadostest.FooCollection+"/foo", "/by_id/beep")
71         c.Check(err, check.Equals, ErrInvalidArgument)
72         _, err = s.fs.Stat("/by_id/beep")
73         c.Check(err, check.Equals, os.ErrNotExist)
74         err = s.fs.Rename("/by_id/"+arvadostest.FooCollection+"/foo", "/by_id/"+arvadostest.FooCollection+"/bar")
75         c.Check(err, check.IsNil)
76
77         err = s.fs.Rename("/by_id", "/beep")
78         c.Check(err, check.Equals, ErrInvalidArgument)
79 }