devmapper_test.go 6.2 KB

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