xref: /aosp_15_r20/build/soong/ui/metrics/hostinfo_linux_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2024 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//	http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Workerpackage metrics
15*333d2b36SAndroid Build Coastguard Worker
16*333d2b36SAndroid Build Coastguard Worker// This file contain code to extract host information on linux from
17*333d2b36SAndroid Build Coastguard Worker// /proc/cpuinfo and /proc/meminfo relevant to machine performance
18*333d2b36SAndroid Build Coastguard Worker
19*333d2b36SAndroid Build Coastguard Workerimport (
20*333d2b36SAndroid Build Coastguard Worker	"reflect"
21*333d2b36SAndroid Build Coastguard Worker	"testing"
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/finder/fs"
24*333d2b36SAndroid Build Coastguard Worker)
25*333d2b36SAndroid Build Coastguard Worker
26*333d2b36SAndroid Build Coastguard Workerfunc TestNewCpuInfo(t *testing.T) {
27*333d2b36SAndroid Build Coastguard Worker	fs := fs.NewMockFs(nil)
28*333d2b36SAndroid Build Coastguard Worker
29*333d2b36SAndroid Build Coastguard Worker	if err := fs.MkDirs("/proc"); err != nil {
30*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("failed to create /proc dir: %v", err)
31*333d2b36SAndroid Build Coastguard Worker	}
32*333d2b36SAndroid Build Coastguard Worker	cpuFileName := "/proc/cpuinfo"
33*333d2b36SAndroid Build Coastguard Worker
34*333d2b36SAndroid Build Coastguard Worker	if err := fs.WriteFile(cpuFileName, cpuData, 0644); err != nil {
35*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("failed to write file %s: %v", cpuFileName, err)
36*333d2b36SAndroid Build Coastguard Worker	}
37*333d2b36SAndroid Build Coastguard Worker
38*333d2b36SAndroid Build Coastguard Worker	cpuInfo, err := NewCpuInfo(fs)
39*333d2b36SAndroid Build Coastguard Worker	if err != nil {
40*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("got %v, want nil for error", err)
41*333d2b36SAndroid Build Coastguard Worker	}
42*333d2b36SAndroid Build Coastguard Worker
43*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(cpuInfo, expectedCpuInfo) {
44*333d2b36SAndroid Build Coastguard Worker		t.Errorf("got %v, expecting %v for CpuInfo", cpuInfo, expectedCpuInfo)
45*333d2b36SAndroid Build Coastguard Worker	}
46*333d2b36SAndroid Build Coastguard Worker
47*333d2b36SAndroid Build Coastguard Worker}
48*333d2b36SAndroid Build Coastguard Worker
49*333d2b36SAndroid Build Coastguard Workerfunc TestNewMemInfo(t *testing.T) {
50*333d2b36SAndroid Build Coastguard Worker	fs := fs.NewMockFs(nil)
51*333d2b36SAndroid Build Coastguard Worker
52*333d2b36SAndroid Build Coastguard Worker	if err := fs.MkDirs("/proc"); err != nil {
53*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("failed to create /proc dir: %v", err)
54*333d2b36SAndroid Build Coastguard Worker	}
55*333d2b36SAndroid Build Coastguard Worker	memFileName := "/proc/meminfo"
56*333d2b36SAndroid Build Coastguard Worker
57*333d2b36SAndroid Build Coastguard Worker	if err := fs.WriteFile(memFileName, memData, 0644); err != nil {
58*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("failed to write file %s: %v", memFileName, err)
59*333d2b36SAndroid Build Coastguard Worker	}
60*333d2b36SAndroid Build Coastguard Worker
61*333d2b36SAndroid Build Coastguard Worker	memInfo, err := NewMemInfo(fs)
62*333d2b36SAndroid Build Coastguard Worker	if err != nil {
63*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("got %v, want nil for error", err)
64*333d2b36SAndroid Build Coastguard Worker	}
65*333d2b36SAndroid Build Coastguard Worker
66*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(memInfo, expectedMemInfo) {
67*333d2b36SAndroid Build Coastguard Worker		t.Errorf("got %v, expecting %v for MemInfo", memInfo, expectedMemInfo)
68*333d2b36SAndroid Build Coastguard Worker	}
69*333d2b36SAndroid Build Coastguard Worker
70*333d2b36SAndroid Build Coastguard Worker}
71*333d2b36SAndroid Build Coastguard Worker
72*333d2b36SAndroid Build Coastguard Workervar cpuData = []byte(`processor	: 0
73*333d2b36SAndroid Build Coastguard Workervendor_id	: %%VENDOR%%
74*333d2b36SAndroid Build Coastguard Workercpu family	: 123
75*333d2b36SAndroid Build Coastguard Workermodel		: 456
76*333d2b36SAndroid Build Coastguard Workermodel name	: %%CPU MODEL NAME%%
77*333d2b36SAndroid Build Coastguard Workerstepping	: 0
78*333d2b36SAndroid Build Coastguard Workercpu MHz		: 5555.555
79*333d2b36SAndroid Build Coastguard Workercache size	: 512 KB
80*333d2b36SAndroid Build Coastguard Workerphysical id	: 0
81*333d2b36SAndroid Build Coastguard Workersiblings	: 128
82*333d2b36SAndroid Build Coastguard Workercore id		: 0
83*333d2b36SAndroid Build Coastguard Workercpu cores	: 64
84*333d2b36SAndroid Build Coastguard Workerapicid		: 0
85*333d2b36SAndroid Build Coastguard Workerinitial apicid	: 0
86*333d2b36SAndroid Build Coastguard Workerfpu		: yes
87*333d2b36SAndroid Build Coastguard Workerfpu_exception	: yes
88*333d2b36SAndroid Build Coastguard Workercpuid level	: 789
89*333d2b36SAndroid Build Coastguard Workerwp		: yes
90*333d2b36SAndroid Build Coastguard Workerflags		: %%cpu flags go here%%
91*333d2b36SAndroid Build Coastguard Workerbugs		: %%bugs go here%%
92*333d2b36SAndroid Build Coastguard Worker
93*333d2b36SAndroid Build Coastguard Workerprocessor	: 1
94*333d2b36SAndroid Build Coastguard Workervendor_id	: %%BADVENDOR%%
95*333d2b36SAndroid Build Coastguard Workercpu family	: 234
96*333d2b36SAndroid Build Coastguard Workermodel		: 567
97*333d2b36SAndroid Build Coastguard Workermodel name	: %%BAD MODEL NAME%%
98*333d2b36SAndroid Build Coastguard Workerflags		: %%BAD cpu flags go here%%
99*333d2b36SAndroid Build Coastguard Worker`)
100*333d2b36SAndroid Build Coastguard Worker
101*333d2b36SAndroid Build Coastguard Workervar expectedCpuInfo = &CpuInfo{
102*333d2b36SAndroid Build Coastguard Worker	VendorId:  "%%VENDOR%%",
103*333d2b36SAndroid Build Coastguard Worker	ModelName: "%%CPU MODEL NAME%%",
104*333d2b36SAndroid Build Coastguard Worker	CpuCores:  64,
105*333d2b36SAndroid Build Coastguard Worker	Flags:     "%%cpu flags go here%%",
106*333d2b36SAndroid Build Coastguard Worker}
107*333d2b36SAndroid Build Coastguard Worker
108*333d2b36SAndroid Build Coastguard Workervar memData = []byte(`MemTotal:       1000 mB
109*333d2b36SAndroid Build Coastguard WorkerMemFree:        10240000
110*333d2b36SAndroid Build Coastguard WorkerMemAvailable:   3000 kB
111*333d2b36SAndroid Build Coastguard WorkerBuffers:         7177844 kB
112*333d2b36SAndroid Build Coastguard Worker`)
113*333d2b36SAndroid Build Coastguard Worker
114*333d2b36SAndroid Build Coastguard Workervar expectedMemInfo = &MemInfo{
115*333d2b36SAndroid Build Coastguard Worker	MemTotal:     1048576000,
116*333d2b36SAndroid Build Coastguard Worker	MemFree:      10240000,
117*333d2b36SAndroid Build Coastguard Worker	MemAvailable: 3072000,
118*333d2b36SAndroid Build Coastguard Worker}
119