Copy latest code
[ric-plt/e2mgr.git] / E2Manager / handlers / rmrmsghandlers / x2_reset_response_handler_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 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20
21 package rmrmsghandlers
22
23 import (
24         "e2mgr/configuration"
25         "e2mgr/converters"
26         "e2mgr/enums"
27         "e2mgr/logger"
28         "e2mgr/managers"
29         "e2mgr/mocks"
30         "e2mgr/models"
31         "e2mgr/rmrCgo"
32         "e2mgr/services"
33         "fmt"
34         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
35         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
36         "testing"
37         "time"
38 )
39
40 const (
41         SuccessfulX2ResetResponsePackedPdu = "200700080000010011400100"
42         SuccessfulX2ResetResponsePackedPduEmptyIEs = "20070003000000"
43         UnsuccessfulX2ResetResponsePackedPdu = "2007000d00000100114006080000000d00"
44 )
45
46 func initX2ResetResponseHandlerTest(t *testing.T) (X2ResetResponseHandler, *mocks.RnibReaderMock, *mocks.RmrMessengerMock) {
47         log, err := logger.InitLogger(logger.InfoLevel)
48         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
49         if err != nil {
50                 t.Errorf("#initX2ResetResponseHandlerTest - failed to initialize logger, error: %s", err)
51         }
52         readerMock := &mocks.RnibReaderMock{}
53
54         rnibDataService := services.NewRnibDataService(log, config, readerMock, nil)
55
56         rmrMessengerMock := &mocks.RmrMessengerMock{}
57         rmrSender := initRmrSender(rmrMessengerMock, log)
58         ranStatusChangeManager := managers.NewRanStatusChangeManager(log, rmrSender)
59
60         h := NewX2ResetResponseHandler(log, rnibDataService, ranStatusChangeManager, converters.NewX2ResetResponseExtractor(log))
61         return h, readerMock, rmrMessengerMock
62 }
63
64 func TestX2ResetResponseSuccess(t *testing.T) {
65         h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t)
66         var payload []byte
67         _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload)
68         if err != nil {
69                 t.Fatalf("Failed converting packed pdu. Error: %v\n", err)
70         }
71
72         var xAction []byte
73         notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction}
74         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB}
75         var rnibErr error
76         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
77         ranRestartedMbuf := getRanRestartedMbuf(nb.NodeType, enums.RIC_TO_RAN)
78         rmrMessengerMock.On("SendMsg", ranRestartedMbuf, true).Return(&rmrCgo.MBuf{}, err)
79         h.Handle(&notificationRequest)
80         rmrMessengerMock.AssertCalled(t, "SendMsg", ranRestartedMbuf, true)
81 }
82
83 func TestX2ResetResponseSuccessEmptyIEs(t *testing.T) {
84         h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t)
85         var payload []byte
86         _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPduEmptyIEs, "%x", &payload)
87         if err != nil {
88                 t.Fatalf("Failed converting packed pdu. Error: %v\n", err)
89         }
90
91         var xAction []byte
92         notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction}
93         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB}
94         var rnibErr error
95         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
96         ranRestartedMbuf := getRanRestartedMbuf(nb.NodeType, enums.RIC_TO_RAN)
97         rmrMessengerMock.On("SendMsg", ranRestartedMbuf, true).Return(&rmrCgo.MBuf{}, err)
98         h.Handle(&notificationRequest)
99         rmrMessengerMock.AssertCalled(t, "SendMsg", ranRestartedMbuf, true)
100 }
101
102 func TestX2ResetResponseShuttingDown(t *testing.T) {
103         h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t)
104         var payload []byte
105         _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload)
106         if err != nil {
107                 t.Fatalf("Failed converting packed pdu. Error: %v\n", err)
108         }
109
110         var xAction []byte
111         notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction}
112         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN, NodeType: entities.Node_ENB}
113         var rnibErr error
114         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
115         h.Handle(&notificationRequest)
116         rmrMessengerMock.AssertNotCalled(t, "SendMsg")
117 }
118
119 func TestX2ResetResponseInvalidConnectionStatus(t *testing.T) {
120         h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t)
121         var payload []byte
122         _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload)
123         if err != nil {
124                 t.Fatalf("Failed converting packed pdu. Error: %v\n", err)
125         }
126
127         var xAction []byte
128         notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction}
129         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, NodeType: entities.Node_ENB}
130         var rnibErr error
131         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
132         h.Handle(&notificationRequest)
133         rmrMessengerMock.AssertNotCalled(t, "SendMsg")
134 }
135
136 func TestX2ResetResponseError(t *testing.T) {
137         h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t)
138         var payload []byte
139         _, err := fmt.Sscanf(UnsuccessfulX2ResetResponsePackedPdu, "%x", &payload)
140         if err != nil {
141                 t.Fatalf("Failed converting packed pdu. Error: %v\n", err)
142         }
143
144         var xAction []byte
145         notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction}
146         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB}
147         var rnibErr error
148         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
149         h.Handle(&notificationRequest)
150         rmrMessengerMock.AssertNotCalled(t, "SendMsg")
151 }
152
153 func TestX2ResetResponseGetNodebFailure(t *testing.T) {
154         h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t)
155
156         var payload []byte
157         _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload)
158         if err != nil {
159                 t.Fatalf("Failed converting packed pdu. Error: %v\n", err)
160         }
161
162         var xAction []byte
163         notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction}
164
165         var nb *entities.NodebInfo
166         rnibErr := common.NewResourceNotFoundError("nodeb not found")
167         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
168
169         h.Handle(&notificationRequest)
170         rmrMessengerMock.AssertNotCalled(t, "SendMsg")
171 }
172
173 func TestX2ResetResponseUnpackFailure(t *testing.T) {
174         h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t)
175
176         payload := []byte("Invalid payload")
177         var xAction []byte
178         notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction}
179         nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB}
180         var rnibErr error
181         readerMock.On("GetNodeb", RanName).Return(nb, rnibErr)
182
183         h.Handle(&notificationRequest)
184         rmrMessengerMock.AssertNotCalled(t, "SendMsg")
185 }