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 "gerrit.o-ran-sc.org/r/ric-plt/sdlgo/internal/sdlgoredis"
31 "github.com/stretchr/testify/assert"
40 dbState sdlgoredis.DbState
45 func setupNamespacesCliMock(keys []string, addr string, keysErr, stateErr error) {
48 mNs.dbState.PrimaryDbState.Fields.Role = "Primary"
49 mNs.dbState.PrimaryDbState.Fields.Ip = addr
51 mNs.dbState.PrimaryDbState.Fields.Port = "6379"
53 mNs.dbKeysErr = keysErr
54 mNs.dbStateErr = stateErr
57 func newNsMockDatabase() *cli.Database {
59 mNs.dbIface = new(mocks.MockDB)
60 mNs.dbIface.On("Keys", "*").Return(mNs.dbKeys, mNs.dbKeysErr)
61 mNs.dbIface.On("State").Return(&mNs.dbState, mNs.dbStateErr).Maybe()
62 db.Instances = append(db.Instances, mNs.dbIface)
66 func TestNamespacesCmdShowHelp(t *testing.T) {
68 expNokErrTooManyArgs := errors.New("accepts 0 arg(s), received 1")
69 expHelp := "Usage:\n namespaces [flags]"
75 {args: []string{"-h"}, expErr: expOkErr, expOut: expHelp},
76 {args: []string{"--help"}, expErr: expOkErr, expOut: expHelp},
77 {args: []string{"extra-arg"}, expErr: expNokErrTooManyArgs, expOut: expHelp},
80 for _, test := range tests {
81 buf := new(bytes.Buffer)
82 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
85 cmd.SetArgs(test.args)
87 result := buf.String()
89 assert.Equal(t, test.expErr, err)
90 assert.Contains(t, result, test.expOut)
94 func TestNamespacesCmdSuccess(t *testing.T) {
95 expOut := "ns1\n" + "ns2\n" + "ns3\n"
96 buf := new(bytes.Buffer)
97 setupNamespacesCliMock([]string{
102 }, "1.2.3.4", nil, nil)
103 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
108 result := buf.String()
111 assert.Equal(t, expOut, result)
112 mNs.dbIface.AssertExpectations(t)
115 func TestNamespacesCmdWithWideFlagSuccess(t *testing.T) {
117 "ADDRESS NAMESPACE KEYS \n" +
118 "1.2.3.4:6379 ns1 2 \n" +
119 "1.2.3.4:6379 ns2 1 \n" +
120 "1.2.3.4:6379 ns3 1 \n"
121 buf := new(bytes.Buffer)
122 setupNamespacesCliMock([]string{
127 }, "1.2.3.4", nil, nil)
128 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
131 cmd.SetArgs([]string{"--wide"})
134 result := buf.String()
137 assert.Equal(t, expOut, result)
138 mNs.dbIface.AssertExpectations(t)
141 func TestNamespacesCmdNoKeysInDbSuccess(t *testing.T) {
143 buf := new(bytes.Buffer)
144 setupNamespacesCliMock([]string{}, "1.2.3.4", nil, nil)
145 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
150 result := buf.String()
153 assert.Equal(t, expOut, result)
154 mNs.dbIface.AssertExpectations(t)
157 func TestNamespacesCmdWithWideFlagNoKeysInDbSuccess(t *testing.T) {
158 expOut := "ADDRESS NAMESPACE KEYS \n"
159 buf := new(bytes.Buffer)
160 setupNamespacesCliMock([]string{}, "1.2.3.4", nil, nil)
161 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
164 cmd.SetArgs([]string{"-w"})
167 result := buf.String()
170 assert.Equal(t, expOut, result)
171 mNs.dbIface.AssertExpectations(t)
174 func TestNamespacesCmdWithWideFlagStandaloneRedisAddressMissingSuccess(t *testing.T) {
176 "ADDRESS NAMESPACE KEYS \n" +
180 buf := new(bytes.Buffer)
181 setupNamespacesCliMock([]string{
187 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
190 cmd.SetArgs([]string{"--wide"})
193 result := buf.String()
196 assert.Equal(t, expOut, result)
197 mNs.dbIface.AssertExpectations(t)
200 func TestNamespacesCmdDbKeysFailure(t *testing.T) {
201 expNokErr := errors.New("Some error")
202 expOut := "Error: Some error"
204 buf := new(bytes.Buffer)
205 setupNamespacesCliMock(nil, "1.2.3.4", expNokErr, nil)
206 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
211 result := buf.String()
213 assert.Equal(t, expNokErr, err)
214 assert.Contains(t, result, expOut)
215 mNs.dbIface.AssertExpectations(t)
218 func TestNamespacesCmdDbStateFailure(t *testing.T) {
219 expNokErr := errors.New("Some error")
220 expOut := "Error: Some error"
222 buf := new(bytes.Buffer)
223 setupNamespacesCliMock(nil, "1.2.3.4", nil, expNokErr)
224 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
229 result := buf.String()
231 assert.Equal(t, expNokErr, err)
232 assert.Contains(t, result, expOut)
233 mNs.dbIface.AssertExpectations(t)
236 func TestNamespacesCmdNsStartMarkerFailure(t *testing.T) {
237 expNokErr := errors.New("Namespace parsing error, no '{' in key string 'ns2},key1'")
238 expOut := "Error: Namespace parsing error, no '{' in key string 'ns2},key1'"
240 buf := new(bytes.Buffer)
241 setupNamespacesCliMock([]string{
245 }, "1.2.3.4", nil, nil)
246 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
251 result := buf.String()
253 assert.Equal(t, expNokErr, err)
254 assert.Contains(t, result, expOut)
255 mNs.dbIface.AssertExpectations(t)
258 func TestNamespacesCmdNsEndMarkerFailure(t *testing.T) {
259 expNokErr := errors.New("Namespace parsing error, no '}' in key string '{ns2,key1'")
260 expOut := "Error: Namespace parsing error, no '}' in key string '{ns2,key1'"
262 buf := new(bytes.Buffer)
263 setupNamespacesCliMock([]string{
267 }, "1.2.3.4", nil, nil)
268 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
273 result := buf.String()
275 assert.Equal(t, expNokErr, err)
276 assert.Contains(t, result, expOut)
277 mNs.dbIface.AssertExpectations(t)