blob: b2d86499c119312befa05ab2071193da54c5d630 [file] [log] [blame] [edit]
package main
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
"source.monogon.dev/cloud/agent/api"
)
func TestParseCpuinfoAMD64(t *testing.T) {
var cases = []struct {
name string
data string
expected *api.CPU
}{
{
"QEMUSingleCore",
"cpuinfo_qemu_virtual.txt",
&api.CPU{
Vendor: "GenuineIntel",
Model: "QEMU Virtual CPU version 2.1.0",
Cores: 1,
HardwareThreads: 1,
Architecture: &api.CPU_X86_64_{X86_64: &api.CPU_X86_64{
Family: 6,
Model: 6,
Stepping: 3,
}},
},
},
{
"AMDEpyc7402P",
"cpuinfo_amd_7402p.txt",
&api.CPU{
Vendor: "AuthenticAMD",
Model: "AMD EPYC 7402P 24-Core Processor",
Cores: 24,
HardwareThreads: 48,
Architecture: &api.CPU_X86_64_{X86_64: &api.CPU_X86_64{
Family: 23,
Model: 49,
Stepping: 0,
}},
},
},
{
"Intel12900K",
"cpuinfo_intel_12900k.txt",
&api.CPU{
Vendor: "GenuineIntel",
Model: "12th Gen Intel(R) Core(TM) i9-12900K",
Cores: 16,
HardwareThreads: 24,
Architecture: &api.CPU_X86_64_{X86_64: &api.CPU_X86_64{
Family: 6,
Model: 151,
Stepping: 2,
}},
},
},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
rawData, err := os.ReadFile("testdata/" + c.data)
if err != nil {
t.Fatalf("unable to read testdata file: %v", err)
}
res, errs := parseCpuinfoAMD64(rawData)
if len(errs) > 0 {
t.Fatal(errs[0])
}
assert.Equal(t, c.expected.Vendor, res.Vendor, "vendor mismatch")
assert.Equal(t, c.expected.Model, res.Model, "model mismatch")
assert.Equal(t, c.expected.Cores, res.Cores, "cores mismatch")
assert.Equal(t, c.expected.HardwareThreads, res.HardwareThreads, "hardware threads mismatch")
x86_64, ok := res.Architecture.(*api.CPU_X86_64_)
if !ok {
t.Fatal("CPU architecture not X86_64")
}
expectedX86_64 := c.expected.Architecture.(*api.CPU_X86_64_)
assert.Equal(t, expectedX86_64.X86_64.Family, x86_64.X86_64.Family, "x86_64 family mismatch")
assert.Equal(t, expectedX86_64.X86_64.Model, x86_64.X86_64.Model, "x86_64 model mismatch")
assert.Equal(t, expectedX86_64.X86_64.Stepping, x86_64.X86_64.Stepping, "x86_64 stepping mismatch")
})
}
}