-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcopy_test.go
155 lines (143 loc) · 3.38 KB
/
copy_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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// Copyright 2017 The go-darwin Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build darwin
package apfs
import (
"os"
"path/filepath"
"testing"
)
func TestCopyFile(t *testing.T) {
type args struct {
src string
dst string
state COPYFILE_STATE
flag COPYFILE_FLAG
}
tests := []struct {
name string
args args
want bool
wantErr bool
}{
{
name: "both file in apfs",
args: args{
src: testFile,
dst: filepath.Join(mountPoint, "copyfile.txt"),
state: CopyFileStateAlloc(),
flag: COPYFILE_CLONE,
},
want: true,
wantErr: false,
},
{
name: "src file not in apfs",
args: args{
src: testFileGolden,
dst: filepath.Join(mountPoint, "copyfile2.txt"),
state: CopyFileStateAlloc(),
flag: COPYFILE_CLONE,
},
want: false,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer CopyFileStateFree(tt.args.state)
got, err := CopyFile(tt.args.src, tt.args.dst, tt.args.state, tt.args.flag)
if (err != nil) != tt.wantErr {
t.Errorf("CopyFile(%v, %v, %v, %v) error = %v, wantErr %v", tt.args.src, tt.args.dst, tt.args.state, tt.args.flag, err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("CopyFile(%v, %v, %v, %v) = %v, want %v", tt.args.src, tt.args.dst, tt.args.state, tt.args.flag, got, tt.want)
}
})
}
}
func TestFcopyFile(t *testing.T) {
type args struct {
src uintptr
dst uintptr
state COPYFILE_STATE
flag COPYFILE_FLAG
}
tests := []struct {
name string
args args
srcFile string
dstFile string
wantErr bool
}{
{
name: "both file in apfs",
args: args{
state: CopyFileStateAlloc(),
flag: COPYFILE_DATA,
},
srcFile: testFile,
dstFile: filepath.Join(mountPoint, "fcopyfile.txt"),
wantErr: false,
},
{
name: "src file not in apfs",
args: args{
state: CopyFileStateAlloc(),
flag: COPYFILE_DATA,
},
srcFile: testFileGolden,
dstFile: filepath.Join(mountPoint, "fcopyfile2.txt"),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer CopyFileStateFree(tt.args.state)
srcFd, err := os.Open(tt.srcFile)
if err != nil {
t.Fatal(err)
}
defer srcFd.Close()
tt.args.src = srcFd.Fd()
dstFd, err := os.Create(tt.dstFile)
if err != nil {
t.Fatal(err)
}
defer dstFd.Close()
tt.args.dst = dstFd.Fd()
if err := FcopyFile(tt.args.src, tt.args.dst, tt.args.state, tt.args.flag); (err != nil) != tt.wantErr {
t.Errorf("FcopyFile(%v, %v, %v, %v) error = %v, wantErr %v", tt.args.src, tt.args.dst, tt.args.state, tt.args.flag, err, tt.wantErr)
}
})
}
}
// TODO(zchee): implements test
func TestCopyFileStateAlloc(t *testing.T) {}
func TestCopyFileStateFree(t *testing.T) {
type args struct {
state COPYFILE_STATE
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "simple",
args: args{state: CopyFileStateAlloc()},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := CopyFileStateFree(tt.args.state); (err != nil) != tt.wantErr {
t.Errorf("CopyFileStateFree(%v) error = %v, wantErr %v", tt.args.state, err, tt.wantErr)
}
})
}
}
// TODO(zchee): implements test
func TestCopyFileStateGet(t *testing.T) {}