Browse code

Mock calls to system functions to facilitate unit testing

Solomon Hykes authored on 2013/11/21 05:05:10
Showing 4 changed files
... ...
@@ -344,7 +344,7 @@ func setCloseOnExec(name string) {
344 344
 			if link == name {
345 345
 				fd, err := strconv.Atoi(i.Name())
346 346
 				if err == nil {
347
-					syscall.CloseOnExec(fd)
347
+					SyscallCloseOnExec(fd)
348 348
 				}
349 349
 			}
350 350
 		}
... ...
@@ -716,7 +716,7 @@ func (devices *DeviceSet) Shutdown() error {
716 716
 
717 717
 	for path, count := range devices.activeMounts {
718 718
 		for i := count; i > 0; i-- {
719
-			if err := syscall.Unmount(path, 0); err != nil {
719
+			if err := SyscallUnmount(path, 0); err != nil {
720 720
 				utils.Debugf("Shutdown unmounting %s, error: %s\n", path, err)
721 721
 			}
722 722
 		}
... ...
@@ -758,9 +758,9 @@ func (devices *DeviceSet) MountDevice(hash, path string, readOnly bool) error {
758 758
 		flags = flags | syscall.MS_RDONLY
759 759
 	}
760 760
 
761
-	err := syscall.Mount(info.DevName(), path, "ext4", flags, "discard")
761
+	err := SyscallMount(info.DevName(), path, "ext4", flags, "discard")
762 762
 	if err != nil && err == syscall.EINVAL {
763
-		err = syscall.Mount(info.DevName(), path, "ext4", flags, "")
763
+		err = SyscallMount(info.DevName(), path, "ext4", flags, "")
764 764
 	}
765 765
 	if err != nil {
766 766
 		return fmt.Errorf("Error mounting '%s' on '%s': %s", info.DevName(), path, err)
... ...
@@ -779,7 +779,7 @@ func (devices *DeviceSet) UnmountDevice(hash, path string, deactivate bool) erro
779 779
 	defer devices.Unlock()
780 780
 
781 781
 	utils.Debugf("[devmapper] Unmount(%s)", path)
782
-	if err := syscall.Unmount(path, 0); err != nil {
782
+	if err := SyscallUnmount(path, 0); err != nil {
783 783
 		utils.Debugf("\n--->Err: %s\n", err)
784 784
 		return err
785 785
 	}
... ...
@@ -216,7 +216,7 @@ func FindLoopDeviceFor(file *os.File) *os.File {
216 216
 	for i := 0; true; i++ {
217 217
 		path := fmt.Sprintf("/dev/loop%d", i)
218 218
 
219
-		file, err := os.OpenFile(path, os.O_RDWR, 0)
219
+		file, err := OSOpenFile(path, os.O_RDWR, 0)
220 220
 		if err != nil {
221 221
 			if os.IsNotExist(err) {
222 222
 				return nil
... ...
@@ -241,19 +241,19 @@ func dmTaskAddTargetFct(task *CDmTask,
241 241
 
242 242
 func dmGetLoopbackBackingFile(fd uintptr) (uint64, uint64, syscall.Errno) {
243 243
 	var lo64 C.struct_loop_info64
244
-	_, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, C.LOOP_GET_STATUS64,
244
+	_, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.LOOP_GET_STATUS64,
245 245
 		uintptr(unsafe.Pointer(&lo64)))
246 246
 	return uint64(lo64.lo_device), uint64(lo64.lo_inode), err
247 247
 }
248 248
 
249 249
 func dmLoopbackSetCapacity(fd uintptr) syscall.Errno {
250
-	_, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, C.LOOP_SET_CAPACITY, 0)
250
+	_, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.LOOP_SET_CAPACITY, 0)
251 251
 	return err
252 252
 }
253 253
 
254 254
 func dmGetBlockSizeFct(fd uintptr) (int64, syscall.Errno) {
255 255
 	var size int64
256
-	_, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, C.BLKGETSIZE64,
256
+	_, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.BLKGETSIZE64,
257 257
 		uintptr(unsafe.Pointer(&size)))
258 258
 	return size, err
259 259
 }
... ...
@@ -308,7 +308,7 @@ func dmAttachLoopDeviceFct(filename string, fd *int) string {
308 308
 }
309 309
 
310 310
 func getBlockSizeFct(fd uintptr, size *uint64) syscall.Errno {
311
-	_, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, C.BLKGETSIZE64,
311
+	_, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.BLKGETSIZE64,
312 312
 		uintptr(unsafe.Pointer(&size)))
313 313
 	return err
314 314
 }
315 315
new file mode 100644
... ...
@@ -0,0 +1,15 @@
0
+package devmapper
1
+
2
+
3
+import (
4
+	"syscall"
5
+)
6
+
7
+
8
+var (
9
+	SyscallMount		= syscall.Mount
10
+	SyscallUnmount		= syscall.Unmount
11
+	SyscallCloseOnExec	= syscall.CloseOnExec
12
+	SyscallSyscall		= syscall.Syscall
13
+	OSOpenFile		= os.OpenFile
14
+)