Files
spinifex/hive/vm/vm_test.go
T
2025-11-13 12:14:02 +08:00

86 lines
1.5 KiB
Go

package vm
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestExecute(t *testing.T) {
cfg := Config{
Name: "test-vm",
}
cmd, err := cfg.Execute()
// Expect error, CPU count required
assert.Error(t, err)
assert.ErrorContains(t, err, "cpu count is required")
assert.Nil(t, cmd)
cfg.CPUCount = 2
cmd, err = cfg.Execute()
// Expect error, Memory required
assert.Error(t, err)
assert.ErrorContains(t, err, "memory is required")
assert.Nil(t, cmd)
cfg.Memory = 1024
cmd, err = cfg.Execute()
// Expect error, at least one drive required
assert.Error(t, err)
assert.ErrorContains(t, err, "at least one drive is required")
assert.Nil(t, cmd)
cfg.Drives = []Drive{
{
File: "disk.img",
Format: "qcow2",
},
}
cfg.Architecture = "x86_64"
cmd, err = cfg.Execute()
// Now expect no error
assert.NoError(t, err)
assert.NotNil(t, cmd)
expectedArgs := []string{
"-smp", "2",
"-m", "1024",
"-drive", "file=disk.img,format=qcow2",
}
assert.Contains(t, cmd.Path, "qemu-system-x86_64")
assert.Equal(t, expectedArgs, cmd.Args[1:])
// Toggle Instance type to ARM
cfg.InstanceType = "t4g.micro"
cfg.Architecture = "arm64"
cmd, err = cfg.Execute()
// Now expect no error
assert.NoError(t, err)
assert.NotNil(t, cmd)
assert.Contains(t, cmd.Path, "qemu-system-aarch64")
assert.Equal(t, expectedArgs, cmd.Args[1:])
}
func TestGenerateEC2InstanceID(t *testing.T) {
id := GenerateEC2InstanceID()
assert.Len(t, id, 19)
assert.True(t, strings.HasPrefix(id, "i-"))
}