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).
23 package sdlgoredis_test
27 "gerrit.o-ran-sc.org/r/ric-plt/sdlgo/internal/sdlgoredis"
28 "github.com/stretchr/testify/assert"
32 type dbStateMock struct {
33 state sdlgoredis.DbState
36 func setupDbState() *dbStateMock {
37 return new(dbStateMock)
40 func (ds *dbStateMock) setMasterError(err error) {
41 ds.state.MasterDbState.Err = err
44 func (ds *dbStateMock) setMasterFields(role, ip, port, rCnt, flags string) {
45 ds.state.MasterDbState.Fields.Role = role
46 ds.state.MasterDbState.Fields.Ip = ip
47 ds.state.MasterDbState.Fields.Port = port
48 ds.state.MasterDbState.Fields.Flags = flags
51 func (ds *dbStateMock) setReplicaError(err error) {
52 if ds.state.ReplicasDbState == nil {
53 ds.state.ReplicasDbState = new(sdlgoredis.ReplicasDbState)
55 ds.state.ReplicasDbState.Err = err
58 func (ds *dbStateMock) addReplicaFields(role, ip, port, mls, flags string) {
59 if ds.state.ReplicasDbState == nil {
60 ds.state.ReplicasDbState = new(sdlgoredis.ReplicasDbState)
62 newState := new(sdlgoredis.ReplicaDbState)
63 newState.Fields.Role = role
64 newState.Fields.Ip = ip
65 newState.Fields.Port = port
66 newState.Fields.MasterLinkStatus = mls
67 newState.Fields.Flags = flags
68 ds.state.ReplicasDbState.States = append(ds.state.ReplicasDbState.States, newState)
71 func TestIsOnlineWhenSingleMasterSuccessfully(t *testing.T) {
73 st.setMasterFields("master", "1.2.3.4", "60000", "0", "master")
74 err := st.state.IsOnline()
78 func TestIsOnlineWhenSingleMasterFailureIfErrorHasSet(t *testing.T) {
79 testErr := errors.New("Some error")
81 st.setMasterFields("master", "1.2.3.4", "60000", "0", "master")
82 st.setMasterError(testErr)
83 err := st.state.IsOnline()
84 assert.Equal(t, testErr, err)
87 func TestIsOnlineWhenSingleMasterFailureIfNotMasterRole(t *testing.T) {
88 expErr := errors.New("No master DB, current role 'not-master'")
90 st.setMasterFields("not-master", "1.2.3.4", "60000", "0", "master")
91 err := st.state.IsOnline()
92 assert.Equal(t, expErr, err)
95 func TestIsOnlineWhenSingleMasterFailureIfErrorFlags(t *testing.T) {
96 expErr := errors.New("Master flags are 'any-error,master', expected 'master'")
98 st.setMasterFields("master", "1.2.3.4", "60000", "0", "any-error,master")
99 err := st.state.IsOnline()
100 assert.Equal(t, expErr, err)
103 func TestGetAddressMasterSuccessfully(t *testing.T) {
105 st.setMasterFields("master", "1.2.3.4", "60000", "0", "master")
106 addr := st.state.MasterDbState.GetAddress()
107 assert.Equal(t, "1.2.3.4:60000", addr)
110 func TestGetAddressMasterFailureNoIpPort(t *testing.T) {
112 st.setMasterFields("master", "", "", "0", "master")
113 addr := st.state.MasterDbState.GetAddress()
114 assert.Equal(t, "", addr)
117 func TestIsOnlineWhenMasterAndTwoReplicasSuccessfully(t *testing.T) {
119 st.setMasterFields("master", "1.2.3.4", "60000", "2", "master")
120 st.addReplicaFields("slave", "6.7.8.9", "1234", "ok", "slave")
121 st.addReplicaFields("slave", "6.7.8.10", "3450", "ok", "slave")
122 err := st.state.IsOnline()
126 func TestIsOnlineWhenMasterAndTwoReplicasFailureIfErrorHasSet(t *testing.T) {
127 testErr := errors.New("Some error")
129 st.setMasterFields("master", "1.2.3.4", "60000", "2", "master")
130 st.addReplicaFields("slave", "6.7.8.9", "1234", "ok", "slave")
131 st.addReplicaFields("slave", "6.7.8.10", "3450", "ok", "slave")
132 st.setReplicaError(testErr)
133 err := st.state.IsOnline()
134 assert.Equal(t, testErr, err)
137 func TestIsOnlineWhenMasterAndTwoReplicasFailureIfNotSlaveRole(t *testing.T) {
138 expErr := errors.New("Replica role is 'not-slave', expected 'slave'")
140 st.setMasterFields("master", "1.2.3.4", "60000", "2", "master")
141 st.addReplicaFields("slave", "6.7.8.9", "1234", "ok", "slave")
142 st.addReplicaFields("not-slave", "6.7.8.10", "3450", "ok", "slave")
143 err := st.state.IsOnline()
144 assert.Equal(t, expErr, err)
147 func TestIsOnlineWhenMasterAndTwoReplicasFailureIfMasterLinkDown(t *testing.T) {
148 expErr := errors.New("Replica link to the master is down")
150 st.setMasterFields("master", "1.2.3.4", "60000", "2", "master")
151 st.addReplicaFields("slave", "6.7.8.9", "1234", "nok", "slave")
152 st.addReplicaFields("slave", "6.7.8.10", "3450", "ok", "slave")
153 err := st.state.IsOnline()
154 assert.Equal(t, expErr, err)
157 func TestIsOnlineWhenMasterAndTwoReplicasFailureIfErrorFlags(t *testing.T) {
158 expErr := errors.New("Replica flags are 'any-error,slave', expected 'slave'")
160 st.setMasterFields("master", "1.2.3.4", "60000", "2", "master")
161 st.addReplicaFields("slave", "6.7.8.9", "1234", "ok", "slave")
162 st.addReplicaFields("slave", "6.7.8.10", "3450", "ok", "any-error,slave")
163 err := st.state.IsOnline()
164 assert.Equal(t, expErr, err)
167 func TestGetAddressReplicasSuccessfully(t *testing.T) {
169 st.setMasterFields("master", "1.2.3.4", "60000", "2", "master")
170 st.addReplicaFields("slave", "6.7.8.9", "1234", "ok", "slave")
171 st.addReplicaFields("slave", "6.7.8.10", "3450", "ok", "slave")
172 addr := st.state.ReplicasDbState.States[0].GetAddress()
173 assert.Equal(t, "6.7.8.9:1234", addr)
174 addr = st.state.ReplicasDbState.States[1].GetAddress()
175 assert.Equal(t, "6.7.8.10:3450", addr)
178 func TestGetAddressReplicasNoIpPort(t *testing.T) {
180 st.setMasterFields("master", "1.2.3.4", "60000", "2", "master")
181 st.addReplicaFields("slave", "", "", "ok", "slave")
182 st.addReplicaFields("slave", "6.7.8.10", "3450", "ok", "slave")
183 addr := st.state.ReplicasDbState.States[0].GetAddress()
184 assert.Equal(t, "", addr)
185 addr = st.state.ReplicasDbState.States[1].GetAddress()
186 assert.Equal(t, "6.7.8.10:3450", addr)