blob: 2169703fe6acf860375b6000e51b257c47be0a6a [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 Brunc7b036b2023-06-01 12:23:57 +02004package kmod
5
6import (
7 "errors"
8 "os"
9 "testing"
10)
11
12func TestManagerIntegration(t *testing.T) {
13 if os.Getenv("IN_KTEST") != "true" {
14 t.Skip("Not in ktest")
15 }
Lorenz Brunc7b036b2023-06-01 12:23:57 +020016 mgr, err := NewManagerFromPath("/lib/modules")
17 if err != nil {
18 t.Fatal(err)
19 }
20 t.Run("LoadExampleModule", func(t *testing.T) {
21 if err := mgr.LoadModule("r8169"); err != nil {
22 t.Error(err)
23 }
24 if _, err := os.Stat("/sys/module/r8169"); err != nil {
25 t.Error("module load returned success, but module not in sysfs")
26 }
27 })
28 t.Run("LoadNonexistentModule", func(t *testing.T) {
29 err := mgr.LoadModule("definitelynomodule")
30 var notFoundErr *ErrNotFound
31 if !errors.As(err, &notFoundErr) {
32 t.Errorf("expected ErrNotFound, got %v", err)
33 }
34 })
35 t.Run("LoadModuleTwice", func(t *testing.T) {
36 if err := mgr.LoadModule("r8169"); err != nil {
37 t.Error(err)
38 }
39 })
40 // TODO(lorenz): Should test loading dependencies here, but we currently
41 // have none in the kernel config and I'm not about to build another kernel
42 // just for this.
43 t.Run("LoadDeviceModule", func(t *testing.T) {
44 if err := mgr.LoadModulesForDevice("pci:v00008086d00001591sv00001043sd000085F0bc02sc00i00"); err != nil {
45 t.Error(err)
46 }
47 if _, err := os.Stat("/sys/module/ice"); err != nil {
48 t.Error("module load returned success, but module not in sysfs")
49 }
50 })
51}