2b1906b4a976b55b72955de0cc57721e8736ab26
[ric-plt/e2mgr.git] / E2Manager / managers / ran_setup_manager_test.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
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
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16 //
17
18 package managers
19
20 import (
21         "e2mgr/e2managererrors"
22         "e2mgr/e2pdus"
23         "e2mgr/logger"
24         "e2mgr/mocks"
25         "e2mgr/rNibWriter"
26         "e2mgr/rmrCgo"
27         "fmt"
28         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
29         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
30         "github.com/stretchr/testify/assert"
31         "github.com/stretchr/testify/mock"
32         "testing"
33 )
34
35 func TestExecuteSetupConnectingX2Setup(t *testing.T) {
36         log := initLog(t)
37
38         ranName := "test1"
39
40
41         writerMock := &mocks.RnibWriterMock{}
42         writerProvider := func() rNibWriter.RNibWriter {
43                 return writerMock
44         }
45
46         var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
47         var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
48         var rnibErr common.IRNibError
49         writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
50
51         payload:= e2pdus.PackedX2setupRequest
52         xaction := []byte(ranName)
53         msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
54         rmrMessengerMock := &mocks.RmrMessengerMock{}
55         rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,nil)
56         rmrService:= getRmrService(rmrMessengerMock, log)
57
58         mgr := NewRanSetupManager(log, rmrService, writerProvider)
59         if err:= mgr.ExecuteSetup(initialNodeb); err != nil {
60                 t.Errorf("want: success, got: error: %s", err)
61         }
62
63         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
64         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
65 }
66
67
68 func TestExecuteSetupConnectingEndcX2Setup(t *testing.T) {
69         log := initLog(t)
70
71         ranName := "test1"
72
73
74         writerMock := &mocks.RnibWriterMock{}
75         writerProvider := func() rNibWriter.RNibWriter {
76                 return writerMock
77         }
78
79         var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
80         var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
81         var rnibErr common.IRNibError
82         writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
83
84         payload:= e2pdus.PackedEndcX2setupRequest
85         xaction := []byte(ranName)
86         msg:= rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
87         rmrMessengerMock := &mocks.RmrMessengerMock{}
88         rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,nil)
89         rmrService:= getRmrService(rmrMessengerMock, log)
90
91         mgr := NewRanSetupManager(log, rmrService, writerProvider)
92         if err:= mgr.ExecuteSetup(initialNodeb); err != nil {
93                 t.Errorf("want: success, got: error: %s", err)
94         }
95
96         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
97         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
98 }
99
100 func TestExecuteSetupDisconnected(t *testing.T) {
101         log := initLog(t)
102
103         ranName := "test1"
104
105         writerMock := &mocks.RnibWriterMock{}
106         writerProvider := func() rNibWriter.RNibWriter {
107                 return writerMock
108         }
109
110         var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
111         var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
112         var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0 }
113         var rnibErr common.IRNibError
114         writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
115         writerMock.On("UpdateNodebInfo",argNodebDisconnected).Return(rnibErr)
116
117         payload:= []byte {0}
118         xaction := []byte(ranName)
119         msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
120         rmrMessengerMock := &mocks.RmrMessengerMock{}
121         rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,fmt.Errorf("send failure"))
122         rmrService:= getRmrService(rmrMessengerMock, log)
123
124         mgr := NewRanSetupManager(log, rmrService,  writerProvider)
125         if err:= mgr.ExecuteSetup(initialNodeb); err == nil {
126                 t.Errorf("want: failure, got: success")
127         }
128
129         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
130         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
131 }
132
133 func TestExecuteSetupConnectingRnibError(t *testing.T) {
134         log := initLog(t)
135
136         ranName := "test1"
137
138         writerMock := &mocks.RnibWriterMock{}
139         writerProvider := func() rNibWriter.RNibWriter {
140                 return writerMock
141         }
142
143         var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
144         var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
145         var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0 }
146         var rnibErr = common.NewInternalError(fmt.Errorf("DB error"))
147         writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
148         writerMock.On("UpdateNodebInfo",argNodebDisconnected).Return(rnibErr)
149
150         payload:= []byte {0}
151         xaction := []byte(ranName)
152         msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
153         rmrMessengerMock := &mocks.RmrMessengerMock{}
154         rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,fmt.Errorf("send failure"))
155         rmrService:= getRmrService(rmrMessengerMock, log)
156
157         mgr := NewRanSetupManager(log, rmrService, writerProvider)
158         if err:= mgr.ExecuteSetup(initialNodeb); err == nil {
159                 t.Errorf("want: failure, got: success")
160         } else {
161                 assert.IsType(t, e2managererrors.NewRnibDbError(), err)
162         }
163
164
165         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
166         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
167 }
168
169 func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
170         log := initLog(t)
171
172         ranName := "test1"
173
174         writerMock := &mocks.RnibWriterMock{}
175         writerProvider := func() rNibWriter.RNibWriter {
176                 return writerMock
177         }
178
179         var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
180         var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
181         var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0 }
182         var rnibErr common.IRNibError
183         writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
184         writerMock.On("UpdateNodebInfo",argNodebDisconnected).Return(common.NewInternalError(fmt.Errorf("DB error")))
185
186         payload:= []byte {0}
187         xaction := []byte(ranName)
188         msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
189         rmrMessengerMock := &mocks.RmrMessengerMock{}
190         rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,fmt.Errorf("send failure"))
191         rmrService:= getRmrService(rmrMessengerMock, log)
192
193         mgr := NewRanSetupManager(log, rmrService,  writerProvider)
194         if err:= mgr.ExecuteSetup(initialNodeb); err == nil {
195                 t.Errorf("want: failure, got: success")
196         } else {
197                 assert.IsType(t, e2managererrors.NewRnibDbError(), err)
198         }
199
200         writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
201         rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
202 }
203
204
205 func initLog(t *testing.T) *logger.Logger {
206         log, err := logger.InitLogger(logger.InfoLevel)
207         if err != nil {
208                 t.Errorf("#initLog test - failed to initialize logger, error: %s", err)
209         }
210         return log
211 }
212
213