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.MasterDbState.Fields.Role = "Master"
49 mNs.dbState.MasterDbState.Fields.Ip = addr
51 mNs.dbState.MasterDbState.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 TestNamespacesCmdWithPerDbFlagSuccess(t *testing.T) {
116 expOut := "1.2.3.4:6379: ns1\n" + "1.2.3.4:6379: ns2\n" + "1.2.3.4:6379: ns3\n"
117 buf := new(bytes.Buffer)
118 setupNamespacesCliMock([]string{
123 }, "1.2.3.4", nil, nil)
124 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
127 cmd.SetArgs([]string{"--group"})
130 result := buf.String()
133 assert.Equal(t, expOut, result)
134 mNs.dbIface.AssertExpectations(t)
137 func TestNamespacesCmdNoKeysInDbSuccess(t *testing.T) {
139 buf := new(bytes.Buffer)
140 setupNamespacesCliMock([]string{}, "1.2.3.4", nil, nil)
141 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
146 result := buf.String()
149 assert.Equal(t, expOut, result)
150 mNs.dbIface.AssertExpectations(t)
153 func TestNamespacesCmdWithPerDbFlagNoKeysInDbSuccess(t *testing.T) {
155 buf := new(bytes.Buffer)
156 setupNamespacesCliMock([]string{}, "1.2.3.4", nil, nil)
157 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
160 cmd.SetArgs([]string{"--group"})
163 result := buf.String()
166 assert.Equal(t, expOut, result)
167 mNs.dbIface.AssertExpectations(t)
170 func TestNamespacesCmdWithPerDbFlagStandaloneRedisAddressMissingSuccess(t *testing.T) {
171 expOut := "ns1\n" + "ns2\n" + "ns3\n"
172 buf := new(bytes.Buffer)
173 setupNamespacesCliMock([]string{
179 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
182 cmd.SetArgs([]string{"--group"})
185 result := buf.String()
188 assert.Equal(t, expOut, result)
189 mNs.dbIface.AssertExpectations(t)
192 func TestNamespacesCmdDbKeysFailure(t *testing.T) {
193 expNokErr := errors.New("Some error")
194 expOut := "Error: Some error"
196 buf := new(bytes.Buffer)
197 setupNamespacesCliMock(nil, "1.2.3.4", expNokErr, nil)
198 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
203 result := buf.String()
205 assert.Equal(t, expNokErr, err)
206 assert.Contains(t, result, expOut)
207 mNs.dbIface.AssertExpectations(t)
210 func TestNamespacesCmdDbStateFailure(t *testing.T) {
211 expNokErr := errors.New("Some error")
212 expOut := "Error: Some error"
214 buf := new(bytes.Buffer)
215 setupNamespacesCliMock(nil, "1.2.3.4", nil, expNokErr)
216 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
221 result := buf.String()
223 assert.Equal(t, expNokErr, err)
224 assert.Contains(t, result, expOut)
225 mNs.dbIface.AssertExpectations(t)
228 func TestNamespacesCmdNsStartMarkerFailure(t *testing.T) {
229 expNokErr := errors.New("Namespace parsing error, no '{' in key string 'ns2},key1'")
230 expOut := "Error: Namespace parsing error, no '{' in key string 'ns2},key1'"
232 buf := new(bytes.Buffer)
233 setupNamespacesCliMock([]string{
237 }, "1.2.3.4", nil, nil)
238 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
243 result := buf.String()
245 assert.Equal(t, expNokErr, err)
246 assert.Contains(t, result, expOut)
247 mNs.dbIface.AssertExpectations(t)
250 func TestNamespacesCmdNsEndMarkerFailure(t *testing.T) {
251 expNokErr := errors.New("Namespace parsing error, no '}' in key string '{ns2,key1'")
252 expOut := "Error: Namespace parsing error, no '}' in key string '{ns2,key1'"
254 buf := new(bytes.Buffer)
255 setupNamespacesCliMock([]string{
259 }, "1.2.3.4", nil, nil)
260 cmd := cli.NewNamespacesCmdForTest(newNsMockDatabase)
265 result := buf.String()
267 assert.Equal(t, expNokErr, err)
268 assert.Contains(t, result, expOut)
269 mNs.dbIface.AssertExpectations(t)