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