|  | 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") | 
|  | }) | 
|  | } | 
|  | } |