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