[RIC-584] - Validate setup from network and antenna type in ENB REST APIs
[ric-plt/e2mgr.git] / E2Manager / handlers / httpmsghandlers / delete_enb_request_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 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20
21 package httpmsghandlers
22
23 import (
24         "e2mgr/configuration"
25         "e2mgr/managers"
26         "e2mgr/mocks"
27         "e2mgr/models"
28         "e2mgr/services"
29         "errors"
30         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
31         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
32         "github.com/stretchr/testify/assert"
33         "testing"
34 )
35
36 func setupDeleteEnbRequestHandlerTest(t *testing.T, emptyList bool) (*DeleteEnbRequestHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
37         log := initLog(t)
38         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
39         readerMock := &mocks.RnibReaderMock{}
40         writerMock := &mocks.RnibWriterMock{}
41         rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
42         ranListManager := managers.NewRanListManager(log, rnibDataService)
43         if !emptyList {
44                 nbIdentity := &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
45                 writerMock.On("AddNbIdentity", entities.Node_ENB, nbIdentity).Return(nil)
46                 if err := ranListManager.AddNbIdentity(entities.Node_ENB, nbIdentity); err != nil {
47                         t.Errorf("#setupDeleteEnbRequestHandlerTest - Failed to add nbIdentity prior to DeleteEnb test")
48                 }
49         }
50         handler := NewDeleteEnbRequestHandler(log, rnibDataService, ranListManager)
51         return handler, readerMock, writerMock
52 }
53
54 func TestHandleDeleteEnbSuccess(t *testing.T) {
55         handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
56
57         ranName := "ran1"
58         var rnibError error
59         nodebInfo := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
60         readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
61         writerMock.On("RemoveEnb", nodebInfo).Return(nil)
62         writerMock.On("RemoveNbIdentity", entities.Node_ENB, &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}).Return(nil)
63         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
64         assert.Nil(t, err)
65         assert.NotNil(t, result)
66         assert.IsType(t, &models.NodebResponse{}, result)
67         readerMock.AssertExpectations(t)
68         writerMock.AssertExpectations(t)
69 }
70
71 func TestHandleDeleteEnbSuccessNoEnb(t *testing.T) {
72         handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, true)
73
74         ranName := "ran1"
75         var rnibError error
76         nodebInfo := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
77         readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
78         writerMock.On("RemoveEnb", nodebInfo).Return(nil)
79         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
80         assert.Nil(t, err)
81         assert.NotNil(t, result)
82         assert.IsType(t, &models.NodebResponse{}, result)
83         readerMock.AssertExpectations(t)
84         writerMock.AssertExpectations(t)
85 }
86
87 func TestHandleDeleteEnbInternalGetNodebError(t *testing.T) {
88         handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
89
90         ranName := "ran1"
91         rnibError := errors.New("for test")
92         var nodebInfo *entities.NodebInfo
93         readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
94         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
95         assert.NotNil(t, err)
96         assert.Nil(t, result)
97         readerMock.AssertExpectations(t)
98         writerMock.AssertExpectations(t)
99 }
100
101 func TestHandleDeleteEnbInternalRemoveEnbError(t *testing.T) {
102         handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
103
104         ranName := "ran1"
105         rnibError := errors.New("for test")
106         nodebInfo  := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
107         readerMock.On("GetNodeb", ranName).Return(nodebInfo, nil)
108         writerMock.On("RemoveEnb", nodebInfo).Return(rnibError)
109         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
110         assert.NotNil(t, err)
111         assert.Nil(t, result)
112         readerMock.AssertExpectations(t)
113         writerMock.AssertExpectations(t)
114 }
115
116 func TestHandleDeleteEnbFromNetworkError(t *testing.T) {
117         handler, readerMock, _ := setupDeleteEnbRequestHandlerTest(t, false)
118
119         ranName := "ran1"
120         nodebInfo  := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB, SetupFromNetwork: true}
121         readerMock.On("GetNodeb", ranName).Return(nodebInfo, nil)
122         //writerMock.On("RemoveEnb", nodebInfo).Return(nil)
123         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
124         assert.NotNil(t, err)
125         assert.Nil(t, result)
126         readerMock.AssertExpectations(t)
127 }
128
129 func TestHandleDeleteEnbInternalRemoveNbIdentityError(t *testing.T) {
130         handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
131
132         ranName := "ran1"
133         rnibError := errors.New("for test")
134         nodebInfo  := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
135         readerMock.On("GetNodeb", ranName).Return(nodebInfo, nil)
136         writerMock.On("RemoveEnb", nodebInfo).Return(nil)
137         writerMock.On("RemoveNbIdentity", entities.Node_ENB, &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}).Return(rnibError)
138         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
139         assert.NotNil(t, err)
140         assert.Nil(t, result)
141         readerMock.AssertExpectations(t)
142         writerMock.AssertExpectations(t)
143 }
144
145 func TestHandleDeleteEnbResourceNotFoundError(t *testing.T) {
146         handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
147
148         ranName := "ran1"
149         rnibError := common.NewResourceNotFoundError("for test")
150         var nodebInfo *entities.NodebInfo
151         readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
152         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
153         assert.NotNil(t, err)
154         assert.Nil(t, result)
155         readerMock.AssertExpectations(t)
156         writerMock.AssertExpectations(t)
157 }
158
159 func TestHandleDeleteEnbNodeTypeNotEnbError(t *testing.T) {
160         handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
161
162         ranName := "ran1"
163         nodebInfo  := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_GNB}
164         readerMock.On("GetNodeb", ranName).Return(nodebInfo, nil)
165         result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
166         assert.NotNil(t, err)
167         assert.Nil(t, result)
168         readerMock.AssertExpectations(t)
169         writerMock.AssertExpectations(t)
170 }