[RIC-431] Some fixes & UTs
[ric-plt/e2mgr.git] / E2Manager / httpserver / http_server_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 package httpserver
21
22 import (
23         "e2mgr/logger"
24         "e2mgr/mocks"
25         "github.com/gorilla/mux"
26         "github.com/stretchr/testify/assert"
27         "net/http"
28         "net/http/httptest"
29         "testing"
30         "time"
31 )
32
33 func setupRouterAndMocks() (*mux.Router, *mocks.RootControllerMock, *mocks.NodebControllerMock, *mocks.E2TControllerMock) {
34         rootControllerMock := &mocks.RootControllerMock{}
35         rootControllerMock.On("HandleHealthCheckRequest").Return(nil)
36
37         nodebControllerMock := &mocks.NodebControllerMock{}
38         nodebControllerMock.On("Shutdown").Return(nil)
39         nodebControllerMock.On("GetNodeb").Return(nil)
40         nodebControllerMock.On("GetNodebIdList").Return(nil)
41         nodebControllerMock.On("SetGeneralConfiguration").Return(nil)
42         nodebControllerMock.On("DeleteEnb").Return(nil)
43         nodebControllerMock.On("AddEnb").Return(nil)
44
45         e2tControllerMock := &mocks.E2TControllerMock{}
46
47         e2tControllerMock.On("GetE2TInstances").Return(nil)
48
49         router := mux.NewRouter()
50         initializeRoutes(router, rootControllerMock, nodebControllerMock, e2tControllerMock)
51         return router, rootControllerMock, nodebControllerMock, e2tControllerMock
52 }
53
54 func TestRouteGetNodebIds(t *testing.T) {
55         router, _, nodebControllerMock, _ := setupRouterAndMocks()
56
57         req, err := http.NewRequest("GET", "/v1/nodeb/ids", nil)
58         if err != nil {
59                 t.Fatal(err)
60         }
61         rr := httptest.NewRecorder()
62         router.ServeHTTP(rr, req)
63
64         nodebControllerMock.AssertNumberOfCalls(t, "GetNodebIdList", 1)
65 }
66
67 func TestRouteGetNodebRanName(t *testing.T) {
68         router, _, nodebControllerMock, _ := setupRouterAndMocks()
69
70         req, err := http.NewRequest("GET", "/v1/nodeb/ran1", nil)
71         if err != nil {
72                 t.Fatal(err)
73         }
74         rr := httptest.NewRecorder()
75         router.ServeHTTP(rr, req)
76
77         assert.Equal(t, http.StatusOK, rr.Code, "handler returned wrong status code")
78         assert.Equal(t, "ran1", rr.Body.String(), "handler returned wrong body")
79         nodebControllerMock.AssertNumberOfCalls(t, "GetNodeb", 1)
80 }
81
82 func TestRouteGetHealth(t *testing.T) {
83         router, rootControllerMock, _, _ := setupRouterAndMocks()
84
85         req, err := http.NewRequest("GET", "/v1/health", nil)
86         if err != nil {
87                 t.Fatal(err)
88         }
89         rr := httptest.NewRecorder()
90         router.ServeHTTP(rr, req)
91
92         rootControllerMock.AssertNumberOfCalls(t, "HandleHealthCheckRequest", 1)
93 }
94
95 func TestRoutePutNodebShutdown(t *testing.T) {
96         router, _, nodebControllerMock, _ := setupRouterAndMocks()
97
98         req, err := http.NewRequest("PUT", "/v1/nodeb/shutdown", nil)
99         if err != nil {
100                 t.Fatal(err)
101         }
102         rr := httptest.NewRecorder()
103         router.ServeHTTP(rr, req)
104
105         nodebControllerMock.AssertNumberOfCalls(t, "Shutdown", 1)
106 }
107
108 func TestRoutePutNodebSetGeneralConfiguration(t *testing.T) {
109         router, _, nodebControllerMock, _ := setupRouterAndMocks()
110
111         req, err := http.NewRequest("PUT", "/v1/nodeb/parameters", nil)
112         if err != nil {
113                 t.Fatal(err)
114         }
115         rr := httptest.NewRecorder()
116         router.ServeHTTP(rr, req)
117
118         nodebControllerMock.AssertNumberOfCalls(t, "SetGeneralConfiguration", 1)
119 }
120
121 func TestRouteNotFound(t *testing.T) {
122         router, _, _, _ := setupRouterAndMocks()
123
124         req, err := http.NewRequest("GET", "/v1/no/such/route", nil)
125         if err != nil {
126                 t.Fatal(err)
127         }
128         rr := httptest.NewRecorder()
129         router.ServeHTTP(rr, req)
130
131         assert.Equal(t, http.StatusNotFound, rr.Code, "handler returned wrong status code")
132 }
133
134 func TestRunError(t *testing.T) {
135         log := initLog(t)
136         err := Run(log, 1234567, &mocks.RootControllerMock{}, &mocks.NodebControllerMock{}, &mocks.E2TControllerMock{})
137         assert.NotNil(t, err)
138 }
139
140 func TestRun(t *testing.T) {
141         log := initLog(t)
142         _, rootControllerMock, nodebControllerMock, e2tControllerMock := setupRouterAndMocks()
143         go Run(log, 11223, rootControllerMock, nodebControllerMock, e2tControllerMock)
144
145         time.Sleep(time.Millisecond * 100)
146         resp, err := http.Get("http://localhost:11223/v1/health")
147         if err != nil {
148                 t.Fatalf("failed to perform GET to http://localhost:11223/v1/health")
149         }
150         assert.Equal(t, 200, resp.StatusCode)
151 }
152
153 func TestRouteAddEnb(t *testing.T) {
154         router, _, nodebControllerMock, _ := setupRouterAndMocks()
155
156         req, err := http.NewRequest("POST", "/v1/nodeb/enb", nil)
157         if err != nil {
158                 t.Fatal(err)
159         }
160         rr := httptest.NewRecorder()
161         router.ServeHTTP(rr, req)
162
163         assert.Equal(t, http.StatusCreated, rr.Code, "handler returned wrong status code")
164         nodebControllerMock.AssertNumberOfCalls(t, "AddEnb", 1)
165 }
166
167 func TestRouteDeleteEnb(t *testing.T) {
168         router, _, nodebControllerMock, _ := setupRouterAndMocks()
169
170         req, err := http.NewRequest("DELETE", "/v1/nodeb/enb/ran1", nil)
171         if err != nil {
172                 t.Fatal(err)
173         }
174         rr := httptest.NewRecorder()
175         router.ServeHTTP(rr, req)
176
177         assert.Equal(t, http.StatusNoContent, rr.Code, "handler returned wrong status code")
178         nodebControllerMock.AssertNumberOfCalls(t, "DeleteEnb", 1)
179 }
180
181 func initLog(t *testing.T) *logger.Logger {
182         log, err := logger.InitLogger(logger.InfoLevel)
183         if err != nil {
184                 t.Errorf("#initLog test - failed to initialize logger, error: %s", err)
185         }
186         return log
187 }