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  }