Add header missing license header
[ric-plt/resource-status-manager.git] / RSM / handlers / rmrmsghandlers / resource_status_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
18
19 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
20 //  platform project (RICP).
21
22 package rmrmsghandlers
23
24 import (
25         "fmt"
26         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
27         "github.com/pkg/errors"
28         "rsm/configuration"
29         "rsm/e2pdus"
30         "rsm/enums"
31         "rsm/logger"
32         "rsm/mocks"
33         "rsm/models"
34         "rsm/services"
35         "testing"
36         "time"
37 )
38
39 func initResourceStatusResponseHandlerTest(t *testing.T) (*mocks.ResourceStatusResponseConverterMock, ResourceStatusResponseHandler, *mocks.RsmReaderMock, *mocks.RsmWriterMock) {
40         logger, err := logger.InitLogger(logger.DebugLevel)
41         if err != nil {
42                 t.Errorf("#... - failed to initialize logger, error: %s", err)
43         }
44
45         config, err := configuration.ParseConfiguration()
46         if err != nil {
47                 t.Errorf("#... - failed to parse configuration error: %s", err)
48         }
49
50         converterMock := &mocks.ResourceStatusResponseConverterMock{}
51
52         rnibReaderMock := &mocks.RnibReaderMock{}
53         rsmReaderMock := &mocks.RsmReaderMock{}
54         rsmWriterMock := &mocks.RsmWriterMock{}
55
56         rnibDataService := services.NewRnibDataService(logger, config, rnibReaderMock, rsmReaderMock, rsmWriterMock)
57         h := NewResourceStatusResponseHandler(logger, converterMock, rnibDataService)
58
59         return converterMock, h, rsmReaderMock, rsmWriterMock
60
61 }
62
63 // Verify UnpackX2apPduAsString() and Convert() are called
64 func TestResourceStatusResponseHandler(t *testing.T) {
65         converterMock, h, _, _ := initResourceStatusResponseHandlerTest(t)
66
67         payload := []byte("aaa")
68         req := models.RmrRequest{RanName: "test", StartTime: time.Now(), Payload: payload, Len: len(payload)}
69         converterMock.On("UnpackX2apPduAsString", req.Payload, e2pdus.MaxAsn1CodecMessageBufferSize).Return(string(payload), nil)
70         converterMock.On("Convert", req.Payload).Return((*models.ResourceStatusResponse)(nil), fmt.Errorf("error"))
71
72         h.Handle(&req)
73         converterMock.AssertNumberOfCalls(t, "UnpackX2apPduAsString", 1)
74         converterMock.AssertNumberOfCalls(t, "Convert", 1)
75 }
76
77 func TestResourceStatusResponseHandlerConvertError(t *testing.T) {
78         converterMock, h, _, _ := initResourceStatusResponseHandlerTest(t)
79
80         payload := []byte("aaa")
81         req := models.RmrRequest{RanName: "test", StartTime: time.Now(), Payload: payload, Len: len(payload)}
82         err := fmt.Errorf("error")
83         var payloadAsString string
84         converterMock.On("UnpackX2apPduAsString", req.Payload, e2pdus.MaxAsn1CodecMessageBufferSize).Return(payloadAsString, err)
85         converterMock.On("Convert", req.Payload).Return((*models.ResourceStatusResponse)(nil), fmt.Errorf("error"))
86         h.Handle(&req)
87
88         converterMock.AssertNumberOfCalls(t, "UnpackX2apPduAsString", 1)
89         converterMock.AssertNumberOfCalls(t, "Convert", 0)
90 }
91
92 func TestResourceStatusResponseHandlerEnb2Mid0(t *testing.T) {
93         converterMock, h, _, _ := initResourceStatusResponseHandlerTest(t)
94
95         payload := []byte("aaa")
96         req := models.RmrRequest{RanName: "test", StartTime: time.Now(), Payload: payload, Len: len(payload)}
97         response := &models.ResourceStatusResponse{}
98         converterMock.On("UnpackX2apPduAsString", req.Payload, e2pdus.MaxAsn1CodecMessageBufferSize).Return(string(payload), nil)
99         converterMock.On("Convert", req.Payload).Return(response, nil)
100         h.Handle(&req)
101
102         converterMock.AssertNumberOfCalls(t, "UnpackX2apPduAsString", 1)
103         converterMock.AssertNumberOfCalls(t, "Convert", 1)
104 }
105
106 func TestResourceStatusResponseHandlerWithMidGetRsmRanInfoFailure(t *testing.T) {
107         converterMock, h, rsmReaderMock, rsmWriterMock := initResourceStatusResponseHandlerTest(t)
108         payload := []byte("aaa")
109         req := models.RmrRequest{RanName: RanName, StartTime: time.Now(), Payload: payload, Len: len(payload)}
110         response := &models.ResourceStatusResponse{ENB1_Measurement_ID: 1, ENB2_Measurement_ID: 2}
111         converterMock.On("UnpackX2apPduAsString", req.Payload, e2pdus.MaxAsn1CodecMessageBufferSize).Return(string(payload), nil)
112         converterMock.On("Convert", req.Payload).Return(response, nil)
113         rsmReaderMock.On("GetRsmRanInfo", RanName).Return(&models.RsmRanInfo{}, common.NewInternalError(errors.New("Error")))
114         h.Handle(&req)
115         converterMock.AssertNumberOfCalls(t, "UnpackX2apPduAsString", 1)
116         converterMock.AssertNumberOfCalls(t, "Convert", 1)
117         rsmReaderMock.AssertCalled(t, "GetRsmRanInfo", RanName)
118         rsmWriterMock.AssertNotCalled(t, "SaveRsmRanInfo")
119 }
120
121 func TestResourceStatusResponseHandlerWithMidUpdateFailure(t *testing.T) {
122         converterMock, h, rsmReaderMock, rsmWriterMock := initResourceStatusResponseHandlerTest(t)
123         payload := []byte("aaa")
124         req := models.RmrRequest{RanName: RanName, StartTime: time.Now(), Payload: payload, Len: len(payload)}
125         response := &models.ResourceStatusResponse{ENB1_Measurement_ID: 1, ENB2_Measurement_ID: 2}
126         converterMock.On("UnpackX2apPduAsString", req.Payload, e2pdus.MaxAsn1CodecMessageBufferSize).Return(string(payload), nil)
127         converterMock.On("Convert", req.Payload).Return(response, nil)
128         rsmRanInfoBefore := models.NewRsmRanInfo(RanName, enums.Enb1MeasurementId, 0, enums.Start, false)
129         rsmReaderMock.On("GetRsmRanInfo", RanName).Return(rsmRanInfoBefore, nil)
130         updatedRsmRanInfo := models.NewRsmRanInfo(RanName, enums.Enb1MeasurementId, response.ENB2_Measurement_ID, enums.Start, true)
131         rsmWriterMock.On("SaveRsmRanInfo", rsmRanInfoBefore).Return(common.NewInternalError(errors.New("Error")))
132         h.Handle(&req)
133         converterMock.AssertNumberOfCalls(t, "UnpackX2apPduAsString", 1)
134         converterMock.AssertNumberOfCalls(t, "Convert", 1)
135         rsmReaderMock.AssertCalled(t, "GetRsmRanInfo", RanName)
136         rsmWriterMock.AssertCalled(t, "SaveRsmRanInfo", updatedRsmRanInfo)
137 }
138
139 func TestResourceStatusResponseHandlerWithMidSuccessfulUpdate(t *testing.T) {
140         converterMock, h, rsmReaderMock, rsmWriterMock := initResourceStatusResponseHandlerTest(t)
141         payload := []byte("aaa")
142         req := models.RmrRequest{RanName: RanName, StartTime: time.Now(), Payload: payload, Len: len(payload)}
143         response := &models.ResourceStatusResponse{ENB1_Measurement_ID: 1, ENB2_Measurement_ID: 2}
144         converterMock.On("UnpackX2apPduAsString", req.Payload, e2pdus.MaxAsn1CodecMessageBufferSize).Return(string(payload), nil)
145         converterMock.On("Convert", req.Payload).Return(response, nil)
146         rsmRanInfoBefore := models.NewRsmRanInfo(RanName, enums.Enb1MeasurementId, 0, enums.Start, false)
147         rsmReaderMock.On("GetRsmRanInfo", RanName).Return(rsmRanInfoBefore, nil)
148         updatedRsmRanInfo := models.NewRsmRanInfo(RanName, enums.Enb1MeasurementId, response.ENB2_Measurement_ID, enums.Start, true)
149         rsmWriterMock.On("SaveRsmRanInfo", rsmRanInfoBefore).Return(nil)
150         h.Handle(&req)
151         converterMock.AssertNumberOfCalls(t, "UnpackX2apPduAsString", 1)
152         converterMock.AssertNumberOfCalls(t, "Convert", 1)
153         rsmReaderMock.AssertCalled(t, "GetRsmRanInfo", RanName)
154         rsmWriterMock.AssertCalled(t, "SaveRsmRanInfo", updatedRsmRanInfo /*&updatedRsmRanInfo*/)
155 }