Skip to content

Commit

Permalink
test(storage/nvme): add client create backend controller tests
Browse files Browse the repository at this point in the history
Signed-off-by: Artsiom Koltun <[email protected]>
  • Loading branch information
artek-koltun authored and sandersms committed Jan 19, 2024
1 parent 49ff5e7 commit 35c8b3b
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 4 deletions.
14 changes: 10 additions & 4 deletions storage/backend/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,19 @@ func New(addr string) (*Client, error) {
return nil, err
}

return NewWithConnector(connector)
return NewWithArgs(
connector,
pb.NewNvmeRemoteControllerServiceClient,
)
}

// NewWithConnector creates a new instance of Client with provided connector
func NewWithConnector(connector grpcOpi.Connector) (*Client, error) {
// NewWithArgs creates a new instance of Client with non-default members
func NewWithArgs(
connector grpcOpi.Connector,
createNvmeClient CreateNvmeClient,
) (*Client, error) {
return &Client{
connector: connector,
createNvmeClient: pb.NewNvmeRemoteControllerServiceClient,
createNvmeClient: createNvmeClient,
}, nil
}
104 changes: 104 additions & 0 deletions storage/backend/nvme_controller_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2024 Intel Corporation

// Package backend implements the go library for OPI backend storage
package backend

import (
"context"
"errors"
"testing"
"time"

"github.com/opiproject/godpu/mocks"
pb "github.com/opiproject/opi-api/storage/v1alpha1/gen/go"
"github.com/stretchr/testify/require"
"google.golang.org/grpc"
"google.golang.org/protobuf/proto"
)

func TestCreateNvmeController(t *testing.T) {
testControllerID := "remotenvme0"
testController := &pb.NvmeRemoteController{
Multipath: pb.NvmeMultipath_NVME_MULTIPATH_FAILOVER,
}

tests := map[string]struct {
giveClientErr error
giveConnectorErr error
wantErr error
wantRequest *pb.CreateNvmeRemoteControllerRequest
wantResponse *pb.NvmeRemoteController
wantConnClosed bool
}{
"successful call": {
giveConnectorErr: nil,
giveClientErr: nil,
wantErr: nil,
wantRequest: &pb.CreateNvmeRemoteControllerRequest{
NvmeRemoteControllerId: testControllerID,
NvmeRemoteController: proto.Clone(testController).(*pb.NvmeRemoteController),
},
wantResponse: proto.Clone(testController).(*pb.NvmeRemoteController),
wantConnClosed: true,
},
"client err": {
giveConnectorErr: nil,
giveClientErr: errors.New("Some client error"),
wantErr: errors.New("Some client error"),
wantRequest: &pb.CreateNvmeRemoteControllerRequest{
NvmeRemoteControllerId: testControllerID,
NvmeRemoteController: proto.Clone(testController).(*pb.NvmeRemoteController),
},
wantResponse: nil,
wantConnClosed: true,
},
"connector err": {
giveConnectorErr: errors.New("Some conn error"),
giveClientErr: nil,
wantErr: errors.New("Some conn error"),
wantRequest: nil,
wantResponse: nil,
wantConnClosed: false,
},
}

for testName, tt := range tests {
t.Run(testName, func(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()

mockClient := mocks.NewNvmeRemoteControllerServiceClient(t)
if tt.wantRequest != nil {
toReturn := proto.Clone(tt.wantResponse).(*pb.NvmeRemoteController)
mockClient.EXPECT().CreateNvmeRemoteController(ctx, tt.wantRequest).
Return(toReturn, tt.giveClientErr)
}

connClosed := false
mockConn := mocks.NewConnector(t)
mockConn.EXPECT().NewConn().Return(
&grpc.ClientConn{},
func() { connClosed = true },
tt.giveConnectorErr,
)

c, _ := NewWithArgs(
mockConn,
func(grpc.ClientConnInterface) pb.NvmeRemoteControllerServiceClient {
return mockClient
},
)

response, err := c.CreateNvmeController(
ctx,
testControllerID,
pb.NvmeMultipath_NVME_MULTIPATH_FAILOVER,
)

require.Equal(t, tt.wantErr, err)
require.True(t, proto.Equal(response, tt.wantResponse))
require.Equal(t, tt.wantConnClosed, connClosed)
})
}
}

0 comments on commit 35c8b3b

Please sign in to comment.