Path: blob/master/pkg/imgutil/nativeimgutil/nativeimgutil_test.go
2621 views
// SPDX-FileCopyrightText: Copyright The Lima Authors1// SPDX-License-Identifier: Apache-2.023package nativeimgutil45import (6"context"7"os"8"os/exec"9"path/filepath"10"strings"11"testing"1213"github.com/lima-vm/go-qcow2reader/image/raw"14"gotest.tools/v3/assert"15)1617func TestRoundUp(t *testing.T) {18tests := []struct {19Size int6420Rounded int6421}{22{0, 0},23{1, 512},24{511, 512},25{512, 512},26{123456789, 123457024},27}28for _, tc := range tests {29if roundUp(tc.Size) != tc.Rounded {30t.Errorf("expected %d, got %d", tc.Rounded, tc.Size)31}32}33}3435func createImg(ctx context.Context, name, format, size string) error {36return exec.CommandContext(ctx, "qemu-img", "create", name, "-f", format, size).Run()37}3839func TestConvertToRaw(t *testing.T) {40_, err := exec.LookPath("qemu-img")41if err != nil {42t.Skipf("qemu-img does not seem installed: %v", err)43}44tmpDir := t.TempDir()45ctx := t.Context()4647qcowImage, err := os.Create(filepath.Join(tmpDir, "qcow.img"))48assert.NilError(t, err)49defer qcowImage.Close()50err = createImg(ctx, qcowImage.Name(), "qcow2", "1M")51assert.NilError(t, err)5253rawImage, err := os.Create(filepath.Join(tmpDir, "raw.img"))54assert.NilError(t, err)55defer rawImage.Close()56err = createImg(ctx, rawImage.Name(), "raw", "1M")57assert.NilError(t, err)5859rawImageExtended, err := os.Create(filepath.Join(tmpDir, "raw_extended.img"))60assert.NilError(t, err)61defer rawImageExtended.Close()62err = createImg(ctx, rawImageExtended.Name(), "raw", "2M")63assert.NilError(t, err)6465t.Run("qcow without backing file", func(t *testing.T) {66resultImage := filepath.Join(tmpDir, strings.ReplaceAll(strings.ReplaceAll(t.Name(), string(os.PathSeparator), "_"), "/", "_"))6768err = convertTo(raw.Type, qcowImage.Name(), resultImage, nil, false)69assert.NilError(t, err)70assertFileEquals(t, rawImage.Name(), resultImage)71})7273t.Run("qcow with backing file", func(t *testing.T) {74resultImage := filepath.Join(tmpDir, strings.ReplaceAll(strings.ReplaceAll(t.Name(), string(os.PathSeparator), "_"), "/", "_"))7576err = convertTo(raw.Type, qcowImage.Name(), resultImage, nil, true)77assert.NilError(t, err)78assertFileEquals(t, rawImage.Name(), resultImage)79})8081t.Run("qcow with extra size", func(t *testing.T) {82resultImage := filepath.Join(tmpDir, strings.ReplaceAll(strings.ReplaceAll(t.Name(), string(os.PathSeparator), "_"), "/", "_"))8384size := int64(2_097_152) // 2mb85err = convertTo(raw.Type, qcowImage.Name(), resultImage, &size, false)86assert.NilError(t, err)87assertFileEquals(t, rawImageExtended.Name(), resultImage)88})8990t.Run("raw", func(t *testing.T) {91resultImage := filepath.Join(tmpDir, strings.ReplaceAll(strings.ReplaceAll(t.Name(), string(os.PathSeparator), "_"), "/", "_"))9293err = convertTo(raw.Type, rawImage.Name(), resultImage, nil, false)94assert.NilError(t, err)95assertFileEquals(t, rawImage.Name(), resultImage)96})97}9899func assertFileEquals(t *testing.T, expected, actual string) {100expectedContent, err := os.ReadFile(expected)101assert.NilError(t, err)102actualContent, err := os.ReadFile(actual)103assert.NilError(t, err)104assert.DeepEqual(t, expectedContent, actualContent)105}106107108