[RIC-247] RAN Health Check Request API - Validation
[ric-plt/e2mgr.git] / E2Manager / handlers / httpmsghandlers / health_check_handler_test.go
1 //
2 // Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15
16 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
17 //  platform project (RICP).
18
19 package httpmsghandlers
20
21 import (
22         "e2mgr/configuration"
23         "e2mgr/e2managererrors"
24         "e2mgr/mocks"
25         "e2mgr/models"
26         "e2mgr/services"
27         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
28         "github.com/pkg/errors"
29         "github.com/stretchr/testify/assert"
30         "testing"
31 )
32
33 func setupHealthCheckHandlerTest(t *testing.T) (*HealthCheckRequestHandler, services.RNibDataService, *mocks.RnibReaderMock, *mocks.RanListManagerMock) {
34         logger := initLog(t)
35         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
36
37         readerMock := &mocks.RnibReaderMock{}
38         writerMock := &mocks.RnibWriterMock{}
39
40         rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
41         rmrMessengerMock := &mocks.RmrMessengerMock{}
42         ranListManagerMock := &mocks.RanListManagerMock{}
43
44         rmrSender := getRmrSender(rmrMessengerMock, logger)
45         handler := NewHealthCheckRequestHandler(logger, rnibDataService, ranListManagerMock, rmrSender)
46
47         return handler, rnibDataService, readerMock, ranListManagerMock
48 }
49
50 func TestHealthCheckRequestHandlerArguementHasRanNameSuccess(t *testing.T) {
51         handler, _, readerMock, _ := setupHealthCheckHandlerTest(t)
52
53         nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_CONNECTED}
54         ranNames := []string{"RanName_1"}
55
56         readerMock.On("GetNodeb", "RanName_1").Return(nb1, nil)
57
58         _, err := handler.Handle(models.HealthCheckRequest{ranNames})
59
60         assert.Nil(t, err)
61         readerMock.AssertExpectations(t)
62 }
63
64 func TestHealthCheckRequestHandlerArguementHasNoRanNameSuccess(t *testing.T) {
65         handler, _, readerMock, ranListManagerMock := setupHealthCheckHandlerTest(t)
66
67         nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_CONNECTED},
68                 {InventoryName: "RanName_2", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}}
69
70         ranListManagerMock.On("GetNbIdentityList").Return(nbIdentityList)
71
72         nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_CONNECTED}
73         readerMock.On("GetNodeb", "RanName_1").Return(nb1, nil)
74
75         nb2 := &entities.NodebInfo{RanName: "RanName_2", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
76         readerMock.On("GetNodeb", "RanName_2").Return(nb2, nil)
77
78         _, err := handler.Handle(models.HealthCheckRequest{[]string{}})
79
80         assert.Nil(t, err)
81
82 }
83
84 func TestHealthCheckRequestHandlerArguementHasNoRanConnectedFailure(t *testing.T) {
85         handler, _, readerMock, ranListManagerMock := setupHealthCheckHandlerTest(t)
86
87         nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED},
88                 {InventoryName: "RanName_2", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}}
89         ranListManagerMock.On("GetNbIdentityList").Return(nbIdentityList)
90
91         nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
92         readerMock.On("GetNodeb", "RanName_1").Return(nb1, nil)
93
94         nb2 := &entities.NodebInfo{RanName: "RanName_2", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
95         readerMock.On("GetNodeb", "RanName_2").Return(nb2, nil)
96
97         _, err := handler.Handle(models.HealthCheckRequest{[]string{}})
98
99         assert.IsType(t, &e2managererrors.NoConnectedRanError{}, err)
100
101 }
102
103 func TestHealthCheckRequestHandlerArguementHasRanNameDBErrorFailure(t *testing.T) {
104         handler, _, readerMock, _ := setupHealthCheckHandlerTest(t)
105
106         ranNames := []string{"RanName_1"}
107         readerMock.On("GetNodeb", "RanName_1").Return(&entities.NodebInfo{}, errors.New("error"))
108
109         _, err := handler.Handle(models.HealthCheckRequest{ranNames})
110
111         assert.IsType(t, &e2managererrors.RnibDbError{}, err)
112         readerMock.AssertExpectations(t)
113 }