10 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
11 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
12 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
13 "github.com/pkg/errors"
14 "github.com/stretchr/testify/assert"
15 "github.com/stretchr/testify/mock"
21 X2SetupResponsePackedPdu = "2006002a000002001500080002f82900007a8000140017000000630002f8290007ab50102002f829000001000133"
22 EndcSetupResponsePackedPdu = "202400808e00000100f600808640000200fc00090002f829504a952a0a00fd007200010c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a000211e148033e4e5e4c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a00021a0044033e4e5e000000002c001e3f271f2e3d4ff0031e3f274400010000150400000a00020000"
23 X2SetupFailureResponsePackedPdu = "4006001a0000030005400200000016400100001140087821a00000008040"
24 EndcSetupFailureResponsePackedPdu = "4024001a0000030005400200000016400100001140087821a00000008040"
27 type setupResponseTestContext struct {
29 readerMock *mocks.RnibReaderMock
30 writerMock *mocks.RnibWriterMock
31 rnibReaderProvider func() reader.RNibReader
32 rnibWriterProvider func() rNibWriter.RNibWriter
33 setupResponseManager managers.ISetupResponseManager
36 func NewSetupResponseTestContext(manager managers.ISetupResponseManager) *setupResponseTestContext {
37 logger, _ := logger.InitLogger(logger.InfoLevel)
38 readerMock := &mocks.RnibReaderMock{}
39 writerMock := &mocks.RnibWriterMock{}
41 return &setupResponseTestContext{
43 readerMock: readerMock,
44 writerMock: writerMock,
45 rnibReaderProvider: func() reader.RNibReader {
48 rnibWriterProvider: func() rNibWriter.RNibWriter {
51 setupResponseManager: manager,
55 func TestSetupResponseGetNodebFailure(t *testing.T) {
56 notificationRequest := models.NotificationRequest{RanName: RanName}
57 testContext := NewSetupResponseTestContext(nil)
58 handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
59 testContext.readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewInternalError(errors.New("Error")))
60 handler.Handle(testContext.logger, nil, ¬ificationRequest, nil)
61 testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
62 testContext.writerMock.AssertNotCalled(t, "SaveNodeb")
65 func TestSetupResponseInvalidConnectionStatus(t *testing.T) {
67 notificationRequest := models.NotificationRequest{RanName: ranName}
68 testContext := NewSetupResponseTestContext(nil)
69 handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
71 testContext.readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN}, rnibErr)
72 handler.Handle(testContext.logger, nil, ¬ificationRequest, nil)
73 testContext.readerMock.AssertCalled(t, "GetNodeb", ranName)
74 testContext.writerMock.AssertNotCalled(t, "SaveNodeb")
77 func executeHandleSuccessSetupResponse(t *testing.T, packedPdu string, setupResponseManager managers.ISetupResponseManager, notificationType string, saveNodebMockReturnValue error) (*setupResponseTestContext, *entities.NodebInfo) {
79 _, err := fmt.Sscanf(packedPdu, "%x", &payload)
81 t.Fatalf("Failed converting packed pdu. Error: %v\n", err)
84 notificationRequest := models.NotificationRequest{RanName: RanName, Payload: payload}
85 testContext := NewSetupResponseTestContext(setupResponseManager)
87 handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, testContext.setupResponseManager, notificationType)
91 nodebInfo := &entities.NodebInfo{
92 ConnectionStatus: entities.ConnectionStatus_CONNECTING,
93 ConnectionAttempts: 1,
99 testContext.readerMock.On("GetNodeb", RanName).Return(nodebInfo, rnibErr)
100 testContext.writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(saveNodebMockReturnValue)
101 handler.Handle(testContext.logger, nil, ¬ificationRequest, nil)
103 return testContext, nodebInfo
106 func TestX2SetupResponse(t *testing.T) {
108 testContext, nodebInfo := executeHandleSuccessSetupResponse(t, X2SetupResponsePackedPdu, &managers.X2SetupResponseManager{}, "X2 Setup Response", rnibErr)
109 testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
110 testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
111 assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
112 assert.EqualValues(t, 0, nodebInfo.ConnectionAttempts)
113 assert.EqualValues(t, entities.Node_ENB, nodebInfo.NodeType)
115 assert.IsType(t, &entities.NodebInfo_Enb{}, nodebInfo.Configuration)
116 i, _ := nodebInfo.Configuration.(*entities.NodebInfo_Enb)
117 assert.NotNil(t, i.Enb)
120 func TestX2SetupFailureResponse(t *testing.T) {
122 testContext, nodebInfo := executeHandleSuccessSetupResponse(t, X2SetupFailureResponsePackedPdu, &managers.X2SetupFailureResponseManager{}, "X2 Setup Failure Response", rnibErr)
123 testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
124 testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
125 assert.EqualValues(t, entities.ConnectionStatus_CONNECTED_SETUP_FAILED, nodebInfo.ConnectionStatus)
126 assert.EqualValues(t, 0, nodebInfo.ConnectionAttempts)
127 assert.EqualValues(t, entities.Failure_X2_SETUP_FAILURE, nodebInfo.FailureType)
128 assert.NotNil(t, nodebInfo.SetupFailure)
131 func TestEndcSetupResponse(t *testing.T) {
133 testContext, nodebInfo := executeHandleSuccessSetupResponse(t, EndcSetupResponsePackedPdu, &managers.EndcSetupResponseManager{}, "ENDC Setup Response", rnibErr)
134 testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
135 testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
136 assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
137 assert.EqualValues(t, 0, nodebInfo.ConnectionAttempts)
138 assert.EqualValues(t, entities.Node_GNB, nodebInfo.NodeType)
139 assert.IsType(t, &entities.NodebInfo_Gnb{}, nodebInfo.Configuration)
141 i, _ := nodebInfo.Configuration.(*entities.NodebInfo_Gnb)
142 assert.NotNil(t, i.Gnb)
144 func TestEndcSetupFailureResponse(t *testing.T) {
146 testContext, nodebInfo := executeHandleSuccessSetupResponse(t, EndcSetupFailureResponsePackedPdu, &managers.EndcSetupFailureResponseManager{}, "ENDC Setup Failure Response", rnibErr)
147 testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
148 testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
149 assert.EqualValues(t, entities.ConnectionStatus_CONNECTED_SETUP_FAILED, nodebInfo.ConnectionStatus)
150 assert.EqualValues(t, 0, nodebInfo.ConnectionAttempts)
151 assert.EqualValues(t, entities.Failure_ENDC_X2_SETUP_FAILURE, nodebInfo.FailureType)
152 assert.NotNil(t, nodebInfo.SetupFailure)
155 func TestSetupResponseInvalidPayload(t *testing.T) {
157 notificationRequest := models.NotificationRequest{RanName: ranName, Payload: []byte("123")}
158 testContext := NewSetupResponseTestContext(nil)
159 handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
161 testContext.readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, ConnectionAttempts: 1}, rnibErr)
162 handler.Handle(testContext.logger, nil, ¬ificationRequest, nil)
163 testContext.readerMock.AssertCalled(t, "GetNodeb", ranName)
164 testContext.writerMock.AssertNotCalled(t, "SaveNodeb")
167 func TestSetupResponseSaveNodebFailure(t *testing.T) {
168 rnibErr := common.NewInternalError(errors.New("Error"))
169 testContext, nodebInfo := executeHandleSuccessSetupResponse(t, X2SetupResponsePackedPdu, &managers.X2SetupResponseManager{},"X2 Setup Response", rnibErr)
170 testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
171 testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)