blob: 43f61fde39cdd05208c8fa17955b8d2cf8ab2050 [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
2// SPDX-License-Identifier: Apache-2.0
3
Lorenz Brun62948542023-01-10 13:28:44 +00004package main
5
6import (
7 "os"
8 "testing"
9
10 "github.com/stretchr/testify/assert"
11
12 "source.monogon.dev/cloud/agent/api"
13)
14
15func TestParseCpuinfoAMD64(t *testing.T) {
16 var cases = []struct {
17 name string
18 data string
19 expected *api.CPU
20 }{
21 {
22 "QEMUSingleCore",
23 "cpuinfo_qemu_virtual.txt",
24 &api.CPU{
25 Vendor: "GenuineIntel",
26 Model: "QEMU Virtual CPU version 2.1.0",
27 Cores: 1,
28 HardwareThreads: 1,
29 Architecture: &api.CPU_X86_64_{X86_64: &api.CPU_X86_64{
30 Family: 6,
31 Model: 6,
32 Stepping: 3,
33 }},
34 },
35 },
36 {
37 "AMDEpyc7402P",
38 "cpuinfo_amd_7402p.txt",
39 &api.CPU{
40 Vendor: "AuthenticAMD",
41 Model: "AMD EPYC 7402P 24-Core Processor",
42 Cores: 24,
43 HardwareThreads: 48,
44 Architecture: &api.CPU_X86_64_{X86_64: &api.CPU_X86_64{
45 Family: 23,
46 Model: 49,
47 Stepping: 0,
48 }},
49 },
50 },
51 {
52 "Intel12900K",
53 "cpuinfo_intel_12900k.txt",
54 &api.CPU{
55 Vendor: "GenuineIntel",
56 Model: "12th Gen Intel(R) Core(TM) i9-12900K",
57 Cores: 16,
58 HardwareThreads: 24,
59 Architecture: &api.CPU_X86_64_{X86_64: &api.CPU_X86_64{
60 Family: 6,
61 Model: 151,
62 Stepping: 2,
63 }},
64 },
65 },
66 }
67 for _, c := range cases {
68 t.Run(c.name, func(t *testing.T) {
69 rawData, err := os.ReadFile("testdata/" + c.data)
70 if err != nil {
71 t.Fatalf("unable to read testdata file: %v", err)
72 }
73 res, errs := parseCpuinfoAMD64(rawData)
74 if len(errs) > 0 {
75 t.Fatal(errs[0])
76 }
77 assert.Equal(t, c.expected.Vendor, res.Vendor, "vendor mismatch")
78 assert.Equal(t, c.expected.Model, res.Model, "model mismatch")
79 assert.Equal(t, c.expected.Cores, res.Cores, "cores mismatch")
80 assert.Equal(t, c.expected.HardwareThreads, res.HardwareThreads, "hardware threads mismatch")
81 x86_64, ok := res.Architecture.(*api.CPU_X86_64_)
82 if !ok {
83 t.Fatal("CPU architecture not X86_64")
84 }
85 expectedX86_64 := c.expected.Architecture.(*api.CPU_X86_64_)
86 assert.Equal(t, expectedX86_64.X86_64.Family, x86_64.X86_64.Family, "x86_64 family mismatch")
87 assert.Equal(t, expectedX86_64.X86_64.Model, x86_64.X86_64.Model, "x86_64 model mismatch")
88 assert.Equal(t, expectedX86_64.X86_64.Stepping, x86_64.X86_64.Stepping, "x86_64 stepping mismatch")
89 })
90 }
91}