Skip to content

Commit

Permalink
test(agent): add unit test for ipmi package
Browse files Browse the repository at this point in the history
Signed-off-by: Zespre Schmidt <[email protected]>
  • Loading branch information
starbops committed Jan 11, 2025
1 parent 54a55b8 commit 51f5e1e
Show file tree
Hide file tree
Showing 5 changed files with 389 additions and 20 deletions.
12 changes: 12 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ generate-kubevirt-crd: controller-gen ## Clone KubeVirt API and generate CustomR
rm -rvf $$TMP_DIR; \
rm -vf config/kubevirt-crd/kubevirt.io_datavolumetemplatespecs.yaml

.PHONY: generate-mock
generate-mock: mockgen ## Generate mocks for interfaces.
# $(MOCKGEN) -destination=mocks/mock_resourcemanager.go -package=mocks kubevirt.io/kubevirtbmc/pkg/resourcemanager ResourceManager
$(MOCKGEN) -source=pkg/resourcemanager/resource_manager.go -destination=pkg/resourcemanager/mock_resource_manager.go -package=resourcemanager

REDFISH_SCHEMA_BUNDLE ?= DSP8010_2024.3
.PHONY: download-redfish-schema
download-schema: ## Download the Redfish schema.
Expand Down Expand Up @@ -220,11 +225,13 @@ KUSTOMIZE ?= $(LOCALBIN)/kustomize
CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
ENVTEST ?= $(LOCALBIN)/setup-envtest
KIND ?= $(LOCALBIN)/kind
MOCKGEN ?= $(LOCALBIN)/mockgen

## Tool Versions
KUSTOMIZE_VERSION ?= v5.2.1
CONTROLLER_TOOLS_VERSION ?= v0.15.0
KIND_VERSION ?= v0.24.0
MOCKGEN_VERSION ?= v0.5.0

.PHONY: kustomize
kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. If wrong version is installed, it will be removed before downloading.
Expand All @@ -251,3 +258,8 @@ kind: $(KIND) ## Download kind locally if necessary.
$(KIND): $(LOCALBIN)
test -s $(LOCALBIN)/kind || GOBIN=$(LOCALBIN) GO111MODULE=on go install sigs.k8s.io/kind@$(KIND_VERSION)

.PHONY: mockgen
mockgen: $(MOCKGEN) ## Download mockgen locally if necessary.
$(MOCKGEN): $(LOCALBIN)
test -s $(LOCALBIN)/mockgen || GOBIN=$(LOCALBIN) go install go.uber.org/mock/mockgen@$(MOCKGEN_VERSION)

