blob: 915e78e2fa912adc131fbe56f02d89087ad34c7c [file] [log] [blame]
is005q33591a32019-12-25 09:08:28 +02001//
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
18package controllers
19
20import (
21 "e2mgr/configuration"
22 "e2mgr/managers"
23 "e2mgr/mocks"
24 "e2mgr/models"
25 "e2mgr/providers/httpmsghandlerprovider"
26 "e2mgr/services"
27 "encoding/json"
28 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
29 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
30 "github.com/magiconair/properties/assert"
31 "github.com/pkg/errors"
32 "io/ioutil"
33 "net/http"
34 "net/http/httptest"
35 "testing"
36)
37
38const E2TAddress string = "10.0.2.15:38000"
39const E2TAddress2 string = "10.0.2.16:38001"
40
41type controllerE2TInstancesTestContext struct {
42 e2tAddresses []string
43 e2tInstances []*entities.E2TInstance
44 error error
45 expectedStatusCode int
46 expectedJsonResponse string
47}
48
49func setupE2TControllerTest(t *testing.T) (*E2TController, *mocks.RnibReaderMock) {
50 log := initLog(t)
51 config := configuration.ParseConfiguration()
52
53 readerMock := &mocks.RnibReaderMock{}
54
55 rnibDataService := services.NewRnibDataService(log, config, readerMock, nil)
56 e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
Irinadb038072020-06-21 13:09:56 +030057
58 ranListManager := managers.NewRanListManager(log)
59 ranAlarmService := services.NewRanAlarmService(log, config)
60 ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService)
Irinab2f27432020-07-07 11:17:10 +000061 nodebValidator := managers.NewNodebValidator()
Irinadb038072020-06-21 13:09:56 +030062
Irinab2f27432020-07-07 11:17:10 +000063 handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, nil, config, rnibDataService, e2tInstancesManager, nil, ranConnectStatusChangeManager, nodebValidator)
is005q33591a32019-12-25 09:08:28 +020064 controller := NewE2TController(log, handlerProvider)
65 return controller, readerMock
66}
67
68func controllerGetE2TInstancesTestExecuter(t *testing.T, context *controllerE2TInstancesTestContext) {
69 controller, readerMock := setupE2TControllerTest(t)
70 writer := httptest.NewRecorder()
71 readerMock.On("GetE2TAddresses").Return(context.e2tAddresses, context.error)
72
73 if context.e2tInstances != nil {
74 readerMock.On("GetE2TInstances", context.e2tAddresses).Return(context.e2tInstances, context.error)
75 }
76
77 req, _ := http.NewRequest("GET", "/e2t/list", nil)
78 controller.GetE2TInstances(writer, req)
79 assert.Equal(t, context.expectedStatusCode, writer.Result().StatusCode)
80 bodyBytes, _ := ioutil.ReadAll(writer.Body)
81 assert.Equal(t, context.expectedJsonResponse, string(bodyBytes))
82 readerMock.AssertExpectations(t)
83}
84
85func TestControllerGetE2TInstancesSuccess(t *testing.T) {
86 ranNames1 := []string{"test1", "test2", "test3"}
87 e2tInstanceResponseModel1 := models.NewE2TInstanceResponseModel(E2TAddress, ranNames1)
88 e2tInstanceResponseModel2 := models.NewE2TInstanceResponseModel(E2TAddress2, []string{})
89 e2tInstancesResponse := models.E2TInstancesResponse{e2tInstanceResponseModel1, e2tInstanceResponseModel2}
90 bytes, _ := json.Marshal(e2tInstancesResponse)
91
92 context := controllerE2TInstancesTestContext{
93 e2tAddresses: []string{E2TAddress, E2TAddress2},
94 e2tInstances: []*entities.E2TInstance{{Address: E2TAddress, AssociatedRanList: ranNames1}, {Address: E2TAddress2, AssociatedRanList: []string{}}},
95 error: nil,
96 expectedStatusCode: http.StatusOK,
97 expectedJsonResponse: string(bytes),
98 }
99
100 controllerGetE2TInstancesTestExecuter(t, &context)
101}
102
103func TestControllerGetE2TInstancesEmptySuccess(t *testing.T) {
104 e2tInstancesResponse := models.E2TInstancesResponse{}
105 bytes, _ := json.Marshal(e2tInstancesResponse)
106
107 context := controllerE2TInstancesTestContext{
108 e2tAddresses: []string{},
109 e2tInstances: nil,
110 error: nil,
111 expectedStatusCode: http.StatusOK,
112 expectedJsonResponse: string(bytes),
113 }
114
115 controllerGetE2TInstancesTestExecuter(t, &context)
116}
117
118func TestControllerGetE2TInstancesInternal(t *testing.T) {
119 context := controllerE2TInstancesTestContext{
120 e2tAddresses: nil,
121 e2tInstances: nil,
122 error: common.NewInternalError(errors.New("error")),
123 expectedStatusCode: http.StatusInternalServerError,
124 expectedJsonResponse: "{\"errorCode\":500,\"errorMessage\":\"RNIB error\"}",
125 }
126
127 controllerGetE2TInstancesTestExecuter(t, &context)
128}
129
130func TestInvalidRequestName(t *testing.T) {
131 controller, _ := setupE2TControllerTest(t)
132
133 writer := httptest.NewRecorder()
134
135 header := &http.Header{}
136
137 controller.handleRequest(writer, header, "", nil, true)
138
139 var errorResponse = parseJsonRequest(t, writer.Body)
140
141 assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
142 assert.Equal(t, errorResponse.Code, 501)
143}