From 1b877ca6690344948c5342b636a99b44726da8c2 Mon Sep 17 00:00:00 2001 From: Kishen V Date: Thu, 14 Mar 2024 17:01:13 +0530 Subject: [PATCH] Add tests for files in topology directory for offline CPUs Tests for missing file warnings for offline CPUs Signed-off-by: Kishen V --- pkg/cpu/cpu_linux_test.go | 85 ++++++++++++++++++ .../snapshots/linux-amd64-offlineCPUs.tar.gz | Bin 0 -> 11968 bytes 2 files changed, 85 insertions(+) create mode 100644 testdata/snapshots/linux-amd64-offlineCPUs.tar.gz diff --git a/pkg/cpu/cpu_linux_test.go b/pkg/cpu/cpu_linux_test.go index 3c334b57..5903d97f 100644 --- a/pkg/cpu/cpu_linux_test.go +++ b/pkg/cpu/cpu_linux_test.go @@ -7,12 +7,16 @@ package cpu_test import ( + "bytes" + "io" "os" "path/filepath" + "strings" "testing" "github.com/jaypipes/ghw/pkg/cpu" "github.com/jaypipes/ghw/pkg/option" + "github.com/jaypipes/ghw/pkg/topology" "github.com/jaypipes/ghw/testdata" ) @@ -71,3 +75,84 @@ func TestArmCPU(t *testing.T) { } } } + +func TestCheckCPUTopologyFilesForOfflineCPU(t *testing.T) { + if _, ok := os.LookupEnv("GHW_TESTING_SKIP_CPU"); ok { + t.Skip("Skipping CPU tests.") + } + + testdataPath, err := testdata.SnapshotsDirectory() + if err != nil { + t.Fatalf("Expected nil err, but got %v", err) + } + + offlineCPUSnapshot := filepath.Join(testdataPath, "linux-amd64-offlineCPUs.tar.gz") + + // Capture stderr + rErr, wErr, err := os.Pipe() + if err != nil { + t.Fatalf("Cannot pipe StdErr. %v", err) + } + os.Stderr = wErr + + info, err := cpu.New(option.WithSnapshot(option.SnapshotOptions{ + Path: offlineCPUSnapshot, + })) + if err != nil { + t.Fatalf("Expected nil err, but got %v", err) + } + if info == nil { + t.Fatalf("Expected non-nil CPUInfo, but got nil") + } + + if len(info.Processors) == 0 { + t.Fatalf("Expected >0 processors but got 0.") + } + wErr.Close() + var bufErr bytes.Buffer + io.Copy(&bufErr, rErr) + errorOutput := bufErr.String() + if strings.Contains(errorOutput, "WARNING: failed to read int from file:") { + t.Fatalf("Unexpected warning related to missing files under topology directory was reported") + } +} +func TestNumCoresAmongOfflineCPUs(t *testing.T) { + if _, ok := os.LookupEnv("GHW_TESTING_SKIP_CPU"); ok { + t.Skip("Skipping CPU tests.") + } + + testdataPath, err := testdata.SnapshotsDirectory() + if err != nil { + t.Fatalf("Expected nil err, but got %v", err) + } + + offlineCPUSnapshot := filepath.Join(testdataPath, "linux-amd64-offlineCPUs.tar.gz") + + // Capture stderr + rErr, wErr, err := os.Pipe() + if err != nil { + t.Fatalf("Cannot pipe the StdErr. %v", err) + } + info, err := topology.New(option.WithSnapshot(option.SnapshotOptions{ + Path: offlineCPUSnapshot, + })) + if err != nil { + t.Fatalf("Error determining node topology. %v", err) + } + + if len(info.Nodes) < 1 { + t.Fatal("No nodes found. Must contain one or more nodes") + } + for _, node := range info.Nodes { + if len(node.Cores) < 1 { + t.Fatal("No cores found. Must contain one or more cores") + } + } + wErr.Close() + var bufErr bytes.Buffer + io.Copy(&bufErr, rErr) + errorOutput := bufErr.String() + if strings.Contains(errorOutput, "WARNING: failed to read int from file:") { + t.Fatalf("Unexpected warnings related to missing files under topology directory was raised") + } +} diff --git a/testdata/snapshots/linux-amd64-offlineCPUs.tar.gz b/testdata/snapshots/linux-amd64-offlineCPUs.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7e71fa09f5b3c9aaf677e3e1283aa8ec679a67c8 GIT binary patch literal 11968 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 literal 0 HcmV?d00001