15 changes: 8 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ require (
github.com/onsi/ginkgo/v2 v2.15.0
github.com/onsi/gomega v1.31.0
github.com/sirupsen/logrus v1.9.0
github.com/stretchr/testify v1.8.4
github.com/stretchr/testify v1.9.0
github.com/urfave/cli/v2 v2.25.7
github.com/vmware/goipmi v0.0.0-20181114221114-2333cd82d702
go.uber.org/mock v0.5.0
k8s.io/api v0.29.10
k8s.io/apiextensions-apiserver v0.29.10
k8s.io/apimachinery v0.29.10
Expand Down Expand Up @@ -59,18 +60,18 @@ require (
github.com/prometheus/procfs v0.12.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/net v0.26.0 // indirect
golang.org/x/oauth2 v0.12.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/term v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/term v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.18.0 // indirect
golang.org/x/tools v0.22.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.33.0 // indirect
Expand Down
29 changes: 16 additions & 13 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,9 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
Expand All @@ -205,8 +206,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs=
github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
github.com/vmware/goipmi v0.0.0-20181114221114-2333cd82d702 h1:yx587LNBbOpIxzCBHBiI94Wx8ryIAFlu1w0lDwm64cA=
Expand All @@ -220,6 +221,8 @@ github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU=
go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
Expand Down Expand Up @@ -256,8 +259,8 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
Expand Down Expand Up @@ -291,20 +294,20 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
Expand All @@ -320,8 +323,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM=
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down
212 changes: 212 additions & 0 deletions pkg/ipmi/handler_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
package ipmi

import (
"fmt"
"testing"

"github.com/stretchr/testify/assert"
goipmi "github.com/vmware/goipmi"
"go.uber.org/mock/gomock"

"kubevirt.io/kubevirtbmc/pkg/resourcemanager"
)

func TestChassisControlHandler(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockRM := resourcemanager.NewMockResourceManager(ctrl)
handler := NewHandler(mockRM)

testCases := []struct {
name string
chassisControl goipmi.ChassisControl
expectedCall func()
expectedCode goipmi.CompletionCode
}{
{
name: "PowerOn success",
chassisControl: goipmi.ControlPowerUp,
expectedCall: func() {
mockRM.EXPECT().PowerOn().Return(nil)
},
expectedCode: goipmi.CommandCompleted,
},
{
name: "PowerOn failure",
chassisControl: goipmi.ControlPowerUp,
expectedCall: func() {
mockRM.EXPECT().PowerOn().Return(fmt.Errorf("error"))
},
expectedCode: goipmi.ErrInvalidState,
},
{
name: "PowerOff success",
chassisControl: goipmi.ControlPowerDown,
expectedCall: func() {
mockRM.EXPECT().PowerOff().Return(nil)
},
expectedCode: goipmi.CommandCompleted,
},
{
name: "PowerOff failure",
chassisControl: goipmi.ControlPowerDown,
expectedCall: func() {
mockRM.EXPECT().PowerOff().Return(fmt.Errorf("error"))
},
expectedCode: goipmi.ErrInvalidState,
},
{
name: "PowerCycle success",
chassisControl: goipmi.ControlPowerCycle,
expectedCall: func() {
mockRM.EXPECT().PowerCycle().Return(nil)
},
expectedCode: goipmi.CommandCompleted,
},
{
name: "PowerCycle failure",
chassisControl: goipmi.ControlPowerCycle,
expectedCall: func() {
mockRM.EXPECT().PowerCycle().Return(fmt.Errorf("error"))
},
expectedCode: goipmi.ErrInvalidState,
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
tc.expectedCall()

message := &goipmi.Message{
Data: []byte{byte(tc.chassisControl)},
}

response := handler.chassisControlHandler(message)

assert.IsType(t, &goipmi.ChassisControlResponse{}, response)
res, _ := response.(*goipmi.ChassisControlResponse)
assert.Equal(t, tc.expectedCode, res.CompletionCode)
})
}
}

func TestChassisStatusHandler(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockRM := resourcemanager.NewMockResourceManager(ctrl)
handler := NewHandler(mockRM)

testCases := []struct {
name string
expectedStatus uint8
expectedCall func()
expectedCode goipmi.CompletionCode
}{
{
name: "PowerStatus on",
expectedStatus: goipmi.SystemPower,
expectedCall: func() {
mockRM.EXPECT().GetPowerStatus().Return(true, nil)
},
expectedCode: goipmi.CommandCompleted,
},
{
name: "PowerStatus off",
expectedStatus: goipmi.PowerOverload,
expectedCall: func() {
mockRM.EXPECT().GetPowerStatus().Return(false, nil)
},
expectedCode: goipmi.CommandCompleted,
},
{
name: "PowerStatus error",
expectedCall: func() {
mockRM.EXPECT().GetPowerStatus().Return(false, fmt.Errorf("error"))
},
expectedCode: goipmi.ErrInvalidState,
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
tc.expectedCall()

message := &goipmi.Message{}

response := handler.chassisStatusHandler(message)

assert.IsType(t, &goipmi.ChassisStatusResponse{}, response)
res, _ := response.(*goipmi.ChassisStatusResponse)
assert.Equal(t, tc.expectedCode, res.CompletionCode)
if tc.expectedStatus != 0 {
assert.Equal(t, tc.expectedStatus, res.PowerState)
}
})
}
}

func TestSetSystemBootOptionsHandler(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockRM := resourcemanager.NewMockResourceManager(ctrl)
handler := NewHandler(mockRM)

testCases := []struct {
name string
bootDevice goipmi.BootDevice
expectedCall func()
expectedCode goipmi.CompletionCode
}{
{
name: "SetSystemBootOptions with PXE success",
bootDevice: goipmi.BootDevicePxe,
expectedCall: func() {
mockRM.EXPECT().SetBootDevice(gomock.Any()).Return(nil)
},
expectedCode: goipmi.CommandCompleted,
},
{
name: "SetSystemBootOptions with PXE failed",
bootDevice: goipmi.BootDevicePxe,
expectedCall: func() {
mockRM.EXPECT().SetBootDevice(gomock.Any()).Return(fmt.Errorf("error"))
},
expectedCode: goipmi.ErrUnspecified,
},
{
name: "SetSystemBootOptions with disk success",
bootDevice: goipmi.BootDeviceDisk,
expectedCall: func() {
mockRM.EXPECT().SetBootDevice(gomock.Any()).Return(nil)
},
expectedCode: goipmi.CommandCompleted,
},
{
name: "SetSystemBootOptions with disk failed",
bootDevice: goipmi.BootDeviceDisk,
expectedCall: func() {
mockRM.EXPECT().SetBootDevice(gomock.Any()).Return(fmt.Errorf("error"))
},
expectedCode: goipmi.ErrUnspecified,
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
tc.expectedCall()

message := &goipmi.Message{
Data: []byte{5, uint8(tc.bootDevice), 0, 0, 0, 0},
}

response := handler.setSystemBootOptionsHandler(message)

assert.IsType(t, &goipmi.SetSystemBootOptionsResponse{}, response)
res, _ := response.(*goipmi.SetSystemBootOptionsResponse)
assert.Equal(t, tc.expectedCode, res.CompletionCode)
})
}
}
Loading

0 comments on commit 51f5e1e

Please sign in to comment.