forked from zach-klippenstein/adbfs
/
adb_file_test.go
101 lines (83 loc) · 2.5 KB
/
adb_file_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package adbfs
import (
"testing"
"github.com/hanwen/go-fuse/fuse"
"github.com/hanwen/go-fuse/fuse/nodefs"
"github.com/stretchr/testify/assert"
"github.com/zach-klippenstein/goadb/util"
)
func TestAdbFile_InnerFile(t *testing.T) {
file := getAdbFile(NewAdbFile(AdbFileOpenOptions{
FileBuffer: testSingleRegularFileBuffer(t, ""),
}))
assert.NotNil(t, file.InnerFile())
assert.IsType(t, &WrappingFile{}, file.InnerFile())
}
func TestAdbFile_Release(t *testing.T) {
fileBuf := testSingleRegularFileBuffer(t, "")
fileBuf.IncRefCount()
file := getAdbFile(NewAdbFile(AdbFileOpenOptions{
FileBuffer: fileBuf,
}))
file.Release()
assert.Equal(t, 0, fileBuf.RefCount())
}
func TestAdbFile_GetAttr(t *testing.T) {
file := getAdbFile(NewAdbFile(AdbFileOpenOptions{
FileBuffer: testSingleRegularFileBuffer(t, ""),
}))
attr := new(fuse.Attr)
status := file.GetAttr(attr)
assertStatusOk(t, status)
assert.Equal(t, osFileModeToFuseFileMode(0664), attr.Mode)
}
func TestAdbFile_Fsync(t *testing.T) {
fileBuf := testSingleRegularFileBuffer(t, "hello")
file := getAdbFile(NewAdbFile(AdbFileOpenOptions{
FileBuffer: fileBuf,
}))
assert.Equal(t, "hello", fileBuf.Contents())
// Success.
fileBuf.Client.(*delegateDeviceClient).openRead = openReadString("world")
status := file.Fsync(0)
assertStatusOk(t, status)
assert.Equal(t, "world", fileBuf.Contents())
// Failure.
fileBuf.Client.(*delegateDeviceClient).openRead = openReadError(util.Errorf(util.NetworkError, ""))
status = file.Fsync(0)
assert.Equal(t, fuse.EIO, status)
assert.Equal(t, "world", fileBuf.Contents())
}
func TestAdbFile_ReadWrOnly(t *testing.T) {
file := getAdbFile(NewAdbFile(AdbFileOpenOptions{
Flags: O_WRONLY,
FileBuffer: testSingleRegularFileBuffer(t, "hello world"),
}))
result, status := file.Read(make([]byte, 5), 0)
assert.Equal(t, fuse.EPERM, status)
assert.Equal(t, 0, result.Size())
contents, status := result.Bytes(nil)
assert.Equal(t, fuse.EPERM, status)
assert.Empty(t, contents)
}
func TestAdbFile_Read(t *testing.T) {
file := getAdbFile(NewAdbFile(AdbFileOpenOptions{
FileBuffer: testSingleRegularFileBuffer(t, "hello world"),
}))
result, status := file.Read(make([]byte, 1024), 0)
assertStatusOk(t, status)
contents, status := result.Bytes(nil)
assertStatusOk(t, status)
assert.Equal(t, "hello world", string(contents))
}
func getAdbFile(file nodefs.File) *AdbFile {
for {
if file, ok := file.(*AdbFile); ok {
return file
}
if file == nil {
panic("no AdbFile")
}
file = file.InnerFile()
}
}