1- package qcow2reader
1+ // Package qcow2reader_test keeps blackbox tests for qcow2reader.
2+ package qcow2reader_test
23
34import (
4- "bytes"
5- "errors"
65 "fmt"
76 "io"
87 "math/rand"
98 "os"
10- "os/exec"
119 "path/filepath"
1210 "testing"
1311
12+ "github.com/lima-vm/go-qcow2reader"
1413 "github.com/lima-vm/go-qcow2reader/convert"
15- "github.com/lima-vm/go-qcow2reader/image"
16- "github.com/lima-vm/go-qcow2reader/image/qcow2"
14+ "github.com/lima-vm/go-qcow2reader/test/qemuimg"
1715)
1816
1917const (
2018 MiB = int64 (1 ) << 20
2119 GiB = int64 (1 ) << 30
22-
23- CompressionTypeNone = qcow2 .CompressionType (255 )
2420)
2521
2622// Benchmark completely empty sparse image (0% utilization). This is the best
@@ -33,7 +29,7 @@ func Benchmark0p(b *testing.B) {
3329 }
3430 b .Run ("qcow2" , func (b * testing.B ) {
3531 img := base + ".qocw2"
36- if err := qemuImgConvert (base , img , qcow2 . Type , CompressionTypeNone ); err != nil {
32+ if err := qemuimg . Convert (base , img , qemuimg . FormatQcow2 , qemuimg . CompressionNone ); err != nil {
3733 b .Fatal (err )
3834 }
3935 b .Run ("read" , func (b * testing.B ) {
@@ -51,7 +47,7 @@ func Benchmark0p(b *testing.B) {
5147 })
5248 b .Run ("qcow2 zlib" , func (b * testing.B ) {
5349 img := base + ".zlib.qcow2"
54- if err := qemuImgConvert (base , img , qcow2 . Type , qcow2 . CompressionTypeZlib ); err != nil {
50+ if err := qemuimg . Convert (base , img , qemuimg . FormatQcow2 , qemuimg . CompressionZlib ); err != nil {
5551 b .Fatal (err )
5652 }
5753 b .Run ("read" , func (b * testing.B ) {
@@ -79,7 +75,7 @@ func Benchmark50p(b *testing.B) {
7975 }
8076 b .Run ("qcow2" , func (b * testing.B ) {
8177 img := base + ".qocw2"
82- if err := qemuImgConvert (base , img , qcow2 . Type , CompressionTypeNone ); err != nil {
78+ if err := qemuimg . Convert (base , img , qemuimg . FormatQcow2 , qemuimg . CompressionNone ); err != nil {
8379 b .Fatal (err )
8480 }
8581 b .Run ("read" , func (b * testing.B ) {
@@ -97,7 +93,7 @@ func Benchmark50p(b *testing.B) {
9793 })
9894 b .Run ("qcow2 zlib" , func (b * testing.B ) {
9995 img := base + ".zlib.qcow2"
100- if err := qemuImgConvert (base , img , qcow2 . Type , qcow2 . CompressionTypeZlib ); err != nil {
96+ if err := qemuimg . Convert (base , img , qemuimg . FormatQcow2 , qemuimg . CompressionZlib ); err != nil {
10197 b .Fatal (err )
10298 }
10399 b .Run ("read" , func (b * testing.B ) {
@@ -126,7 +122,7 @@ func Benchmark100p(b *testing.B) {
126122 }
127123 b .Run ("qcow2" , func (b * testing.B ) {
128124 img := base + ".qocw2"
129- if err := qemuImgConvert (base , img , qcow2 . Type , CompressionTypeNone ); err != nil {
125+ if err := qemuimg . Convert (base , img , qemuimg . FormatQcow2 , qemuimg . CompressionNone ); err != nil {
130126 b .Fatal (err )
131127 }
132128 b .Run ("read" , func (b * testing.B ) {
@@ -144,7 +140,7 @@ func Benchmark100p(b *testing.B) {
144140 })
145141 b .Run ("qcow2 zlib" , func (b * testing.B ) {
146142 img := base + ".zlib.qcow2"
147- if err := qemuImgConvert (base , img , qcow2 . Type , qcow2 . CompressionTypeZlib ); err != nil {
143+ if err := qemuimg . Convert (base , img , qemuimg . FormatQcow2 , qemuimg . CompressionZlib ); err != nil {
148144 b .Fatal (err )
149145 }
150146 b .Run ("read" , func (b * testing.B ) {
@@ -171,7 +167,7 @@ func benchmarkRead(b *testing.B, filename string) {
171167 b .Fatal (err )
172168 }
173169 defer f .Close ()
174- img , err := Open (f )
170+ img , err := qcow2reader . Open (f )
175171 if err != nil {
176172 b .Fatal (err )
177173 }
@@ -198,7 +194,7 @@ func benchmarkConvert(b *testing.B, filename string) {
198194 b .Fatal (err )
199195 }
200196 defer f .Close ()
201- img , err := Open (f )
197+ img , err := qcow2reader . Open (f )
202198 if err != nil {
203199 b .Fatal (err )
204200 }
@@ -289,25 +285,3 @@ func (g *Generator) Read(b []byte) (int, error) {
289285 })
290286 return len (b ), nil
291287}
292-
293- func qemuImgConvert (src , dst string , dstFormat image.Type , compressionType qcow2.CompressionType ) error {
294- args := []string {"convert" , "-O" , string (dstFormat )}
295- if compressionType != CompressionTypeNone {
296- args = append (args , "-c" , "-o" , "compression_type=" + compressionType .String ())
297- }
298- args = append (args , src , dst )
299- cmd := exec .Command ("qemu-img" , args ... )
300-
301- var stderr bytes.Buffer
302- cmd .Stderr = & stderr
303-
304- if err := cmd .Run (); err != nil {
305- // Return qemu-img stderr instead of the unhelpful default error (exited
306- // with status 1).
307- if _ , ok := err .(* exec.ExitError ); ok {
308- return errors .New (stderr .String ())
309- }
310- return err
311- }
312- return nil
313- }
0 commit comments