Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go-fuse
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Levin Zimmermann
go-fuse
Commits
4b3866b7
Commit
4b3866b7
authored
Nov 06, 2019
by
Han-Wen Nienhuys
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fuse/test: use posixtest where possible
Change-Id: I436dcd5f4a050ef082684af0705df9c51d6ff9e9
parent
dee95ba4
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
45 additions
and
157 deletions
+45
-157
fuse/test/loopback_test.go
fuse/test/loopback_test.go
+19
-157
posixtest/test.go
posixtest/test.go
+26
-0
No files found.
fuse/test/loopback_test.go
View file @
4b3866b7
...
@@ -22,6 +22,7 @@ import (
...
@@ -22,6 +22,7 @@ import (
"github.com/hanwen/go-fuse/v2/fuse/nodefs"
"github.com/hanwen/go-fuse/v2/fuse/nodefs"
"github.com/hanwen/go-fuse/v2/fuse/pathfs"
"github.com/hanwen/go-fuse/v2/fuse/pathfs"
"github.com/hanwen/go-fuse/v2/internal/testutil"
"github.com/hanwen/go-fuse/v2/internal/testutil"
"github.com/hanwen/go-fuse/v2/posixtest"
)
)
type
testCase
struct
{
type
testCase
struct
{
...
@@ -236,26 +237,6 @@ func TestWriteThrough(t *testing.T) {
...
@@ -236,26 +237,6 @@ func TestWriteThrough(t *testing.T) {
CompareSlices
(
t
,
slice
[
:
n
],
content
)
CompareSlices
(
t
,
slice
[
:
n
],
content
)
}
}
func
TestMkdirRmdir
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
defer
tc
.
Cleanup
()
// Mkdir/Rmdir.
if
err
:=
os
.
Mkdir
(
tc
.
mountSubdir
,
0777
);
err
!=
nil
{
t
.
Fatalf
(
"Mkdir failed: %v"
,
err
)
}
if
fi
,
err
:=
os
.
Lstat
(
tc
.
origSubdir
);
err
!=
nil
{
t
.
Fatalf
(
"Lstat(%q): %v"
,
tc
.
origSubdir
,
err
)
}
else
if
!
fi
.
IsDir
()
{
t
.
Errorf
(
"Not a directory: %v"
,
fi
)
}
if
err
:=
os
.
Remove
(
tc
.
mountSubdir
);
err
!=
nil
{
t
.
Fatalf
(
"Remove failed: %v"
,
err
)
}
}
func
TestLinkCreate
(
t
*
testing
.
T
)
{
func
TestLinkCreate
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
tc
:=
NewTestCase
(
t
)
defer
tc
.
Cleanup
()
defer
tc
.
Cleanup
()
...
@@ -399,71 +380,26 @@ func TestLinkForget(t *testing.T) {
...
@@ -399,71 +380,26 @@ func TestLinkForget(t *testing.T) {
}
}
}
}
func
TestSymlink
(
t
*
testing
.
T
)
{
func
TestPosix
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
tests
:=
[]
string
{
defer
tc
.
Cleanup
()
"SymlinkReadlink"
,
"MkdirRmdir"
,
contents
:=
[]
byte
{
1
,
2
,
3
}
"RenameOverwriteDestNoExist"
,
tc
.
WriteFile
(
tc
.
origFile
,
[]
byte
(
contents
),
0700
)
"RenameOverwriteDestExist"
,
"ReadDir"
,
linkFile
:=
"symlink-file"
"ReadDirPicksUpCreate"
,
orig
:=
"hello.txt"
err
:=
os
.
Symlink
(
orig
,
filepath
.
Join
(
tc
.
mnt
,
linkFile
))
if
err
!=
nil
{
t
.
Fatalf
(
"Symlink failed: %v"
,
err
)
}
origLink
:=
filepath
.
Join
(
tc
.
orig
,
linkFile
)
fi
,
err
:=
os
.
Lstat
(
origLink
)
if
err
!=
nil
{
t
.
Fatalf
(
"Lstat failed: %v"
,
err
)
}
if
fi
.
Mode
()
&
os
.
ModeSymlink
==
0
{
t
.
Errorf
(
"not a symlink: %v"
,
fi
)
return
}
read
,
err
:=
os
.
Readlink
(
filepath
.
Join
(
tc
.
mnt
,
linkFile
))
if
err
!=
nil
{
t
.
Fatalf
(
"Readlink failed: %v"
,
err
)
}
if
read
!=
orig
{
t
.
Errorf
(
"unexpected symlink value '%v'"
,
read
)
}
}
func
TestRename
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
defer
tc
.
Cleanup
()
contents
:=
[]
byte
{
1
,
2
,
3
}
tc
.
WriteFile
(
tc
.
origFile
,
[]
byte
(
contents
),
0700
)
sd
:=
tc
.
mnt
+
"/testRename"
tc
.
Mkdir
(
sd
,
0777
)
subFile
:=
sd
+
"/subfile"
if
err
:=
os
.
Rename
(
tc
.
mountFile
,
subFile
);
err
!=
nil
{
t
.
Fatalf
(
"Rename failed: %v"
,
err
)
}
f
,
_
:=
os
.
Lstat
(
tc
.
origFile
)
if
f
!=
nil
{
t
.
Errorf
(
"original %v still exists."
,
tc
.
origFile
)
}
}
if
_
,
err
:=
os
.
Lstat
(
subFile
);
err
!=
nil
{
for
_
,
k
:=
range
tests
{
t
.
Errorf
(
"destination %q does not exist: %v"
,
subFile
,
err
)
f
:=
posixtest
.
All
[
k
]
if
f
==
nil
{
t
.
Fatalf
(
"test %s missing"
,
k
)
}
}
}
t
.
Run
(
k
,
func
(
t
*
testing
.
T
)
{
func
TestRenameNonExistent
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
tc
:=
NewTestCase
(
t
)
defer
tc
.
Cleanup
()
defer
tc
.
Cleanup
()
err
:=
os
.
Rename
(
tc
.
mnt
+
"/doesnotexist"
,
tc
.
mnt
+
"/doesnotmatter"
)
f
(
t
,
tc
.
mnt
)
if
!
os
.
IsNotExist
(
err
)
{
})
t
.
Errorf
(
"got err %v, want ENOENT"
,
err
)
}
}
}
}
...
@@ -495,24 +431,6 @@ func TestDelRename(t *testing.T) {
...
@@ -495,24 +431,6 @@ func TestDelRename(t *testing.T) {
}
}
}
}
func
TestOverwriteRename
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
defer
tc
.
Cleanup
()
sd
:=
tc
.
mnt
+
"/testOverwriteRename"
tc
.
Mkdir
(
sd
,
0755
)
d
:=
sd
+
"/dest"
tc
.
WriteFile
(
d
,
[]
byte
(
"blabla"
),
0644
)
s
:=
sd
+
"/src"
tc
.
WriteFile
(
s
,
[]
byte
(
"blabla"
),
0644
)
if
err
:=
os
.
Rename
(
s
,
d
);
err
!=
nil
{
t
.
Fatalf
(
"Rename failed: %v"
,
err
)
}
}
func
TestAccess
(
t
*
testing
.
T
)
{
func
TestAccess
(
t
*
testing
.
T
)
{
if
os
.
Geteuid
()
==
0
{
if
os
.
Geteuid
()
==
0
{
t
.
Log
(
"Skipping TestAccess() as root."
)
t
.
Log
(
"Skipping TestAccess() as root."
)
...
@@ -558,44 +476,6 @@ func TestMknod(t *testing.T) {
...
@@ -558,44 +476,6 @@ func TestMknod(t *testing.T) {
}
}
}
}
func
TestReaddir
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
defer
tc
.
Cleanup
()
contents
:=
[]
byte
{
1
,
2
,
3
}
tc
.
Mkdir
(
tc
.
origSubdir
,
0777
)
dir
,
err
:=
os
.
Open
(
tc
.
mnt
)
if
err
!=
nil
{
t
.
Fatalf
(
"Open failed: %v"
,
err
)
}
defer
dir
.
Close
()
// READDIR should show "hello.txt" even if it is created after the OPENDIR.
// https://github.com/hanwen/go-fuse/issues/252
tc
.
WriteFile
(
tc
.
origFile
,
[]
byte
(
contents
),
0700
)
infos
,
err
:=
dir
.
Readdir
(
10
)
if
err
!=
nil
{
t
.
Fatalf
(
"Readdir failed: %v"
,
err
)
}
wanted
:=
map
[
string
]
bool
{
"hello.txt"
:
true
,
"subdir"
:
true
,
}
if
len
(
wanted
)
!=
len
(
infos
)
{
t
.
Errorf
(
"Wrong number of directory entries: want=%d have=%d"
,
len
(
wanted
),
len
(
infos
))
}
else
{
for
_
,
v
:=
range
infos
{
_
,
ok
:=
wanted
[
v
.
Name
()]
if
!
ok
{
t
.
Errorf
(
"Unexpected name %v"
,
v
.
Name
())
}
}
}
}
// Test that READDIR works even if the directory is renamed after the OPENDIR.
// Test that READDIR works even if the directory is renamed after the OPENDIR.
// This checks that the fix for https://github.com/hanwen/go-fuse/issues/252
// This checks that the fix for https://github.com/hanwen/go-fuse/issues/252
// does not break this case.
// does not break this case.
...
@@ -813,23 +693,6 @@ func TestLargeDirRead(t *testing.T) {
...
@@ -813,23 +693,6 @@ func TestLargeDirRead(t *testing.T) {
}
}
}
}
func
TestRootDir
(
t
*
testing
.
T
)
{
tc
:=
NewTestCase
(
t
)
defer
tc
.
Cleanup
()
d
,
err
:=
os
.
Open
(
tc
.
mnt
)
if
err
!=
nil
{
t
.
Fatalf
(
"Open failed: %v"
,
err
)
}
if
_
,
err
:=
d
.
Readdirnames
(
-
1
);
err
!=
nil
{
t
.
Fatalf
(
"Readdirnames failed: %v"
,
err
)
}
if
err
:=
d
.
Close
();
err
!=
nil
{
t
.
Fatalf
(
"Close failed: %v"
,
err
)
}
}
func
ioctl
(
fd
int
,
cmd
int
,
arg
uintptr
)
(
int
,
int
)
{
func
ioctl
(
fd
int
,
cmd
int
,
arg
uintptr
)
(
int
,
int
)
{
r0
,
_
,
e1
:=
syscall
.
Syscall
(
r0
,
_
,
e1
:=
syscall
.
Syscall
(
syscall
.
SYS_IOCTL
,
uintptr
(
fd
),
uintptr
(
cmd
),
uintptr
(
arg
))
syscall
.
SYS_IOCTL
,
uintptr
(
fd
),
uintptr
(
cmd
),
uintptr
(
arg
))
...
@@ -1001,5 +864,4 @@ func TestLookupKnownChildrenAttrCopied(t *testing.T) {
...
@@ -1001,5 +864,4 @@ func TestLookupKnownChildrenAttrCopied(t *testing.T) {
}
else
if
fi
.
Mode
()
!=
mode
{
}
else
if
fi
.
Mode
()
!=
mode
{
t
.
Fatalf
(
"got mode %o, want %o"
,
fi
.
Mode
(),
mode
)
t
.
Fatalf
(
"got mode %o, want %o"
,
fi
.
Mode
(),
mode
)
}
}
}
}
posixtest/test.go
View file @
4b3866b7
...
@@ -33,6 +33,7 @@ var All = map[string]func(*testing.T, string){
...
@@ -33,6 +33,7 @@ var All = map[string]func(*testing.T, string){
"RenameOverwriteDestNoExist"
:
RenameOverwriteDestNoExist
,
"RenameOverwriteDestNoExist"
:
RenameOverwriteDestNoExist
,
"RenameOverwriteDestExist"
:
RenameOverwriteDestExist
,
"RenameOverwriteDestExist"
:
RenameOverwriteDestExist
,
"ReadDir"
:
ReadDir
,
"ReadDir"
:
ReadDir
,
"ReadDirPicksUpCreate"
:
ReadDirPicksUpCreate
,
}
}
// SymlinkReadlink tests basic symlink functionality
// SymlinkReadlink tests basic symlink functionality
...
@@ -262,6 +263,10 @@ func Link(t *testing.T, mnt string) {
...
@@ -262,6 +263,10 @@ func Link(t *testing.T, mnt string) {
if
st
.
Ino
!=
beforeIno
{
if
st
.
Ino
!=
beforeIno
{
t
.
Errorf
(
"Lstat after: got %d, want %d"
,
st
.
Ino
,
beforeIno
)
t
.
Errorf
(
"Lstat after: got %d, want %d"
,
st
.
Ino
,
beforeIno
)
}
}
if
st
.
Nlink
!=
2
{
t
.
Errorf
(
"Expect 2 links, got %d"
,
st
.
Nlink
)
}
}
}
func
RenameOverwriteDestNoExist
(
t
*
testing
.
T
,
mnt
string
)
{
func
RenameOverwriteDestNoExist
(
t
*
testing
.
T
,
mnt
string
)
{
...
@@ -345,6 +350,27 @@ func ReadDir(t *testing.T, mnt string) {
...
@@ -345,6 +350,27 @@ func ReadDir(t *testing.T, mnt string) {
}
}
}
}
// Readdir should pick file created after open, but before readdir.
func
ReadDirPicksUpCreate
(
t
*
testing
.
T
,
mnt
string
)
{
f
,
err
:=
os
.
Open
(
mnt
)
if
err
!=
nil
{
t
.
Fatalf
(
"Open: %v"
,
err
)
}
if
err
:=
ioutil
.
WriteFile
(
mnt
+
"/file"
,
[]
byte
{
42
},
0644
);
err
!=
nil
{
t
.
Fatalf
(
"WriteFile: %v"
,
err
)
}
names
,
err
:=
f
.
Readdirnames
(
-
1
)
if
err
!=
nil
{
t
.
Fatalf
(
"ReadDir: %v"
,
err
)
}
f
.
Close
()
if
len
(
names
)
!=
1
||
names
[
0
]
!=
"file"
{
t
.
Errorf
(
"missing file created after opendir"
)
}
}
// LinkUnlinkRename implements rename with a link/unlink sequence
// LinkUnlinkRename implements rename with a link/unlink sequence
func
LinkUnlinkRename
(
t
*
testing
.
T
,
mnt
string
)
{
func
LinkUnlinkRename
(
t
*
testing
.
T
,
mnt
string
)
{
content
:=
[]
byte
(
"hello"
)
content
:=
[]
byte
(
"hello"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment