diff --git a/proxmox/config_qemu_test.go b/proxmox/config_qemu_test.go index 4c8740e9..e0b264c9 100644 --- a/proxmox/config_qemu_test.go +++ b/proxmox/config_qemu_test.go @@ -6141,176 +6141,6 @@ func Test_ConfigQemu_Validate(t *testing.T) { {input: baseConfig(ConfigQemu{Agent: &QemuGuestAgent{Type: util.Pointer(QemuGuestAgentType("test"))}}), current: &ConfigQemu{Agent: &QemuGuestAgent{Type: util.Pointer(QemuGuestAgentType_VirtIO)}}, err: errors.New(QemuGuestAgentType_Error_Invalid)}}}}, - {category: `CPU`, - valid: testType{ - createUpdate: []test{ - {name: `Cores`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Cores: util.Pointer(QemuCpuCores(1))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Maximum`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{ - Cores: util.Pointer(QemuCpuCores(128)), - Sockets: util.Pointer(QemuCpuSockets(4)), - VirtualCores: util.Pointer(CpuVirtualCores(512))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Minimum`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{ - Cores: util.Pointer(QemuCpuCores(128)), - Sockets: util.Pointer(QemuCpuSockets(4)), - VirtualCores: util.Pointer(CpuVirtualCores(0))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Flags all set`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - AES: util.Pointer(TriBoolFalse), - AmdNoSSB: util.Pointer(TriBoolNone), - AmdSSBD: util.Pointer(TriBoolTrue), - HvEvmcs: util.Pointer(TriBoolFalse), - HvTlbFlush: util.Pointer(TriBoolNone), - Ibpb: util.Pointer(TriBoolTrue), - MdClear: util.Pointer(TriBoolFalse), - PCID: util.Pointer(TriBoolNone), - Pdpe1GB: util.Pointer(TriBoolTrue), - SSBD: util.Pointer(TriBoolFalse), - SpecCtrl: util.Pointer(TriBoolNone), - VirtSSBD: util.Pointer(TriBoolTrue)}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Flags all nil`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Flags mixed`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - AmdNoSSB: util.Pointer(TriBoolTrue), - AmdSSBD: util.Pointer(TriBoolFalse), - HvTlbFlush: util.Pointer(TriBoolTrue), - Ibpb: util.Pointer(TriBoolFalse), - MdClear: util.Pointer(TriBoolNone), - PCID: util.Pointer(TriBoolTrue), - Pdpe1GB: util.Pointer(TriBoolFalse), - SpecCtrl: util.Pointer(TriBoolTrue)}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Limit maximum`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Limit: util.Pointer(CpuLimit(128))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Limit minimum`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Limit: util.Pointer(CpuLimit(0))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Sockets`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Sockets: util.Pointer(QemuCpuSockets(1))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Type empty`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Type: util.Pointer(CpuType(""))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Type host`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Type: util.Pointer(CpuType_Host)}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Units Minimum`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Units: util.Pointer(CpuUnits(0))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}, - {name: `Units Maximum`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Units: util.Pointer(CpuUnits(262144))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}}, - update: []test{ - {name: `nothing`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{}}), - current: &ConfigQemu{CPU: &QemuCPU{}}}}}, - invalid: testType{ - create: []test{ - {name: `erross.New(ConfigQemu_Error_CpuRequired)`, - err: errors.New(ConfigQemu_Error_CpuRequired)}, - {name: `errors.New(QemuCPU_Error_CoresRequired)`, - input: ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(QemuCPU_Error_CoresRequired)}}, - createUpdate: []test{ - {name: `errors.New(CpuLimit_Error_Maximum)`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Limit: util.Pointer(CpuLimit(129))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(CpuLimit_Error_Maximum)}, - {name: `errors.New(CpuUnits_Error_Maximum)`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Units: util.Pointer(CpuUnits(262145))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(CpuUnits_Error_Maximum)}, - {name: `errors.New(QemuCpuCores_Error_LowerBound)`, - input: ConfigQemu{CPU: &QemuCPU{Cores: util.Pointer(QemuCpuCores(0))}}, - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(QemuCpuCores_Error_LowerBound)}, - {name: `errors.New(QemuCpuSockets_Error_LowerBound)`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{ - Cores: util.Pointer(QemuCpuCores(1)), - Sockets: util.Pointer(QemuCpuSockets(0))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(QemuCpuSockets_Error_LowerBound)}, - {name: `CpuVirtualCores(1).Error() 1 1`, - input: ConfigQemu{CPU: &QemuCPU{ - Cores: util.Pointer(QemuCpuCores(1)), - Sockets: util.Pointer(QemuCpuSockets(1)), - VirtualCores: util.Pointer(CpuVirtualCores(2))}}, - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: CpuVirtualCores(1).Error()}, - {name: `Invalid AES`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - AES: util.Pointer(TriBool(-2))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid AmdNoSSB`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - AmdNoSSB: util.Pointer(TriBool(2))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid AmdSSBD`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - AmdSSBD: util.Pointer(TriBool(-27))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid HvEvmcs`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - HvEvmcs: util.Pointer(TriBool(32))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid HvTlbFlush`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - HvTlbFlush: util.Pointer(TriBool(-2))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid Ibpb`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - Ibpb: util.Pointer(TriBool(52))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid MdClear`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - MdClear: util.Pointer(TriBool(-52))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid PCID`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - PCID: util.Pointer(TriBool(82))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid Pdpe1GB`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - Pdpe1GB: util.Pointer(TriBool(-2))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid SSBD`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - SSBD: util.Pointer(TriBool(3))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid SpecCtrl`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - SpecCtrl: util.Pointer(TriBool(-2))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Invalid VirtSSBD`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ - VirtSSBD: util.Pointer(TriBool(2))}}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - err: errors.New(TriBool_Error_Invalid)}, - {name: `Type`, - input: baseConfig(ConfigQemu{CPU: &QemuCPU{Type: util.Pointer(CpuType("invalid"))}}), - current: &ConfigQemu{CPU: &QemuCPU{}}, - version: Version{}.max(), - err: CpuType("").Error(Version{}.max())}}}}, {category: `CloudInit`, valid: testType{ createUpdate: []test{ @@ -6516,6 +6346,176 @@ func Test_ConfigQemu_Validate(t *testing.T) { IPv6: util.Pointer(CloudInitIPv6Config{Gateway: util.Pointer(IPv6Address("2001:0db8:85a3::/64"))})}}}}), current: &ConfigQemu{CloudInit: &CloudInit{}}, err: errors.New(IPv6Address_Error_Invalid)}}}}, + {category: `CPU`, + valid: testType{ + createUpdate: []test{ + {name: `Cores`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Cores: util.Pointer(QemuCpuCores(1))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Maximum`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{ + Cores: util.Pointer(QemuCpuCores(128)), + Sockets: util.Pointer(QemuCpuSockets(4)), + VirtualCores: util.Pointer(CpuVirtualCores(512))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Minimum`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{ + Cores: util.Pointer(QemuCpuCores(128)), + Sockets: util.Pointer(QemuCpuSockets(4)), + VirtualCores: util.Pointer(CpuVirtualCores(0))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Flags all set`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + AES: util.Pointer(TriBoolFalse), + AmdNoSSB: util.Pointer(TriBoolNone), + AmdSSBD: util.Pointer(TriBoolTrue), + HvEvmcs: util.Pointer(TriBoolFalse), + HvTlbFlush: util.Pointer(TriBoolNone), + Ibpb: util.Pointer(TriBoolTrue), + MdClear: util.Pointer(TriBoolFalse), + PCID: util.Pointer(TriBoolNone), + Pdpe1GB: util.Pointer(TriBoolTrue), + SSBD: util.Pointer(TriBoolFalse), + SpecCtrl: util.Pointer(TriBoolNone), + VirtSSBD: util.Pointer(TriBoolTrue)}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Flags all nil`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Flags mixed`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + AmdNoSSB: util.Pointer(TriBoolTrue), + AmdSSBD: util.Pointer(TriBoolFalse), + HvTlbFlush: util.Pointer(TriBoolTrue), + Ibpb: util.Pointer(TriBoolFalse), + MdClear: util.Pointer(TriBoolNone), + PCID: util.Pointer(TriBoolTrue), + Pdpe1GB: util.Pointer(TriBoolFalse), + SpecCtrl: util.Pointer(TriBoolTrue)}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Limit maximum`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Limit: util.Pointer(CpuLimit(128))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Limit minimum`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Limit: util.Pointer(CpuLimit(0))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Sockets`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Sockets: util.Pointer(QemuCpuSockets(1))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Type empty`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Type: util.Pointer(CpuType(""))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Type host`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Type: util.Pointer(CpuType_Host)}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Units Minimum`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Units: util.Pointer(CpuUnits(0))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}, + {name: `Units Maximum`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Units: util.Pointer(CpuUnits(262144))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}}, + update: []test{ + {name: `nothing`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{}}), + current: &ConfigQemu{CPU: &QemuCPU{}}}}}, + invalid: testType{ + create: []test{ + {name: `erross.New(ConfigQemu_Error_CpuRequired)`, + err: errors.New(ConfigQemu_Error_CpuRequired)}, + {name: `errors.New(QemuCPU_Error_CoresRequired)`, + input: ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(QemuCPU_Error_CoresRequired)}}, + createUpdate: []test{ + {name: `errors.New(CpuLimit_Error_Maximum)`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Limit: util.Pointer(CpuLimit(129))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(CpuLimit_Error_Maximum)}, + {name: `errors.New(CpuUnits_Error_Maximum)`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Units: util.Pointer(CpuUnits(262145))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(CpuUnits_Error_Maximum)}, + {name: `errors.New(QemuCpuCores_Error_LowerBound)`, + input: ConfigQemu{CPU: &QemuCPU{Cores: util.Pointer(QemuCpuCores(0))}}, + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(QemuCpuCores_Error_LowerBound)}, + {name: `errors.New(QemuCpuSockets_Error_LowerBound)`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{ + Cores: util.Pointer(QemuCpuCores(1)), + Sockets: util.Pointer(QemuCpuSockets(0))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(QemuCpuSockets_Error_LowerBound)}, + {name: `CpuVirtualCores(1).Error() 1 1`, + input: ConfigQemu{CPU: &QemuCPU{ + Cores: util.Pointer(QemuCpuCores(1)), + Sockets: util.Pointer(QemuCpuSockets(1)), + VirtualCores: util.Pointer(CpuVirtualCores(2))}}, + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: CpuVirtualCores(1).Error()}, + {name: `Invalid AES`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + AES: util.Pointer(TriBool(-2))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid AmdNoSSB`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + AmdNoSSB: util.Pointer(TriBool(2))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid AmdSSBD`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + AmdSSBD: util.Pointer(TriBool(-27))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid HvEvmcs`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + HvEvmcs: util.Pointer(TriBool(32))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid HvTlbFlush`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + HvTlbFlush: util.Pointer(TriBool(-2))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid Ibpb`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + Ibpb: util.Pointer(TriBool(52))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid MdClear`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + MdClear: util.Pointer(TriBool(-52))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid PCID`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + PCID: util.Pointer(TriBool(82))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid Pdpe1GB`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + Pdpe1GB: util.Pointer(TriBool(-2))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid SSBD`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + SSBD: util.Pointer(TriBool(3))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid SpecCtrl`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + SpecCtrl: util.Pointer(TriBool(-2))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Invalid VirtSSBD`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Flags: &CpuFlags{ + VirtSSBD: util.Pointer(TriBool(2))}}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + err: errors.New(TriBool_Error_Invalid)}, + {name: `Type`, + input: baseConfig(ConfigQemu{CPU: &QemuCPU{Type: util.Pointer(CpuType("invalid"))}}), + current: &ConfigQemu{CPU: &QemuCPU{}}, + version: Version{}.max(), + err: CpuType("").Error(Version{}.max())}}}}, {category: `Disks`, valid: testType{ create: []test{