diff --git a/storage/backend/nvme_controller_test.go b/storage/backend/nvme_controller_test.go index e3d7ee4..56be15a 100644 --- a/storage/backend/nvme_controller_test.go +++ b/storage/backend/nvme_controller_test.go @@ -15,6 +15,7 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/grpc" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/emptypb" ) func TestCreateNvmeController(t *testing.T) { @@ -102,3 +103,73 @@ func TestCreateNvmeController(t *testing.T) { }) } } + +func TestDeleteNvmeController(t *testing.T) { + testControllerName := "remotenvme0" + testRequest := &pb.DeleteNvmeRemoteControllerRequest{ + Name: testControllerName, + AllowMissing: true, + } + tests := map[string]struct { + giveClientErr error + giveConnectorErr error + wantErr error + wantRequest *pb.DeleteNvmeRemoteControllerRequest + wantConnClosed bool + }{ + "successful call": { + giveConnectorErr: nil, + giveClientErr: nil, + wantErr: nil, + wantRequest: proto.Clone(testRequest).(*pb.DeleteNvmeRemoteControllerRequest), + wantConnClosed: true, + }, + "client err": { + giveConnectorErr: nil, + giveClientErr: errors.New("Some client error"), + wantErr: errors.New("Some client error"), + wantRequest: proto.Clone(testRequest).(*pb.DeleteNvmeRemoteControllerRequest), + wantConnClosed: true, + }, + "connector err": { + giveConnectorErr: errors.New("Some conn error"), + giveClientErr: nil, + wantErr: errors.New("Some conn error"), + wantRequest: 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 { + mockClient.EXPECT().DeleteNvmeRemoteController(ctx, tt.wantRequest). + Return(&emptypb.Empty{}, 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 + }, + ) + + err := c.DeleteNvmeController(ctx, testControllerName, true) + + require.Equal(t, tt.wantErr, err) + require.Equal(t, tt.wantConnClosed, connClosed) + }) + } +}