From 59ea3ba76997b2cbf33362d4a3d386db6a97152c Mon Sep 17 00:00:00 2001 From: Francesco Romani Date: Mon, 12 Apr 2021 08:04:54 +0200 Subject: [PATCH] gpu: test for github.com/jaypipes/ghw/issues/234 Add a test to ensure the issue reported on #234 is handled gracefully. Signed-off-by: Francesco Romani --- pkg/gpu/gpu_linux_test.go | 68 ++++++++++++++++++ ...64-61797caf7c0b6bca1725ad7975ed4773.tar.gz | Bin 0 -> 34632 bytes .../linux-amd64-amd-ryzen-1600.tar.gz | 1 + 3 files changed, 69 insertions(+) create mode 100644 pkg/gpu/gpu_linux_test.go create mode 100644 testdata/snapshots/linux-amd64-61797caf7c0b6bca1725ad7975ed4773.tar.gz create mode 120000 testdata/snapshots/linux-amd64-amd-ryzen-1600.tar.gz diff --git a/pkg/gpu/gpu_linux_test.go b/pkg/gpu/gpu_linux_test.go new file mode 100644 index 00000000..c1992c69 --- /dev/null +++ b/pkg/gpu/gpu_linux_test.go @@ -0,0 +1,68 @@ +// +// Use and distribution licensed under the Apache license version 2. +// +// See the COPYING file in the root project directory for full text. +// + +package gpu_test + +import ( + "errors" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/jaypipes/ghw/pkg/gpu" + "github.com/jaypipes/ghw/pkg/option" + "github.com/jaypipes/ghw/pkg/snapshot" + + "github.com/jaypipes/ghw/testdata" +) + +// testcase for https://github.com/jaypipes/ghw/issues/234 +// if nothing else: demonstrate how to consume snapshots from tests; +// test a boundary condition actually happened in the wild, even though on a VM environment. +func TestGPUWithoutNUMANodeInfo(t *testing.T) { + if _, ok := os.LookupEnv("GHW_TESTING_SKIP_GPU"); ok { + t.Skip("Skipping PCI tests.") + } + + testdataPath, err := testdata.SnapshotsDirectory() + if err != nil { + t.Fatalf("Expected nil err, but got %v", err) + } + + workstationSnapshot := filepath.Join(testdataPath, "linux-amd64-amd-ryzen-1600.tar.gz") + // from now on we use constants reflecting the content of the snapshot we requested, + // which we reviewed beforehand. IOW, you need to know the content of the + // snapshot to fully understand this test. Inspect it using + // GHW_SNAPSHOT_PATH="/path/to/linux-amd64-amd-ryzen-1600.tar.gz" ghwc gpu + + tmpRoot, err := ioutil.TempDir("", "ghw-gpu-testing-*") + if err != nil { + t.Fatalf("Unable to create temporary directory: %v", err) + } + + _, err = snapshot.UnpackInto(workstationSnapshot, tmpRoot, 0) + if err != nil { + t.Fatalf("Unable to unpack %q into %q: %v", workstationSnapshot, tmpRoot, err) + } + defer snapshot.Cleanup(tmpRoot) + + err = os.Remove(filepath.Join(tmpRoot, "/sys/class/drm/card0/device/numa_node")) + if err != nil && !errors.Is(err, os.ErrNotExist) { + t.Fatalf("Cannot remove the NUMA node info: %v", err) + } + + info, err := gpu.New(option.WithChroot(tmpRoot)) + if err != nil { + t.Fatalf("Expected nil err, but got %v", err) + } + if info == nil { + t.Fatalf("Expected non-nil GPUInfo, but got nil") + } + if len(info.GraphicsCards) == 0 { + t.Fatalf("Expected >0 GPU cards, but found 0.") + } +} diff --git a/testdata/snapshots/linux-amd64-61797caf7c0b6bca1725ad7975ed4773.tar.gz b/testdata/snapshots/linux-amd64-61797caf7c0b6bca1725ad7975ed4773.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d49986750f26d933c917653d64c21c1dcf32f1f3 GIT binary patch literal 34632 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 Izp+051C$R`cK`qY literal 0 HcmV?d00001 diff --git a/testdata/snapshots/linux-amd64-amd-ryzen-1600.tar.gz b/testdata/snapshots/linux-amd64-amd-ryzen-1600.tar.gz new file mode 120000 index 00000000..998f7444 --- /dev/null +++ b/testdata/snapshots/linux-amd64-amd-ryzen-1600.tar.gz @@ -0,0 +1 @@ +linux-amd64-61797caf7c0b6bca1725ad7975ed4773.tar.gz \ No newline at end of file