[RICPLT-2165] Add rnibDataService to support retries
[ric-plt/e2mgr.git] / E2Manager / handlers / httpmsghandlers / x2_reset_request_handler_test.go
1 package httpmsghandlers
2
3 import (
4         "e2mgr/configuration"
5         "e2mgr/e2managererrors"
6         "e2mgr/mocks"
7         "e2mgr/models"
8         "e2mgr/rNibWriter"
9         "e2mgr/rmrCgo"
10         "e2mgr/services"
11         "fmt"
12         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
13         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
14         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
15         "github.com/stretchr/testify/assert"
16         "github.com/stretchr/testify/mock"
17         "testing"
18 )
19
20 func setupX2ResetRequestHandlerTest(t *testing.T) (*X2ResetRequestHandler, *mocks.RmrMessengerMock, *mocks.RnibReaderMock){
21         log := initLog(t)
22         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
23         readerMock := &mocks.RnibReaderMock{}
24         readerProvider := func() reader.RNibReader {
25                 return readerMock
26         }
27         writerMock := &mocks.RnibWriterMock{}
28         writerProvider := func() rNibWriter.RNibWriter {
29                 return writerMock
30         }
31         rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
32         rmrMessengerMock := &mocks.RmrMessengerMock{}
33         rmrService := getRmrService(rmrMessengerMock, log)
34         handler := NewX2ResetRequestHandler(log, rmrService, rnibDataService)
35
36         return handler, rmrMessengerMock, readerMock
37 }
38 func TestHandleSuccessfulDefaultCause(t *testing.T) {
39         handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
40
41         ranName := "test1"
42         // o&m intervention
43         payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
44         xaction := []byte(ranName)
45         msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
46
47         rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
48
49         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
50         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
51
52         actual := handler.Handle(models.ResetRequest{RanName: ranName})
53
54         assert.Nil(t, actual)
55 }
56
57 func TestHandleSuccessfulRequestedCause(t *testing.T) {
58         handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
59
60         ranName := "test1"
61         payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
62         xaction := []byte(ranName)
63         msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
64         rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
65
66         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
67         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
68
69         actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "protocol:transfer-syntax-error"})
70
71         assert.Nil(t, actual)
72 }
73
74 func TestHandleFailureUnknownCause(t *testing.T) {
75         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
76
77         ranName := "test1"
78         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
79         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
80
81         actual := handler.Handle(models.ResetRequest{RanName: ranName, Cause: "XXX"})
82
83         assert.IsType(t, e2managererrors.NewRequestValidationError(), actual)
84
85 }
86
87 func TestHandleFailureWrongState(t *testing.T) {
88         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
89
90         ranName := "test1"
91         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
92         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
93
94         actual := handler.Handle(models.ResetRequest{RanName: ranName})
95
96         assert.IsType(t, e2managererrors.NewWrongStateError(X2_RESET_ACTIVITY_NAME, entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)]), actual)
97 }
98
99 func TestHandleFailureRanNotFound(t *testing.T) {
100         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
101
102         ranName := "test1"
103
104         readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("nodeb not found"))
105
106         actual := handler.Handle(models.ResetRequest{RanName: ranName})
107
108         assert.IsType(t, e2managererrors.NewResourceNotFoundError(), actual)
109 }
110
111 func TestHandleFailureRnibError(t *testing.T) {
112         handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
113
114         ranName := "test1"
115
116         readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewInternalError(fmt.Errorf("internal error")))
117
118         actual := handler.Handle(models.ResetRequest{RanName: ranName})
119
120         assert.IsType(t, e2managererrors.NewRnibDbError(), actual)
121 }
122
123 func TestHandleFailureRmrError(t *testing.T) {
124         handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
125
126         ranName := "test1"
127         // o&m intervention
128         payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
129         xaction := []byte(ranName)
130         msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
131         rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(&rmrCgo.MBuf{}, fmt.Errorf("rmr error"))
132
133         var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
134         readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
135
136         actual := handler.Handle(models.ResetRequest{RanName: ranName})
137
138         assert.IsType(t, e2managererrors.NewRmrError(), actual)
139 }