...
1
2
3
4 package devices
5
6 import (
7 "errors"
8 "io/fs"
9 "os"
10 "testing"
11
12 "golang.org/x/sys/unix"
13 )
14
15 func cleanupTest() {
16 unixLstat = unix.Lstat
17 osReadDir = os.ReadDir
18 }
19
20 func TestDeviceFromPathLstatFailure(t *testing.T) {
21 testError := errors.New("test error")
22
23
24 unixLstat = func(path string, stat *unix.Stat_t) error {
25 return testError
26 }
27 defer cleanupTest()
28
29 _, err := DeviceFromPath("", "")
30 if !errors.Is(err, testError) {
31 t.Fatalf("Unexpected error %v, expected %v", err, testError)
32 }
33 }
34
35 func TestHostDevicesIoutilReadDirFailure(t *testing.T) {
36 testError := errors.New("test error")
37
38
39 osReadDir = func(dirname string) ([]fs.DirEntry, error) {
40 return nil, testError
41 }
42 defer cleanupTest()
43
44 _, err := HostDevices()
45 if !errors.Is(err, testError) {
46 t.Fatalf("Unexpected error %v, expected %v", err, testError)
47 }
48 }
49
50 func TestHostDevicesIoutilReadDirDeepFailure(t *testing.T) {
51 testError := errors.New("test error")
52 called := false
53
54
55 osReadDir = func(dirname string) ([]fs.DirEntry, error) {
56 if called {
57 return nil, testError
58 }
59 called = true
60
61
62 fi, err := os.Lstat("/tmp")
63 if err != nil {
64 t.Fatalf("Unexpected error %v", err)
65 }
66
67 return []fs.DirEntry{fs.FileInfoToDirEntry(fi)}, nil
68 }
69 defer cleanupTest()
70
71 _, err := HostDevices()
72 if !errors.Is(err, testError) {
73 t.Fatalf("Unexpected error %v, expected %v", err, testError)
74 }
75 }
76
77 func TestHostDevicesAllValid(t *testing.T) {
78 devices, err := HostDevices()
79 if err != nil {
80 t.Fatalf("failed to get host devices: %v", err)
81 }
82
83 for _, device := range devices {
84
85 if device.Major == 0 {
86 t.Errorf("device entry %+v has zero major number", device)
87 }
88 switch device.Type {
89 case BlockDevice, CharDevice:
90 case FifoDevice:
91 t.Logf("fifo devices shouldn't show up from HostDevices")
92 fallthrough
93 default:
94 t.Errorf("device entry %+v has unexpected type %v", device, device.Type)
95 }
96 }
97 }
98
View as plain text