... | ... |
@@ -46,8 +46,11 @@ var ( |
46 | 46 |
ErrTaskSetAddNode = errors.New("dm_task_set_add_node failed") |
47 | 47 |
ErrTaskSetRO = errors.New("dm_task_set_ro failed") |
48 | 48 |
ErrTaskAddTarget = errors.New("dm_task_add_target failed") |
49 |
+ ErrTaskSetSector = errors.New("dm_task_set_sector failed") |
|
49 | 50 |
ErrGetInfo = errors.New("dm_task_get_info failed") |
50 | 51 |
ErrGetDriverVersion = errors.New("dm_task_get_driver_version failed") |
52 |
+ ErrTaskSetCookie = errors.New("dm_task_set_cookie failed") |
|
53 |
+ ErrNilCookie = errors.New("cookie ptr can't be nil") |
|
51 | 54 |
ErrAttachLoopbackDevice = errors.New("loopback mounting failed") |
52 | 55 |
ErrGetBlockSize = errors.New("Can't get block size") |
53 | 56 |
ErrUdevWait = errors.New("wait on udev cookie failed") |
... | ... |
@@ -117,14 +120,17 @@ func (t *Task) SetMessage(message string) error { |
117 | 117 |
|
118 | 118 |
func (t *Task) SetSector(sector uint64) error { |
119 | 119 |
if res := DmTaskSetSector(t.unmanaged, sector); res != 1 { |
120 |
- return ErrTaskSetAddNode |
|
120 |
+ return ErrTaskSetSector |
|
121 | 121 |
} |
122 | 122 |
return nil |
123 | 123 |
} |
124 | 124 |
|
125 | 125 |
func (t *Task) SetCookie(cookie *uint, flags uint16) error { |
126 |
+ if cookie == nil { |
|
127 |
+ return ErrNilCookie |
|
128 |
+ } |
|
126 | 129 |
if res := DmTaskSetCookie(t.unmanaged, cookie, flags); res != 1 { |
127 |
- return ErrTaskSetAddNode |
|
130 |
+ return ErrTaskSetCookie |
|
128 | 131 |
} |
129 | 132 |
return nil |
130 | 133 |
} |
131 | 134 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,221 @@ |
0 |
+package devmapper |
|
1 |
+ |
|
2 |
+import ( |
|
3 |
+ "syscall" |
|
4 |
+ "testing" |
|
5 |
+) |
|
6 |
+ |
|
7 |
+func TestTaskCreate(t *testing.T) { |
|
8 |
+ // Test success |
|
9 |
+ taskCreate(t, DeviceInfo) |
|
10 |
+ |
|
11 |
+ // Test Failure |
|
12 |
+ DmTaskCreate = dmTaskCreateFail |
|
13 |
+ defer func() { DmTaskCreate = dmTaskCreateFct }() |
|
14 |
+ if task := TaskCreate(-1); task != nil { |
|
15 |
+ t.Fatalf("An error should have occured while creating an invalid task.") |
|
16 |
+ } |
|
17 |
+} |
|
18 |
+ |
|
19 |
+func TestTaskRun(t *testing.T) { |
|
20 |
+ task := taskCreate(t, DeviceInfo) |
|
21 |
+ |
|
22 |
+ // Test success |
|
23 |
+ // Perform the RUN |
|
24 |
+ if err := task.Run(); err != nil { |
|
25 |
+ t.Fatal(err) |
|
26 |
+ } |
|
27 |
+ // Make sure we don't have error with GetInfo |
|
28 |
+ if _, err := task.GetInfo(); err != nil { |
|
29 |
+ t.Fatal(err) |
|
30 |
+ } |
|
31 |
+ |
|
32 |
+ // Test failure |
|
33 |
+ DmTaskRun = dmTaskRunFail |
|
34 |
+ defer func() { DmTaskRun = dmTaskRunFct }() |
|
35 |
+ |
|
36 |
+ task = taskCreate(t, DeviceInfo) |
|
37 |
+ // Perform the RUN |
|
38 |
+ if err := task.Run(); err == nil { |
|
39 |
+ t.Fatalf("An error should have occured while running task.") |
|
40 |
+ } |
|
41 |
+ // Make sure GetInfo also fails |
|
42 |
+ if _, err := task.GetInfo(); err == nil { |
|
43 |
+ t.Fatalf("GetInfo should fail if task.Run() failed.") |
|
44 |
+ } |
|
45 |
+} |
|
46 |
+ |
|
47 |
+func TestTaskSetName(t *testing.T) { |
|
48 |
+ task := taskCreate(t, DeviceInfo) |
|
49 |
+ |
|
50 |
+ // Test success |
|
51 |
+ if err := task.SetName("test"); err != nil { |
|
52 |
+ t.Fatal(err) |
|
53 |
+ } |
|
54 |
+ |
|
55 |
+ // Test failure |
|
56 |
+ DmTaskSetName = dmTaskSetNameFail |
|
57 |
+ defer func() { DmTaskSetName = dmTaskSetNameFct }() |
|
58 |
+ if err := task.SetName("test"); err != ErrTaskSetName { |
|
59 |
+ t.Fatalf("An error should have occured while runnign SetName.") |
|
60 |
+ } |
|
61 |
+} |
|
62 |
+ |
|
63 |
+func TestTaskSetMessage(t *testing.T) { |
|
64 |
+ task := taskCreate(t, DeviceInfo) |
|
65 |
+ |
|
66 |
+ // Test success |
|
67 |
+ if err := task.SetMessage("test"); err != nil { |
|
68 |
+ t.Fatal(err) |
|
69 |
+ } |
|
70 |
+ |
|
71 |
+ // Test failure |
|
72 |
+ DmTaskSetMessage = dmTaskSetMessageFail |
|
73 |
+ defer func() { DmTaskSetMessage = dmTaskSetMessageFct }() |
|
74 |
+ if err := task.SetMessage("test"); err != ErrTaskSetMessage { |
|
75 |
+ t.Fatalf("An error should have occured while runnign SetMessage.") |
|
76 |
+ } |
|
77 |
+} |
|
78 |
+ |
|
79 |
+func TestTaskSetSector(t *testing.T) { |
|
80 |
+ task := taskCreate(t, DeviceInfo) |
|
81 |
+ |
|
82 |
+ // Test success |
|
83 |
+ if err := task.SetSector(128); err != nil { |
|
84 |
+ t.Fatal(err) |
|
85 |
+ } |
|
86 |
+ |
|
87 |
+ DmTaskSetSector = dmTaskSetSectorFail |
|
88 |
+ defer func() { DmTaskSetSector = dmTaskSetSectorFct }() |
|
89 |
+ |
|
90 |
+ // Test failure |
|
91 |
+ if err := task.SetSector(0); err != ErrTaskSetSector { |
|
92 |
+ t.Fatalf("An error should have occured while running SetSector.") |
|
93 |
+ } |
|
94 |
+} |
|
95 |
+ |
|
96 |
+func TestTaskSetCookie(t *testing.T) { |
|
97 |
+ var ( |
|
98 |
+ cookie uint = 0 |
|
99 |
+ task = taskCreate(t, DeviceInfo) |
|
100 |
+ ) |
|
101 |
+ |
|
102 |
+ // Test success |
|
103 |
+ if err := task.SetCookie(&cookie, 0); err != nil { |
|
104 |
+ t.Fatal(err) |
|
105 |
+ } |
|
106 |
+ |
|
107 |
+ // Test failure |
|
108 |
+ if err := task.SetCookie(nil, 0); err != ErrNilCookie { |
|
109 |
+ t.Fatalf("An error should have occured while running SetCookie with nil cookie.") |
|
110 |
+ } |
|
111 |
+ |
|
112 |
+ DmTaskSetCookie = dmTaskSetCookieFail |
|
113 |
+ defer func() { DmTaskSetCookie = dmTaskSetCookieFct }() |
|
114 |
+ |
|
115 |
+ if err := task.SetCookie(&cookie, 0); err != ErrTaskSetCookie { |
|
116 |
+ t.Fatalf("An error should have occured while running SetCookie.") |
|
117 |
+ } |
|
118 |
+} |
|
119 |
+ |
|
120 |
+func TestTaskSetAddNode(t *testing.T) { |
|
121 |
+ task := taskCreate(t, DeviceInfo) |
|
122 |
+ if err := task.SetAddNode(0); err != nil { |
|
123 |
+ t.Fatal(err) |
|
124 |
+ } |
|
125 |
+} |
|
126 |
+ |
|
127 |
+func TestTaskSetRo(t *testing.T) { |
|
128 |
+ task := taskCreate(t, DeviceInfo) |
|
129 |
+ if err := task.SetRo(); err != nil { |
|
130 |
+ t.Fatal(err) |
|
131 |
+ } |
|
132 |
+} |
|
133 |
+ |
|
134 |
+func TestTaskAddTarget(t *testing.T) { |
|
135 |
+ // task := taskCreate(t, DeviceInfo) |
|
136 |
+} |
|
137 |
+ |
|
138 |
+/// Utils |
|
139 |
+func taskCreate(t *testing.T, taskType TaskType) *Task { |
|
140 |
+ task := TaskCreate(taskType) |
|
141 |
+ if task == nil { |
|
142 |
+ t.Fatalf("Error creating task") |
|
143 |
+ } |
|
144 |
+ return task |
|
145 |
+} |
|
146 |
+ |
|
147 |
+/// Failure function replacement |
|
148 |
+func dmTaskCreateFail(t int) *CDmTask { |
|
149 |
+ return nil |
|
150 |
+} |
|
151 |
+ |
|
152 |
+func dmTaskRunFail(task *CDmTask) int { |
|
153 |
+ return -1 |
|
154 |
+} |
|
155 |
+ |
|
156 |
+func dmTaskSetNameFail(task *CDmTask, name string) int { |
|
157 |
+ return -1 |
|
158 |
+} |
|
159 |
+ |
|
160 |
+func dmTaskSetMessageFail(task *CDmTask, message string) int { |
|
161 |
+ return -1 |
|
162 |
+} |
|
163 |
+ |
|
164 |
+func dmTaskSetSectorFail(task *CDmTask, sector uint64) int { |
|
165 |
+ return -1 |
|
166 |
+} |
|
167 |
+ |
|
168 |
+func dmTaskSetCookieFail(task *CDmTask, cookie *uint, flags uint16) int { |
|
169 |
+ return -1 |
|
170 |
+} |
|
171 |
+ |
|
172 |
+func dmTaskSetAddNodeFail(task *CDmTask, addNode AddNodeType) int { |
|
173 |
+ return -1 |
|
174 |
+} |
|
175 |
+ |
|
176 |
+func dmTaskSetRoFail(task *CDmTask) int { |
|
177 |
+ return -1 |
|
178 |
+} |
|
179 |
+ |
|
180 |
+func dmTaskAddTargetFail(task *CDmTask, |
|
181 |
+ start, size uint64, ttype, params string) int { |
|
182 |
+ return -1 |
|
183 |
+} |
|
184 |
+ |
|
185 |
+func dmTaskGetDriverVersionFail(task *CDmTask, version *string) int { |
|
186 |
+ return -1 |
|
187 |
+} |
|
188 |
+ |
|
189 |
+func dmTaskGetInfoFail(task *CDmTask, info *Info) int { |
|
190 |
+ return -1 |
|
191 |
+} |
|
192 |
+ |
|
193 |
+func dmGetNextTargetFail(task *CDmTask, next uintptr, start, length *uint64, |
|
194 |
+ target, params *string) uintptr { |
|
195 |
+ return 0 |
|
196 |
+} |
|
197 |
+ |
|
198 |
+func dmAttachLoopDeviceFail(filename string, fd *int) string { |
|
199 |
+ return "" |
|
200 |
+} |
|
201 |
+ |
|
202 |
+func sysGetBlockSizeFail(fd uintptr, size *uint64) syscall.Errno { |
|
203 |
+ return 1 |
|
204 |
+} |
|
205 |
+ |
|
206 |
+func dmGetBlockSizeFail(fd uintptr) int64 { |
|
207 |
+ return -1 |
|
208 |
+} |
|
209 |
+ |
|
210 |
+func dmUdevWaitFail(cookie uint) int { |
|
211 |
+ return -1 |
|
212 |
+} |
|
213 |
+ |
|
214 |
+func dmSetDevDirFail(dir string) int { |
|
215 |
+ return -1 |
|
216 |
+} |
|
217 |
+ |
|
218 |
+func dmGetLibraryVersionFail(version *string) int { |
|
219 |
+ return -1 |
|
220 |
+} |
... | ... |
@@ -127,9 +127,8 @@ static int64_t get_block_size(int fd) |
127 | 127 |
|
128 | 128 |
extern void DevmapperLogCallback(int level, char *file, int line, int dm_errno_or_class, char *str); |
129 | 129 |
|
130 |
-static void |
|
131 |
-log_cb(int level, const char *file, int line, |
|
132 |
- int dm_errno_or_class, const char *f, ...) |
|
130 |
+static void log_cb(int level, const char *file, int line, |
|
131 |
+ int dm_errno_or_class, const char *f, ...) |
|
133 | 132 |
{ |
134 | 133 |
char buffer[256]; |
135 | 134 |
va_list ap; |
... | ... |
@@ -141,8 +140,7 @@ log_cb(int level, const char *file, int line, |
141 | 141 |
DevmapperLogCallback(level, (char *)file, line, dm_errno_or_class, buffer); |
142 | 142 |
} |
143 | 143 |
|
144 |
-static void |
|
145 |
-log_with_errno_init () |
|
144 |
+static void log_with_errno_init() |
|
146 | 145 |
{ |
147 | 146 |
dm_log_with_errno_init(log_cb); |
148 | 147 |
} |