2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
22 "e2mgr/e2managererrors"
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 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
33 "github.com/stretchr/testify/assert"
41 func TestShutdownHandlerRnibError(t *testing.T) {
43 config := configuration.ParseConfiguration()
45 rmrMessengerMock := &mocks.RmrMessengerMock{}
46 readerMock := &mocks.RnibReaderMock{}
47 readerProvider := func() reader.RNibReader {
50 writerMock := &mocks.RnibWriterMock{}
51 writerProvider := func() rNibWriter.RNibWriter {
54 var messageChannel chan<- *models.NotificationResponse
56 rnibErr := &common.RNibError{}
57 var nbIdentityList []*entities.NbIdentity
58 readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibErr)
60 writer := httptest.NewRecorder()
61 controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, messageChannel)
62 controller.ShutdownHandler(writer, tests.GetHttpRequest(), nil)
64 var errorResponse = parseJsonRequest(t, writer.Body)
66 assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
67 assert.Equal(t, errorResponse.Code, e2managererrors.NewRnibDbError().Err.Code)
70 func TestHeaderValidationFailed(t *testing.T) {
72 config := configuration.ParseConfiguration()
74 rmrMessengerMock := &mocks.RmrMessengerMock{}
75 readerMock := &mocks.RnibReaderMock{}
76 readerProvider := func() reader.RNibReader {
79 writerMock := &mocks.RnibWriterMock{}
80 writerProvider := func() rNibWriter.RNibWriter {
83 var messageChannel chan<- *models.NotificationResponse
85 writer := httptest.NewRecorder()
87 controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, messageChannel)
89 header := &http.Header{}
91 controller.handleRequest(writer, header, providers.ShutdownRequest, nil, true, http.StatusNoContent)
93 var errorResponse = parseJsonRequest(t, writer.Body)
94 err := e2managererrors.NewHeaderValidationError()
96 assert.Equal(t, http.StatusUnsupportedMediaType, writer.Result().StatusCode)
97 assert.Equal(t, errorResponse.Code, err.Err.Code)
98 assert.Equal(t, errorResponse.Message, err.Err.Message)
101 func TestShutdownStatusNoContent(t *testing.T){
104 rmrMessengerMock := &mocks.RmrMessengerMock{}
105 readerMock := &mocks.RnibReaderMock{}
106 readerProvider := func() reader.RNibReader {
109 writerMock := &mocks.RnibWriterMock{}
110 writerProvider := func() rNibWriter.RNibWriter {
113 config := configuration.ParseConfiguration()
114 var messageChannel chan<- *models.NotificationResponse
116 var rnibError common.IRNibError
117 nbIdentityList := []*entities.NbIdentity{}
118 readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibError)
120 writer := httptest.NewRecorder()
121 controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, messageChannel)
122 controller.ShutdownHandler(writer, tests.GetHttpRequest(), nil)
124 assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
127 func TestHandleInternalError(t *testing.T) {
129 config := configuration.ParseConfiguration()
131 rmrMessengerMock := &mocks.RmrMessengerMock{}
132 readerMock := &mocks.RnibReaderMock{}
133 readerProvider := func() reader.RNibReader {
136 writerMock := &mocks.RnibWriterMock{}
137 writerProvider := func() rNibWriter.RNibWriter {
140 var messageChannel chan<- *models.NotificationResponse
142 writer := httptest.NewRecorder()
143 controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, messageChannel)
144 err := e2managererrors.NewInternalError()
146 controller.handleErrorResponse(err, writer)
147 var errorResponse = parseJsonRequest(t, writer.Body)
149 assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
150 assert.Equal(t, errorResponse.Code, err.Err.Code)
151 assert.Equal(t, errorResponse.Message, err.Err.Message)
154 func TestHandleCommandAlreadyInProgressError(t *testing.T) {
156 config := configuration.ParseConfiguration()
158 rmrMessengerMock := &mocks.RmrMessengerMock{}
159 readerMock := &mocks.RnibReaderMock{}
160 readerProvider := func() reader.RNibReader {
163 writerMock := &mocks.RnibWriterMock{}
164 writerProvider := func() rNibWriter.RNibWriter {
167 var messageChannel chan<- *models.NotificationResponse
168 writer := httptest.NewRecorder()
169 controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, messageChannel)
170 err := e2managererrors.NewCommandAlreadyInProgressError()
172 controller.handleErrorResponse(err, writer)
173 var errorResponse = parseJsonRequest(t, writer.Body)
175 assert.Equal(t, http.StatusMethodNotAllowed, writer.Result().StatusCode)
176 assert.Equal(t, errorResponse.Code, err.Err.Code)
177 assert.Equal(t, errorResponse.Message, err.Err.Message)
180 func TestValidateHeaders(t *testing.T){
183 rmrMessengerMock := &mocks.RmrMessengerMock{}
184 readerMock := &mocks.RnibReaderMock{}
185 readerProvider := func() reader.RNibReader {
188 writerMock := &mocks.RnibWriterMock{}
189 writerProvider := func() rNibWriter.RNibWriter {
192 config := configuration.ParseConfiguration()
193 var messageChannel chan<- *models.NotificationResponse
195 controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, messageChannel)
197 header := http.Header{}
198 header.Set("Content-Type", "application/json")
199 result := controller.validateRequestHeader(&header)
201 assert.Nil(t, result)
204 func parseJsonRequest(t *testing.T, r io.Reader) models.ErrorResponse {
206 var errorResponse models.ErrorResponse
207 body, err := ioutil.ReadAll(r)
209 t.Errorf("Error cannot deserialize json request")
211 json.Unmarshal(body, &errorResponse)
216 func initLog(t *testing.T) *logger.Logger {
217 log, err := logger.InitLogger(logger.InfoLevel)
219 t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err)