driver_test.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. package devmapper
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "path"
  6. "testing"
  7. )
  8. func init() {
  9. // Reduce the size the the base fs and loopback for the tests
  10. DefaultDataLoopbackSize = 300 * 1024 * 1024
  11. DefaultMetaDataLoopbackSize = 200 * 1024 * 1024
  12. DefaultBaseFsSize = 300 * 1024 * 1024
  13. }
  14. func mkTestDirectory(t *testing.T) string {
  15. dir, err := ioutil.TempDir("", "docker-test-devmapper-")
  16. if err != nil {
  17. t.Fatal(err)
  18. }
  19. return dir
  20. }
  21. func newDriver(t *testing.T) *Driver {
  22. home := mkTestDirectory(t)
  23. d, err := Init(home)
  24. if err != nil {
  25. t.Fatal(err)
  26. }
  27. return d.(*Driver)
  28. }
  29. func cleanup(d *Driver) {
  30. d.Cleanup()
  31. os.RemoveAll(d.home)
  32. }
  33. func TestInit(t *testing.T) {
  34. home := mkTestDirectory(t)
  35. defer os.RemoveAll(home)
  36. driver, err := Init(home)
  37. if err != nil {
  38. t.Fatal(err)
  39. }
  40. defer func() {
  41. if err := driver.Cleanup(); err != nil {
  42. t.Fatal(err)
  43. }
  44. }()
  45. id := "foo"
  46. if err := driver.Create(id, ""); err != nil {
  47. t.Fatal(err)
  48. }
  49. dir, err := driver.Get(id)
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. if st, err := os.Stat(dir); err != nil {
  54. t.Fatal(err)
  55. } else if !st.IsDir() {
  56. t.Fatalf("Get(%V) did not return a directory", id)
  57. }
  58. }
  59. func TestDriverName(t *testing.T) {
  60. d := newDriver(t)
  61. defer cleanup(d)
  62. if d.String() != "devicemapper" {
  63. t.Fatalf("Expected driver name to be devicemapper got %s", d.String())
  64. }
  65. }
  66. func TestDriverCreate(t *testing.T) {
  67. d := newDriver(t)
  68. defer cleanup(d)
  69. if err := d.Create("1", ""); err != nil {
  70. t.Fatal(err)
  71. }
  72. }
  73. func TestDriverRemove(t *testing.T) {
  74. d := newDriver(t)
  75. defer cleanup(d)
  76. if err := d.Create("1", ""); err != nil {
  77. t.Fatal(err)
  78. }
  79. if err := d.Remove("1"); err != nil {
  80. t.Fatal(err)
  81. }
  82. }
  83. func TestCleanup(t *testing.T) {
  84. t.Skip("Unimplemented")
  85. d := newDriver(t)
  86. defer os.RemoveAll(d.home)
  87. mountPoints := make([]string, 2)
  88. if err := d.Create("1", ""); err != nil {
  89. t.Fatal(err)
  90. }
  91. // Mount the id
  92. p, err := d.Get("1")
  93. if err != nil {
  94. t.Fatal(err)
  95. }
  96. mountPoints[0] = p
  97. if err := d.Create("2", "1"); err != nil {
  98. t.Fatal(err)
  99. }
  100. p, err = d.Get("2")
  101. if err != nil {
  102. t.Fatal(err)
  103. }
  104. mountPoints[1] = p
  105. // Ensure that all the mount points are currently mounted
  106. for _, p := range mountPoints {
  107. if mounted, err := Mounted(p); err != nil {
  108. t.Fatal(err)
  109. } else if !mounted {
  110. t.Fatalf("Expected %s to be mounted", p)
  111. }
  112. }
  113. // Ensure that devices are active
  114. for _, p := range []string{"1", "2"} {
  115. if !d.HasActivatedDevice(p) {
  116. t.Fatalf("Expected %s to have an active device", p)
  117. }
  118. }
  119. if err := d.Cleanup(); err != nil {
  120. t.Fatal(err)
  121. }
  122. // Ensure that all the mount points are no longer mounted
  123. for _, p := range mountPoints {
  124. if mounted, err := Mounted(p); err != nil {
  125. t.Fatal(err)
  126. } else if mounted {
  127. t.Fatalf("Expected %s to not be mounted", p)
  128. }
  129. }
  130. // Ensure that devices are no longer activated
  131. for _, p := range []string{"1", "2"} {
  132. if d.HasActivatedDevice(p) {
  133. t.Fatalf("Expected %s not be an active device", p)
  134. }
  135. }
  136. }
  137. func TestNotMounted(t *testing.T) {
  138. t.Skip("Not implemented")
  139. d := newDriver(t)
  140. defer cleanup(d)
  141. if err := d.Create("1", ""); err != nil {
  142. t.Fatal(err)
  143. }
  144. mounted, err := Mounted(path.Join(d.home, "mnt", "1"))
  145. if err != nil {
  146. t.Fatal(err)
  147. }
  148. if mounted {
  149. t.Fatal("Id 1 should not be mounted")
  150. }
  151. }
  152. func TestMounted(t *testing.T) {
  153. d := newDriver(t)
  154. defer cleanup(d)
  155. if err := d.Create("1", ""); err != nil {
  156. t.Fatal(err)
  157. }
  158. if _, err := d.Get("1"); err != nil {
  159. t.Fatal(err)
  160. }
  161. mounted, err := Mounted(path.Join(d.home, "mnt", "1"))
  162. if err != nil {
  163. t.Fatal(err)
  164. }
  165. if !mounted {
  166. t.Fatal("Id 1 should be mounted")
  167. }
  168. }
  169. func TestInitCleanedDriver(t *testing.T) {
  170. d := newDriver(t)
  171. if err := d.Create("1", ""); err != nil {
  172. t.Fatal(err)
  173. }
  174. if _, err := d.Get("1"); err != nil {
  175. t.Fatal(err)
  176. }
  177. if err := d.Cleanup(); err != nil {
  178. t.Fatal(err)
  179. }
  180. driver, err := Init(d.home)
  181. if err != nil {
  182. t.Fatal(err)
  183. }
  184. d = driver.(*Driver)
  185. defer cleanup(d)
  186. if _, err := d.Get("1"); err != nil {
  187. t.Fatal(err)
  188. }
  189. }
  190. func TestMountMountedDriver(t *testing.T) {
  191. d := newDriver(t)
  192. defer cleanup(d)
  193. if err := d.Create("1", ""); err != nil {
  194. t.Fatal(err)
  195. }
  196. // Perform get on same id to ensure that it will
  197. // not be mounted twice
  198. if _, err := d.Get("1"); err != nil {
  199. t.Fatal(err)
  200. }
  201. if _, err := d.Get("1"); err != nil {
  202. t.Fatal(err)
  203. }
  204. }
  205. func TestGetReturnsValidDevice(t *testing.T) {
  206. d := newDriver(t)
  207. defer cleanup(d)
  208. if err := d.Create("1", ""); err != nil {
  209. t.Fatal(err)
  210. }
  211. if !d.HasDevice("1") {
  212. t.Fatalf("Expected id 1 to be in device set")
  213. }
  214. if _, err := d.Get("1"); err != nil {
  215. t.Fatal(err)
  216. }
  217. if !d.HasActivatedDevice("1") {
  218. t.Fatalf("Expected id 1 to be activated")
  219. }
  220. if !d.HasInitializedDevice("1") {
  221. t.Fatalf("Expected id 1 to be initialized")
  222. }
  223. }
  224. func TestDriverGetSize(t *testing.T) {
  225. t.Skipf("Size is currently not implemented")
  226. d := newDriver(t)
  227. defer cleanup(d)
  228. if err := d.Create("1", ""); err != nil {
  229. t.Fatal(err)
  230. }
  231. mountPoint, err := d.Get("1")
  232. if err != nil {
  233. t.Fatal(err)
  234. }
  235. size := int64(1024)
  236. f, err := os.Create(path.Join(mountPoint, "test_file"))
  237. if err != nil {
  238. t.Fatal(err)
  239. }
  240. if err := f.Truncate(size); err != nil {
  241. t.Fatal(err)
  242. }
  243. f.Close()
  244. // diffSize, err := d.DiffSize("1")
  245. // if err != nil {
  246. // t.Fatal(err)
  247. // }
  248. // if diffSize != size {
  249. // t.Fatalf("Expected size %d got %d", size, diffSize)
  250. // }
  251. }