2 Copyright (c) 2021 AT&T Intellectual Property.
3 Copyright (c) 2018-2021 Nokia.
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
9 http://www.apache.org/licenses/LICENSE-2.0
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
19 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
20 * platform project (RICP).
28 "gerrit.o-ran-sc.org/r/ric-plt/sdlgo/internal/cli"
29 "gerrit.o-ran-sc.org/r/ric-plt/sdlgo/internal/mocks"
30 "github.com/stretchr/testify/assert"
34 var removeMocks *RemoveMocks
36 type RemoveMocks struct {
37 sdlIface *mocks.MockSdlApi
45 func setupRemoveCliMock(ns string, keyPattern, keys []string, retList, retRemove error) {
46 removeMocks = new(RemoveMocks)
48 removeMocks.kps = keyPattern
49 removeMocks.keys = keys
50 removeMocks.retList = retList
51 removeMocks.retRemove = retRemove
54 func newMockSdlRemoveApi() cli.ISyncStorage {
55 removeMocks.sdlIface = new(mocks.MockSdlApi)
56 if len(removeMocks.kps) == 0 {
57 removeMocks.kps = append(removeMocks.kps, "*")
59 for _, kp := range removeMocks.kps {
60 removeMocks.sdlIface.On("ListKeys", removeMocks.ns, kp).Return(removeMocks.keys, removeMocks.retList)
62 removeMocks.sdlIface.On("Remove", removeMocks.ns, removeMocks.keys).Return(removeMocks.retRemove).Maybe()
63 return removeMocks.sdlIface
66 func runRemoveCli() (string, string, error) {
67 bufStdout := new(bytes.Buffer)
68 bufStderr := new(bytes.Buffer)
69 cmd := cli.NewRemoveCmdForTest(newMockSdlRemoveApi)
72 args := []string{removeMocks.ns}
73 args = append(args, removeMocks.kps...)
77 return bufStdout.String(), bufStderr.String(), err
80 func TestCliRemoveCanShowHelp(t *testing.T) {
82 expHelp := "remove <namespace> [<key|pattern>... <keyN|patternN>] [flags]"
83 expFlagErr := fmt.Errorf("unknown flag: --some-unknown-flag")
84 expArgCntLtErr := fmt.Errorf("requires at least 1 arg(s), only received 0")
90 {args: []string{"-h"}, expErr: expOkErr, expOutput: expHelp},
91 {args: []string{"--help"}, expErr: expOkErr, expOutput: expHelp},
92 {args: []string{"--some-unknown-flag"}, expErr: expFlagErr, expOutput: expHelp},
93 {args: nil, expErr: expArgCntLtErr, expOutput: expHelp},
96 for _, test := range tests {
97 buf := new(bytes.Buffer)
98 cmd := cli.NewRemoveCmdForTest(newMockSdlRemoveApi)
100 cmd.SetArgs(test.args)
104 stdout := buf.String()
105 assert.Equal(t, test.expErr, err)
106 assert.Contains(t, stdout, test.expOutput)
110 func TestCliRemoveCommandWithOneKeySuccess(t *testing.T) {
111 setupRemoveCliMock("some-ns", []string{"some-key"}, []string{"some-key"}, nil, nil)
113 stdout, stderr, err := runRemoveCli()
116 assert.Equal(t, "", stdout)
117 assert.Equal(t, "", stderr)
118 removeMocks.sdlIface.AssertExpectations(t)
121 func TestCliRemoveCommandWithOneKeyPatternSuccess(t *testing.T) {
122 setupRemoveCliMock("some-ns", []string{"some-key*"}, []string{"some-key-1", "some-key-1", "some-key-3"}, nil, nil)
124 stdout, stderr, err := runRemoveCli()
127 assert.Equal(t, "", stdout)
128 assert.Equal(t, "", stderr)
129 removeMocks.sdlIface.AssertExpectations(t)
132 func TestCliRemoveCommandWithMultipleKeyPatternsSuccess(t *testing.T) {
133 setupRemoveCliMock("some-ns", []string{"some-key*", "other-key*"}, []string{"other-key2"}, nil, nil)
135 stdout, stderr, err := runRemoveCli()
138 assert.Equal(t, "", stdout)
139 assert.Equal(t, "", stderr)
140 removeMocks.sdlIface.AssertExpectations(t)
143 func TestCliRemoveCommandWithOutKeyOrPatternSuccess(t *testing.T) {
144 setupRemoveCliMock("some-ns", []string{}, []string{"some-key-1", "some-key-1", "some-key-3"}, nil, nil)
146 stdout, stderr, err := runRemoveCli()
149 assert.Equal(t, "", stdout)
150 assert.Equal(t, "", stderr)
151 removeMocks.sdlIface.AssertExpectations(t)
154 func TestCliRemoveCommandErrorInSdlApiListKeysFailure(t *testing.T) {
155 expErr := fmt.Errorf("some-error")
156 setupRemoveCliMock("some-ns", []string{"*"}, []string{"some-key"}, expErr, nil)
158 _, stderr, err := runRemoveCli()
160 assert.Equal(t, expErr, err)
161 assert.Contains(t, stderr, expErr.Error())
162 removeMocks.sdlIface.AssertExpectations(t)
165 func TestCliRemoveCommandErrorInSdlApiRemoveFailure(t *testing.T) {
166 expErr := fmt.Errorf("some-error")
167 setupRemoveCliMock("some-ns", []string{"*"}, []string{"some-key"}, nil, expErr)
169 _, stderr, err := runRemoveCli()
171 assert.Equal(t, expErr, err)
172 assert.Contains(t, stderr, expErr.Error())
173 removeMocks.sdlIface.AssertExpectations(t)