qemuimg_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package qemuimg
  15. import "testing"
  16. func TestGetQemuImgVersion(t *testing.T) {
  17. verStr := `qemu-img version 1.5.3, Copyright (c) 2004-2008 Fabrice Bellard`
  18. matches := qemuImgVersionRegexp.FindStringSubmatch(verStr)
  19. t.Logf("%s", matches[1])
  20. }
  21. // TODO: rewrite TestQcow2
  22. /*
  23. func TestQcow2(t *testing.T) {
  24. img, err := NewQemuImage("test")
  25. if err != nil {
  26. t.Fatal(err)
  27. }
  28. err = img.CreateQcow2(1000, true, "")
  29. if err != nil {
  30. t.Fatal(err)
  31. }
  32. t.Logf("%s %v", img, img.IsSparse())
  33. err = img.Delete()
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. err = img.CreateQcow2(1000, false, "")
  38. if err != nil {
  39. t.Fatal(err)
  40. }
  41. t.Logf("%s %v", img, img.IsSparse())
  42. err = img.Convert2Qcow2(true)
  43. if err != nil {
  44. t.Fatal(err)
  45. }
  46. t.Logf("%s %v", img, img.IsSparse())
  47. err = img.Convert2Qcow2(false)
  48. if err != nil {
  49. t.Fatal(err)
  50. }
  51. t.Logf("%s %v", img, img.IsSparse())
  52. err = img.Resize(2048)
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. t.Logf("%s %v", img, img.IsSparse())
  57. err = img.Convert2Qcow2(true)
  58. if err != nil {
  59. t.Fatal(err)
  60. }
  61. t.Logf("%s %v", img, img.IsSparse())
  62. err = img.Expand()
  63. if err != nil {
  64. t.Fatal(err)
  65. }
  66. t.Logf("%s %v", img, img.IsSparse())
  67. err = img.Delete()
  68. if err != nil {
  69. t.Fatal(err)
  70. }
  71. err = img.CreateQcow2(1000, true, "")
  72. if err != nil {
  73. t.Fatal(err)
  74. }
  75. t.Logf("%s %v", img, img.IsSparse())
  76. img2, err := img.CloneQcow2("test2", true)
  77. if err != nil {
  78. t.Fatal(err)
  79. }
  80. t.Logf("%s %v", img2, img2.IsSparse())
  81. err = img2.Delete()
  82. if err != nil {
  83. t.Fatal(err)
  84. }
  85. err = img.Convert2Qcow2(false)
  86. if err != nil {
  87. t.Fatal(err)
  88. }
  89. img4, err := NewQemuImage("test_top")
  90. if err != nil {
  91. t.Fatal(err)
  92. }
  93. err = img4.CreateQcow2(0, true, img.Path)
  94. if err != nil {
  95. t.Fatal(err)
  96. }
  97. t.Logf("%s %v", img, img.IsSparse())
  98. t.Logf("%s %v", img4, img4.IsSparse())
  99. err = img.Convert2Qcow2(true)
  100. if err != nil {
  101. t.Fatal(err)
  102. }
  103. t.Logf("%s %v", img, img.IsSparse())
  104. t.Logf("%s %v", img4, img4.IsSparse())
  105. img4.Delete()
  106. img.Delete()
  107. }
  108. func TestVhd(t *testing.T) {
  109. img, err := NewQemuImage("test")
  110. if err != nil {
  111. t.Fatal(err)
  112. }
  113. err = img.CreateVhd(1024)
  114. if err != nil {
  115. t.Fatal(err)
  116. }
  117. t.Logf("%s %v", img, img.IsSparse())
  118. err = img.Delete()
  119. if err != nil {
  120. t.Fatal(err)
  121. }
  122. err = img.CreateVhd(1024)
  123. if err != nil {
  124. t.Fatal(err)
  125. }
  126. t.Logf("%s %v", img, img.IsSparse())
  127. err = img.Convert2Vhd()
  128. if err != nil {
  129. t.Fatal(err)
  130. }
  131. t.Logf("%s %v", img, img.IsSparse())
  132. err = img.Convert2Vhd()
  133. if err != nil {
  134. t.Fatal(err)
  135. }
  136. t.Logf("%s %v", img, img.IsSparse())
  137. img.Delete()
  138. }
  139. func TestVmdk(t *testing.T) {
  140. img, err := NewQemuImage("test")
  141. if err != nil {
  142. t.Fatal(err)
  143. }
  144. err = img.CreateVmdk(1024, true)
  145. if err != nil {
  146. t.Fatal(err)
  147. }
  148. t.Logf("%s %v", img, img.IsSparse())
  149. err = img.Delete()
  150. if err != nil {
  151. t.Fatal(err)
  152. }
  153. err = img.CreateVmdk(1024, false)
  154. if err != nil {
  155. t.Fatal(err)
  156. }
  157. t.Logf("%s %v", img, img.IsSparse())
  158. err = img.Convert2Vmdk(true)
  159. if err != nil {
  160. t.Fatal(err)
  161. }
  162. t.Logf("%s %v", img, img.IsSparse())
  163. err = img.Convert2Vmdk(false)
  164. if err != nil {
  165. t.Fatal(err)
  166. }
  167. t.Logf("%s %v", img, img.IsSparse())
  168. img.Delete()
  169. }*/
  170. func TestParseBackingFile(t *testing.T) {
  171. in := `json:{"driver":"qcow2","file":{"driver":"file","filename":"/opt/cloud/workspace/disks/snapshots/72a2383d-e980-486f-816c-6c562e1757f3_snap/f39f225a-921f-492e-8fb6-0a4167d6ed91"}}`
  172. want := "/opt/cloud/workspace/disks/snapshots/72a2383d-e980-486f-816c-6c562e1757f3_snap/f39f225a-921f-492e-8fb6-0a4167d6ed91"
  173. path, err := ParseQemuFilepath(in)
  174. if err != nil {
  175. t.Errorf("parseBackingFilepath: %s", err)
  176. } else if path != want {
  177. t.Errorf("want: %s got: %s", want, path)
  178. }
  179. }