github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/pkg/ipmi/ipmi_vm_test.go (about) 1 // Copyright 2019-2022 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build !race 6 // +build !race 7 8 package ipmi 9 10 import ( 11 "bytes" 12 "testing" 13 14 "github.com/mvdan/u-root-coreutils/pkg/testutil" 15 16 "github.com/mvdan/u-root-coreutils/pkg/qemu" 17 "github.com/mvdan/u-root-coreutils/pkg/vmtest" 18 ) 19 20 func TestIntegrationIPMI(t *testing.T) { 21 o := &vmtest.Options{ 22 QEMUOpts: qemu.Options{ 23 Devices: []qemu.Device{ 24 // This integration test requires kernel built with the following options set: 25 // CONFIG_IPMI=y 26 // CONFIG_IPMI_DEVICE_INTERFACE=y 27 // CONFIG_IPMI_WATCHDOG=y 28 // CONFIG_IPMI_SI=y 29 qemu.ArbitraryArgs{"-device", "ipmi-bmc-sim,id=bmc0"}, 30 qemu.ArbitraryArgs{"-device", "pci-ipmi-kcs,bmc=bmc0"}, 31 }, 32 }, 33 } 34 vmtest.GolangTest(t, []string{"github.com/mvdan/u-root-coreutils/pkg/ipmi"}, o) 35 } 36 37 func TestWatchdogRunningQemu(t *testing.T) { 38 testutil.SkipIfNotRoot(t) 39 i, err := Open(0) 40 if err != nil { 41 t.Fatalf("Open(0) = %v", err) 42 } 43 defer i.Close() 44 45 ret, err := i.WatchdogRunning() 46 if err != nil { 47 t.Errorf("i.WatchdogRunning() = %v", err) 48 } 49 if ret { 50 t.Errorf("i.WatchdogRunning() = %t, want false", ret) 51 } 52 } 53 54 func TestShutoffWatchdogQemu(t *testing.T) { 55 testutil.SkipIfNotRoot(t) 56 i, err := Open(0) 57 if err != nil { 58 t.Fatalf("Open(0) = %q", err) 59 } 60 defer i.Close() 61 62 if err := i.ShutoffWatchdog(); err != nil { 63 t.Errorf("i.ShutoffWatchdog() = %q", err) 64 } 65 } 66 67 func TestGetDeviceIDQemu(t *testing.T) { 68 testutil.SkipIfNotRoot(t) 69 i, err := Open(0) 70 if err != nil { 71 t.Fatalf("Open(0) = %q", err) 72 } 73 defer i.Close() 74 75 id, err := i.GetDeviceID() 76 if err != nil { 77 t.Errorf("i.GetDeviceID() = %q", err) 78 } 79 if id.DeviceID != 0x20 { 80 t.Errorf("DeviceID: %q, want: %q", id.DeviceID, 0x1) 81 } 82 if id.DeviceRevision != 0x0 { 83 t.Errorf("DeviceRevision: %q, want: %q", id.DeviceRevision, 0x0) 84 } 85 if id.FwRev1 != 0x0 { 86 t.Errorf("FwRev1: %q, want: %q", id.FwRev1, 0x0) 87 } 88 if id.FwRev2 != 0x0 { 89 t.Errorf("FwRev2: %q, want: %q", id.FwRev2, 0x0) 90 } 91 if id.IpmiVersion != 0x2 { 92 t.Errorf("IpmiVersion: %q, want: %q", id.IpmiVersion, 0x2) 93 } 94 /* 95 This field is differs on every call, I can't figure out why 96 97 if id.AdtlDeviceSupport != 0xa { 98 t.Errorf("AdtlDeviceSupport: %q, want: %q", id.AdtlDeviceSupport, 0xa) 99 } 100 */ 101 if !bytes.Equal(id.ManufacturerID[:], []byte{0x0, 0x0, 0x0}) { 102 t.Errorf("ManufacturerID: %q, want: %q", id.ManufacturerID, []byte{0x0, 0x0, 0x0}) 103 } 104 if !bytes.Equal(id.ProductID[:], []byte{0x0, 0x0}) { 105 t.Errorf("ProductID: %q, want: %q", id.ProductID, []byte{0x0, 0x0}) 106 } 107 108 } 109 110 func TestEnableSELQemu(t *testing.T) { 111 testutil.SkipIfNotRoot(t) 112 i, err := Open(0) 113 if err != nil { 114 t.Fatalf("Open(0) = %q", err) 115 } 116 defer i.Close() 117 118 ret, err := i.EnableSEL() 119 if err != nil { 120 t.Errorf("i.EnableSEL() = %v", err) 121 } 122 if !ret { 123 t.Errorf("i.EnableSEL() = %v, want true", ret) 124 } 125 } 126 127 func TestGetSELInfoQemu(t *testing.T) { 128 testutil.SkipIfNotRoot(t) 129 i, err := Open(0) 130 if err != nil { 131 t.Fatalf("Open(0) = %v", err) 132 } 133 defer i.Close() 134 135 info, err := i.GetSELInfo() 136 if err != nil { 137 t.Errorf("i.GetSELInfo() = %v", err) 138 } 139 if info.Version != 0x51 { 140 t.Errorf("Version = %q, want %q", info.Version, 0x51) 141 } 142 if info.Entries != 0x0 { 143 t.Errorf("Version = %q, want %q", info.Entries, 0x0) 144 } 145 if info.FreeSpace != 0x800 { 146 t.Errorf("Version = %q, want %q", info.FreeSpace, 0x800) 147 } 148 if info.OpSupport != 0x2 { 149 t.Errorf("Version = %q, want %q", info.Version, 0x2) 150 } 151 152 } 153 154 func TestGetLanConfigQemu(t *testing.T) { 155 testutil.SkipIfNotRoot(t) 156 t.Skip("Not supported command") 157 i, err := Open(0) 158 if err != nil { 159 t.Fatalf("Open(0) = %v", err) 160 } 161 defer i.Close() 162 163 if _, err := i.GetLanConfig(1, 1); err != nil { 164 t.Errorf("i.GetLanConfig(1, 1) = %v", err) 165 } 166 } 167 168 func TestRawCmdQemu(t *testing.T) { 169 testutil.SkipIfNotRoot(t) 170 i, err := Open(0) 171 if err != nil { 172 t.Fatalf("Open(0) = %v", err) 173 } 174 defer i.Close() 175 176 // WatchdogRunning configuration 177 data := []byte{0x6, 0x1} 178 if _, err := i.RawCmd(data); err != nil { 179 t.Errorf("i.RawCmd(data) = %v", err) 180 } 181 } 182 183 func TestSetSystemFWVersionQemu(t *testing.T) { 184 testutil.SkipIfNotRoot(t) 185 t.Skip("Not supported command") 186 i, err := Open(0) 187 if err != nil { 188 t.Fatalf("Open(0) = %v", err) 189 } 190 defer i.Close() 191 192 if err := i.SetSystemFWVersion("TestTest"); err == nil { 193 t.Errorf("i.SetSystemFWVersion(TestTest) = %v", err) 194 } 195 } 196 197 func TestLogSystemEventQemu(t *testing.T) { 198 testutil.SkipIfNotRoot(t) 199 i, err := Open(0) 200 if err != nil { 201 t.Fatalf("Open(0) = %v", err) 202 } 203 defer i.Close() 204 205 e := &Event{} 206 if err := i.LogSystemEvent(e); err != nil { 207 t.Errorf("i.LogSystemEvent(e) = %v", err) 208 } 209 }