mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-06-23 04:10:25 +00:00
8eb1fac9ad
* Refactor and update dependencies in the project - Updated go.sum to replace `github.com/absmach/magistrala` with `github.com/absmach/supermq` across various modules. - Removed VSock configuration from environment variables and QEMU arguments. - Updated QEMU configuration and related tests to remove references to guest CID and VSock. - Added new HTTP transport layer for API endpoints in the manager. - Introduced Prometheus monitoring configuration with alert rules and Alertmanager setup. - Updated service and VM interfaces to remove unused methods and references. - Refactored tests to align with the new structure and dependencies. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add MaxVMs configuration and enforce limit on VM creation Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add comprehensive tests for HTTP transport handlers and endpoints Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add test case for exceeding maximum number of VMs in TestRun Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Improve error handling in TestHandlerWithCustomRouter to ensure response writing is checked Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Update dependencies to latest versions - Upgrade cel.dev/expr from v0.23.0 to v0.24.0 - Upgrade github.com/absmach/supermq from v0.16.0 to v0.17.0 - Upgrade github.com/cenkalti/backoff from v4.3.0 to v5.0.2 - Upgrade github.com/cncf/xds/go to v0.0.0-20250501225837-2ac532fd4443 - Upgrade github.com/go-chi/chi/v5 from v5.2.1 to v5.2.2 - Upgrade github.com/go-jose/go-jose/v3 from v3.0.3 to v3.0.4 - Upgrade github.com/gofrs/uuid/v5 from v5.3.0 to v5.3.2 - Upgrade github.com/prometheus/client_golang from v1.22.0 to v1.23.0 - Upgrade github.com/prometheus/client_model from v0.6.1 to v0.6.2 - Upgrade github.com/prometheus/common from v0.62.0 to v0.65.0 - Upgrade github.com/prometheus/procfs from v0.15.1 to v0.16.1 - Upgrade go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from v0.60.0 to v0.62.0 - Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace from v1.36.0 to v1.37.0 - Upgrade golang.org/x/crypto from v0.39.0 to v0.40.0 - Upgrade golang.org/x/sys from v0.33.0 to v0.34.0 - Upgrade golang.org/x/text from v0.26.0 to v0.27.0 - Upgrade golang.org/x/time from v0.11.0 to v0.12.0 - Upgrade google.golang.org/grpc from v1.73.0 to v1.74.2 Signed-off-by: Sammy Oina <sammyoina@gmail.com> --------- Signed-off-by: Sammy Oina <sammyoina@gmail.com>
195 lines
4.9 KiB
Go
195 lines
4.9 KiB
Go
// Copyright (c) Ultraviolet
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package qemu
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestConstructQemuArgs(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config Config
|
|
expected []string
|
|
}{
|
|
{
|
|
name: "Default configuration",
|
|
config: Config{
|
|
QemuBinPath: "qemu-system-x86_64",
|
|
EnableKVM: true,
|
|
Machine: "q35",
|
|
CPU: "EPYC",
|
|
SMPCount: 4,
|
|
MaxCPUs: 64,
|
|
MemID: "ram1",
|
|
MemoryConfig: MemoryConfig{
|
|
Size: "2048M",
|
|
Slots: 5,
|
|
Max: "30G",
|
|
},
|
|
OVMFCodeConfig: OVMFCodeConfig{
|
|
If: "pflash",
|
|
Format: "raw",
|
|
Unit: 0,
|
|
File: "/usr/share/OVMF/OVMF_CODE.fd",
|
|
ReadOnly: "on",
|
|
},
|
|
OVMFVarsConfig: OVMFVarsConfig{
|
|
If: "pflash",
|
|
Format: "raw",
|
|
Unit: 1,
|
|
File: "/usr/share/OVMF/OVMF_VARS.fd",
|
|
},
|
|
NetDevConfig: NetDevConfig{
|
|
ID: "vmnic",
|
|
HostFwdAgent: 7020,
|
|
GuestFwdAgent: 7002,
|
|
},
|
|
VirtioNetPciConfig: VirtioNetPciConfig{
|
|
DisableLegacy: "on",
|
|
IOMMUPlatform: true,
|
|
Addr: "0x2",
|
|
},
|
|
DiskImgConfig: DiskImgConfig{
|
|
KernelFile: "img/bzImage",
|
|
RootFsFile: "img/rootfs.cpio.gz",
|
|
},
|
|
NoGraphic: true,
|
|
Monitor: "pty",
|
|
},
|
|
expected: []string{
|
|
"-enable-kvm",
|
|
"-machine", "q35",
|
|
"-cpu", "EPYC",
|
|
"-smp", "4,maxcpus=64",
|
|
"-m", "2048M,slots=5,maxmem=30G",
|
|
"-drive", "if=pflash,format=raw,unit=0,file=/usr/share/OVMF/OVMF_CODE.fd,readonly=on",
|
|
"-drive", "if=pflash,format=raw,unit=1,file=/usr/share/OVMF/OVMF_VARS.fd",
|
|
"-netdev", "user,id=vmnic,hostfwd=tcp::7020-:7002",
|
|
"-device", "virtio-net-pci,disable-legacy=on,iommu_platform=true,netdev=vmnic,addr=0x2,romfile=",
|
|
"-kernel", "img/bzImage",
|
|
"-append", "\"quiet console=null\"",
|
|
"-initrd", "img/rootfs.cpio.gz",
|
|
"-nographic",
|
|
"-monitor", "pty",
|
|
},
|
|
},
|
|
{
|
|
name: "SEV-SNP enabled configuration",
|
|
config: Config{
|
|
QemuBinPath: "qemu-system-x86_64",
|
|
EnableKVM: true,
|
|
EnableSEVSNP: true,
|
|
Machine: "q35",
|
|
CPU: "EPYC",
|
|
SMPCount: 4,
|
|
MaxCPUs: 64,
|
|
MemID: "ram1",
|
|
MemoryConfig: MemoryConfig{
|
|
Size: "2048M",
|
|
Slots: 5,
|
|
Max: "30G",
|
|
},
|
|
OVMFCodeConfig: OVMFCodeConfig{
|
|
If: "pflash",
|
|
Format: "raw",
|
|
Unit: 0,
|
|
File: "/usr/share/OVMF/OVMF_CODE.fd",
|
|
ReadOnly: "on",
|
|
},
|
|
OVMFVarsConfig: OVMFVarsConfig{
|
|
If: "pflash",
|
|
Format: "raw",
|
|
Unit: 1,
|
|
File: "/usr/share/OVMF/OVMF_VARS.fd",
|
|
},
|
|
NetDevConfig: NetDevConfig{
|
|
ID: "vmnic",
|
|
HostFwdAgent: 7020,
|
|
GuestFwdAgent: 7002,
|
|
},
|
|
VirtioNetPciConfig: VirtioNetPciConfig{
|
|
DisableLegacy: "on",
|
|
IOMMUPlatform: true,
|
|
Addr: "0x2",
|
|
},
|
|
DiskImgConfig: DiskImgConfig{
|
|
KernelFile: "img/bzImage",
|
|
RootFsFile: "img/rootfs.cpio.gz",
|
|
},
|
|
SEVSNPConfig: SEVSNPConfig{
|
|
ID: "sev0",
|
|
CBitPos: 51,
|
|
ReducedPhysBits: 1,
|
|
},
|
|
IGVMConfig: IGVMConfig{
|
|
ID: "igvm0",
|
|
File: "/test/path/cocos-igvm.igvm",
|
|
},
|
|
NoGraphic: true,
|
|
Monitor: "pty",
|
|
},
|
|
expected: []string{
|
|
"-enable-kvm",
|
|
"-machine", "q35",
|
|
"-cpu", "EPYC",
|
|
"-smp", "4,maxcpus=64",
|
|
"-m", "2048M,slots=5,maxmem=30G",
|
|
"-netdev", "user,id=vmnic,hostfwd=tcp::7020-:7002",
|
|
"-device", "virtio-net-pci,disable-legacy=on,iommu_platform=true,netdev=vmnic,addr=0x2,romfile=",
|
|
"-machine", "confidential-guest-support=sev0,memory-backend=ram1,igvm-cfg=igvm0",
|
|
"-object", "memory-backend-memfd,id=ram1,size=2048M,share=true,prealloc=false",
|
|
"-object", "sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1",
|
|
"-object", "igvm-cfg,id=igvm0,file=/test/path/cocos-igvm.igvm",
|
|
"-kernel", "img/bzImage",
|
|
"-append", "\"quiet console=null\"",
|
|
"-initrd", "img/rootfs.cpio.gz",
|
|
"-nographic",
|
|
"-monitor", "pty",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := tt.config.ConstructQemuArgs()
|
|
if !reflect.DeepEqual(result, tt.expected) {
|
|
t.Errorf("ConstructQemuArgs() = %v, want %v", result, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConstructQemuArgs_HostData(t *testing.T) {
|
|
config := Config{
|
|
EnableSEVSNP: true,
|
|
SEVSNPConfig: SEVSNPConfig{
|
|
ID: "sev0",
|
|
CBitPos: 51,
|
|
ReducedPhysBits: 1,
|
|
EnableHostData: true,
|
|
HostData: "test-host-data",
|
|
},
|
|
}
|
|
|
|
result := config.ConstructQemuArgs()
|
|
|
|
expected := "-object"
|
|
expectedValue := "sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1,host-data=test-host-data"
|
|
|
|
found := false
|
|
for i, arg := range result {
|
|
if arg == expected && i+1 < len(result) {
|
|
if result[i+1] == expectedValue {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
if !found {
|
|
t.Errorf("ConstructQemuArgs() did not contain expected SEV-SNP configuration with host data")
|
|
}
|
|
}
|