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