Browse code

Add devmapper_test.go

Guillaume J. Charmes authored on 2013/11/14 08:35:52
Showing 3 changed files
... ...
@@ -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
 }