driver_test.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. d := newDriver(t)
  85. defer os.RemoveAll(d.home)
  86. mountPoints := make([]string, 2)
  87. if err := d.Create("1", ""); err != nil {
  88. t.Fatal(err)
  89. }
  90. // Mount the id
  91. p, err := d.Get("1")
  92. if err != nil {
  93. t.Fatal(err)
  94. }
  95. mountPoints[0] = p
  96. if err := d.Create("2", "1"); err != nil {
  97. t.Fatal(err)
  98. }
  99. p, err = d.Get("2")
  100. if err != nil {
  101. t.Fatal(err)
  102. }
  103. mountPoints[1] = p
  104. // Ensure that all the mount points are currently mounted
  105. for _, p := range mountPoints {
  106. if mounted, err := Mounted(p); err != nil {
  107. t.Fatal(err)
  108. } else if !mounted {
  109. t.Fatalf("Expected %s to be mounted", p)
  110. }
  111. }
  112. // Ensure that devices are active
  113. for _, p := range []string{"1", "2"} {
  114. if !d.HasActivatedDevice(p) {
  115. t.Fatalf("Expected %s to have an active device", p)
  116. }
  117. }
  118. if err := d.Cleanup(); err != nil {
  119. t.Fatal(err)
  120. }
  121. // Ensure that all the mount points are no longer mounted
  122. for _, p := range mountPoints {
  123. if mounted, err := Mounted(p); err != nil {
  124. t.Fatal(err)
  125. } else if mounted {
  126. t.Fatalf("Expected %s to not be mounted", p)
  127. }
  128. }
  129. // Ensure that devices are no longer activated
  130. for _, p := range []string{"1", "2"} {
  131. if d.HasActivatedDevice(p) {
  132. t.Fatalf("Expected %s not be an active device", p)
  133. }
  134. }
  135. }
  136. func TestNotMounted(t *testing.T) {
  137. d := newDriver(t)
  138. defer cleanup(d)
  139. if err := d.Create("1", ""); err != nil {
  140. t.Fatal(err)
  141. }
  142. mounted, err := Mounted(path.Join(d.home, "mnt", "1"))
  143. if err != nil {
  144. t.Fatal(err)
  145. }
  146. if mounted {
  147. t.Fatal("Id 1 should not be mounted")
  148. }
  149. }
  150. func TestMounted(t *testing.T) {
  151. d := newDriver(t)
  152. defer cleanup(d)
  153. if err := d.Create("1", ""); err != nil {
  154. t.Fatal(err)
  155. }
  156. if _, err := d.Get("1"); err != nil {
  157. t.Fatal(err)
  158. }
  159. mounted, err := Mounted(path.Join(d.home, "mnt", "1"))
  160. if err != nil {
  161. t.Fatal(err)
  162. }
  163. if !mounted {
  164. t.Fatal("Id 1 should be mounted")
  165. }
  166. }
  167. func TestInitCleanedDriver(t *testing.T) {
  168. d := newDriver(t)
  169. if err := d.Create("1", ""); err != nil {
  170. t.Fatal(err)
  171. }
  172. if _, err := d.Get("1"); err != nil {
  173. t.Fatal(err)
  174. }
  175. if err := d.Cleanup(); err != nil {
  176. t.Fatal(err)
  177. }
  178. driver, err := Init(d.home)
  179. if err != nil {
  180. t.Fatal(err)
  181. }
  182. d = driver.(*Driver)
  183. defer cleanup(d)
  184. if _, err := d.Get("1"); err != nil {
  185. t.Fatal(err)
  186. }
  187. }
  188. func TestMountMountedDriver(t *testing.T) {
  189. d := newDriver(t)
  190. defer cleanup(d)
  191. if err := d.Create("1", ""); err != nil {
  192. t.Fatal(err)
  193. }
  194. // Perform get on same id to ensure that it will
  195. // not be mounted twice
  196. if _, err := d.Get("1"); err != nil {
  197. t.Fatal(err)
  198. }
  199. if _, err := d.Get("1"); err != nil {
  200. t.Fatal(err)
  201. }
  202. }
  203. func TestGetReturnsValidDevice(t *testing.T) {
  204. d := newDriver(t)
  205. defer cleanup(d)
  206. if err := d.Create("1", ""); err != nil {
  207. t.Fatal(err)
  208. }
  209. if !d.HasDevice("1") {
  210. t.Fatalf("Expected id 1 to be in device set")
  211. }
  212. if _, err := d.Get("1"); err != nil {
  213. t.Fatal(err)
  214. }
  215. if !d.HasActivatedDevice("1") {
  216. t.Fatalf("Expected id 1 to be activated")
  217. }
  218. if !d.HasInitializedDevice("1") {
  219. t.Fatalf("Expected id 1 to be initialized")
  220. }
  221. }
  222. func TestDriverGetSize(t *testing.T) {
  223. t.Skipf("Size is currently not implemented")
  224. d := newDriver(t)
  225. defer cleanup(d)
  226. if err := d.Create("1", ""); err != nil {
  227. t.Fatal(err)
  228. }
  229. mountPoint, err := d.Get("1")
  230. if err != nil {
  231. t.Fatal(err)
  232. }
  233. size := int64(1024)
  234. f, err := os.Create(path.Join(mountPoint, "test_file"))
  235. if err != nil {
  236. t.Fatal(err)
  237. }
  238. if err := f.Truncate(size); err != nil {
  239. t.Fatal(err)
  240. }
  241. f.Close()
  242. diffSize, err := d.Size("1")
  243. if err != nil {
  244. t.Fatal(err)
  245. }
  246. if diffSize != size {
  247. t.Fatalf("Expected size %d got %d", size, diffSize)
  248. }
  249. }