From 32d7f427aab3ca627b8c9c5ded15b9517200cde3 Mon Sep 17 00:00:00 2001 From: is005q Date: Thu, 2 Jan 2020 16:23:06 +0200 Subject: [PATCH] [RICPLT-2590] RedButton flow changes + Automation Change-Id: I3109fc7c43576948accdaff29f825a40e9a8d193 Signed-off-by: is005q --- .../Tests/ENDC-Setup/ENDC_Setup_request_test.robot | 2 +- .../resource_status_false_start.robot | 1 + .../resource_status_true_start.robot | 1 + .../Tests/RedButton/RedButton_CONNECTED.robot | 32 +++------- .../RedButton_CONNECTED_SHUTDOWN_CONNECTED.robot | 48 ++++---------- .../RedButton/RedButton_CONNECTION_FAILURE.robot | 28 +++------ .../Tests/RedButton/RedButton_DISCONNECTED.robot | 20 ++---- .../RedButton/RedButton_SHUTDOWN_SHUTDOWN.robot | 40 ++++-------- .../Tests/RedButton/red_button_keywords.robot | 73 ++++++++++++++++++++++ Automation/Tests/Resource/Keywords.robot | 10 +-- E2Manager/controllers/nodeb_controller_test.go | 13 ++++ .../httpmsghandlers/delete_all_request_handler.go | 32 +++++++--- .../delete_all_request_handler_test.go | 73 +++++++++++++++++++--- .../models/red_button_partial_success_response.go | 48 ++++++++++++++ 14 files changed, 271 insertions(+), 150 deletions(-) create mode 100644 Automation/Tests/RedButton/red_button_keywords.robot create mode 100644 E2Manager/models/red_button_partial_success_response.go diff --git a/Automation/Tests/ENDC-Setup/ENDC_Setup_request_test.robot b/Automation/Tests/ENDC-Setup/ENDC_Setup_request_test.robot index 13ef989..3397099 100644 --- a/Automation/Tests/ENDC-Setup/ENDC_Setup_request_test.robot +++ b/Automation/Tests/ENDC-Setup/ENDC_Setup_request_test.robot @@ -40,7 +40,7 @@ Run Endc setup request Get request gnb Sleep 1s - Get Request node b enb test2 + Get Request node b gnb test2 Integer response status 200 String response body ranName test2 String response body ip ${ip_e2adapter} diff --git a/Automation/Tests/RSM_Resource_Status/resource_status_false_start.robot b/Automation/Tests/RSM_Resource_Status/resource_status_false_start.robot index e6b969a..cf34c1f 100644 --- a/Automation/Tests/RSM_Resource_Status/resource_status_false_start.robot +++ b/Automation/Tests/RSM_Resource_Status/resource_status_false_start.robot @@ -40,6 +40,7 @@ Put Http Start Request To RSM Integer response status 204 Verify RSM RAN Info Status Is Start And True In Redis + Sleep 1s ${result}= rsmscripts.verify_rsm_ran_info_start_true Should Be Equal As Strings ${result} True diff --git a/Automation/Tests/RSM_Resource_Status/resource_status_true_start.robot b/Automation/Tests/RSM_Resource_Status/resource_status_true_start.robot index 21f9217..2e40459 100644 --- a/Automation/Tests/RSM_Resource_Status/resource_status_true_start.robot +++ b/Automation/Tests/RSM_Resource_Status/resource_status_true_start.robot @@ -38,6 +38,7 @@ Put Http Start Request To RSM Integer response status 204 Verify RSM RAN Info Status Is Start And True In Redis + Sleep 1s ${result}= rsmscripts.verify_rsm_ran_info_start_true Should Be Equal As Strings ${result} True diff --git a/Automation/Tests/RedButton/RedButton_CONNECTED.robot b/Automation/Tests/RedButton/RedButton_CONNECTED.robot index 9ef7430..ed75f4c 100644 --- a/Automation/Tests/RedButton/RedButton_CONNECTED.robot +++ b/Automation/Tests/RedButton/RedButton_CONNECTED.robot @@ -22,8 +22,9 @@ *** Settings *** Suite Setup Prepare Enviorment -Resource ../Resource/resource.robot -Resource ../Resource/Keywords.robot +Resource ../Resource/resource.robot +Resource ../Resource/Keywords.robot +Resource red_button_keywords.robot Library OperatingSystem Library Collections Library REST ${url} @@ -31,27 +32,12 @@ Library REST ${url} *** Test Cases *** -Prepare Ran in Connected connectionStatus - Post Request setup node b x-2 - Integer response status 204 - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus CONNECTED +Execute X2 setup, verify nodeb connection status is CONNECTED and it's associated to an e2t instance + Execute setup and verify connected and associated +Execute Shutdown + Execute Shutdown -Disconnect Ran - PUT /v1/nodeb/shutdown - Integer response status 204 - - - -Verfiy Shutdown ConnectionStatus - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus SHUT_DOWN - +Verify nodeb's connection status is SHUT_DOWN and it's NOT associated to an e2t instance + Verify shutdown for enb diff --git a/Automation/Tests/RedButton/RedButton_CONNECTED_SHUTDOWN_CONNECTED.robot b/Automation/Tests/RedButton/RedButton_CONNECTED_SHUTDOWN_CONNECTED.robot index 04dee6d..4c9c974 100644 --- a/Automation/Tests/RedButton/RedButton_CONNECTED_SHUTDOWN_CONNECTED.robot +++ b/Automation/Tests/RedButton/RedButton_CONNECTED_SHUTDOWN_CONNECTED.robot @@ -24,50 +24,24 @@ Suite Setup Prepare Enviorment Resource ../Resource/resource.robot Resource ../Resource/Keywords.robot +Resource red_button_keywords.robot Library OperatingSystem Library Collections Library REST ${url} - - *** Test Cases *** -Prepare Ran in Connected connectionStatus - Post Request setup node b x-2 - Integer response status 204 - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus CONNECTED - - -Disconnect Ran - PUT /v1/nodeb/shutdown - Integer response status 204 - - - -Verfiy Shutdown ConnectionStatus - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus SHUT_DOWN - -Restart simualtor - Restart simulator - -repare Ran in Connected connectionStatus - Post Request setup node b x-2 - Integer response status 204 - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus CONNECTED - +Execute X2 setup, verify nodeb connection status is CONNECTED and it's associated to an e2t instance + Execute setup and verify connected and associated +Execute Shutdown + Execute Shutdown +Verify nodeb's connection status is SHUT_DOWN and it's NOT associated to an e2t instance + Verify shutdown for enb +Restart simulator + Restart simulator +Execute second X2 setup, verify nodeb connection status is CONNECTED and it's associated to an e2t instance + Execute setup and verify connected and associated \ No newline at end of file diff --git a/Automation/Tests/RedButton/RedButton_CONNECTION_FAILURE.robot b/Automation/Tests/RedButton/RedButton_CONNECTION_FAILURE.robot index 37865e4..0b96a94 100644 --- a/Automation/Tests/RedButton/RedButton_CONNECTION_FAILURE.robot +++ b/Automation/Tests/RedButton/RedButton_CONNECTION_FAILURE.robot @@ -24,6 +24,7 @@ Suite Setup Prepare Enviorment Resource ../Resource/resource.robot Resource ../Resource/Keywords.robot +Resource red_button_keywords.robot Library OperatingSystem Library Collections Library REST ${url} @@ -31,27 +32,12 @@ Library REST ${url} *** Test Cases *** -Prepare Ran in CONNECTION FAILURE connectionStatus - Set Headers ${header} - POST /v1/nodeb/x2-setup ${json} - Sleep 1s - POST /v1/nodeb/x2-setup ${json} - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body connectionStatus CONNECTED_SETUP_FAILED +Execute X2 setup twice and verify its connection status is CONNECTED_SETUP_FAILED + Execute setup twice and verify connected setup failed -Disconnect Ran - PUT /v1/nodeb/shutdown - Integer response status 204 - - - -Verfiy Shutdown ConnectionStatus - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus SHUT_DOWN +Execute Shutdown + Execute Shutdown +Verify nodeb's connection status is SHUT_DOWN and it's NOT associated to an e2t instance + Verify shutdown for enb diff --git a/Automation/Tests/RedButton/RedButton_DISCONNECTED.robot b/Automation/Tests/RedButton/RedButton_DISCONNECTED.robot index 547d14b..1156bd2 100644 --- a/Automation/Tests/RedButton/RedButton_DISCONNECTED.robot +++ b/Automation/Tests/RedButton/RedButton_DISCONNECTED.robot @@ -23,6 +23,7 @@ Suite Setup Prepare Enviorment Resource ../Resource/resource.robot Resource ../Resource/Keywords.robot +Resource red_button_keywords.robot Library OperatingSystem Library Collections Library REST ${url} @@ -30,8 +31,6 @@ Library REST ${url} *** Variables *** ${stop_docker_e2} docker stop e2adapter - - *** Test Cases *** Pre Condition for Connecting - no E2ADAPTER @@ -39,7 +38,6 @@ Pre Condition for Connecting - no E2ADAPTER ${result}= Run And Return Rc And Output ${docker_command} Should Be Equal As Integers ${result[1]} ${docker_number-1} - Prepare Ran in Connecting connectionStatus Post Request setup node b endc-setup Integer response status 204 @@ -49,16 +47,8 @@ Prepare Ran in Connecting connectionStatus String response body ranName test2 String response body connectionStatus DISCONNECTED -Disconnect Ran - PUT /v1/nodeb/shutdown - Integer response status 204 - - - -Verfiy Shutdown ConnectionStatus - Sleep 1s - GET /v1/nodeb/test2 - Integer response status 200 - String response body ranName test2 - String response body connectionStatus SHUT_DOWN +Execute Shutdown + Execute Shutdown +Verify nodeb's connection status is SHUT_DOWN and it's NOT associated to an e2t instance + Verify shutdown for gnb \ No newline at end of file diff --git a/Automation/Tests/RedButton/RedButton_SHUTDOWN_SHUTDOWN.robot b/Automation/Tests/RedButton/RedButton_SHUTDOWN_SHUTDOWN.robot index b498646..f97e384 100644 --- a/Automation/Tests/RedButton/RedButton_SHUTDOWN_SHUTDOWN.robot +++ b/Automation/Tests/RedButton/RedButton_SHUTDOWN_SHUTDOWN.robot @@ -24,42 +24,24 @@ Suite Setup Prepare Enviorment Resource ../Resource/resource.robot Resource ../Resource/Keywords.robot +Resource red_button_keywords.robot Library OperatingSystem Library Collections Library REST ${url} - *** Test Cases *** -Prepare Ran in Connected connectionStatus - Post Request setup node b x-2 - Integer response status 204 - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus CONNECTED - -Disconnect Ran - PUT /v1/nodeb/shutdown - Integer response status 204 - -Verfiy Shutdown ConnectionStatus - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus SHUT_DOWN +Execute X2 setup, verify nodeb connection status is CONNECTED and it's associated to an e2t instance + Execute setup and verify connected and associated -Disconnect Ran on shutdown Status - PUT /v1/nodeb/shutdown - Integer response status 204 +Execute Shutdown + Execute Shutdown -Verfiy Shutdown ConnectionStatus second time - Sleep 1s - GET /v1/nodeb/test1 - Integer response status 200 - String response body ranName test1 - String response body connectionStatus SHUT_DOWN +Verify nodeb's connection status is SHUT_DOWN and it's NOT associated to an e2t instance + Verify shutdown for enb +Execute second Shutdown + Execute Shutdown +Verify again nodeb's connection status is SHUT_DOWN and it's NOT associated to an e2t instance + Verify shutdown for enb \ No newline at end of file diff --git a/Automation/Tests/RedButton/red_button_keywords.robot b/Automation/Tests/RedButton/red_button_keywords.robot new file mode 100644 index 0000000..34bd6ef --- /dev/null +++ b/Automation/Tests/RedButton/red_button_keywords.robot @@ -0,0 +1,73 @@ +############################################################################## +# +# Copyright (c) 2019 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +############################################################################## + +*** Settings *** +Documentation Keywords file +Resource ../Resource/resource.robot +Resource ../Resource/Keywords.robot +Library ../Scripts/e2mdbscripts.py +Library Collections +Library OperatingSystem +Library json +Library REST ${url} + +*** Keywords *** +Execute setup and verify connected and associated + Post Request setup node b x-2 + Integer response status 204 + Get Request node b enb test1 + Integer response status 200 + String response body ranName test1 + String response body connectionStatus CONNECTED + String response body associatedE2tInstanceAddress e2t.att.com:38000 + +Execute setup twice and verify connected setup failed + Post Request setup node b x-2 + Sleep 1s + Post Request setup node b x-2 + Get Request node b enb test1 + String response body connectionStatus CONNECTED_SETUP_FAILED + + +Verify shutdown for enb + Get Request node b enb test1 + Integer response status 200 + String response body ranName test1 + String response body connectionStatus SHUT_DOWN + Missing response body associatedE2tInstanceAddress + ${result} e2mdbscripts.verify_ran_is_associated_with_e2t_instance test1 e2t.att.com:38000 + Should Be True ${result} == False + + +Verify shutdown for gnb + Get Request node b gnb test2 + Integer response status 200 + String response body ranName test2 + String response body connectionStatus SHUT_DOWN + Missing response body associatedE2tInstanceAddress + ${result} e2mdbscripts.verify_ran_is_associated_with_e2t_instance test2 e2t.att.com:38000 + Should Be True ${result} == False + +Execute Shutdown + PUT /v1/nodeb/shutdown + Integer response status 204 + + + + + diff --git a/Automation/Tests/Resource/Keywords.robot b/Automation/Tests/Resource/Keywords.robot index 0f24653..1022890 100644 --- a/Automation/Tests/Resource/Keywords.robot +++ b/Automation/Tests/Resource/Keywords.robot @@ -26,21 +26,15 @@ Library ../Scripts/cleanup_db.py Resource ../Resource/resource.robot Library OperatingSystem - - - - *** Keywords *** Post Request setup node b x-2 Set Headers ${header} POST /v1/nodeb/x2-setup ${json} - Put Request Resource Status Start Set Headers ${header} PUT /v1/general/resourcestatus ${resource_status_start_json} - Put Request Resource Status Stop Set Headers ${header} PUT /v1/general/resourcestatus ${resource_status_stop_json} @@ -49,12 +43,10 @@ Get Request node b enb test1 Sleep 1s GET /v1/nodeb/test1 - -Get Request node b enb test2 +Get Request node b gnb test2 Sleep 1s GET /v1/nodeb/test2 - Remove log files Remove File ${EXECDIR}/${gnb_log_filename} Remove File ${EXECDIR}/${e2mgr_log_filename} diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index 726e8c3..88983f4 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -345,6 +345,19 @@ func TestHandleCommandAlreadyInProgressError(t *testing.T) { assert.Equal(t, errorResponse.Message, err.Message) } +func TestHandleRoutingManagerError(t *testing.T) { + controller, _, _, _, _ := setupControllerTest(t) + writer := httptest.NewRecorder() + err := e2managererrors.NewRoutingManagerError() + + controller.handleErrorResponse(err, writer) + var errorResponse = parseJsonRequest(t, writer.Body) + + assert.Equal(t, http.StatusServiceUnavailable, writer.Result().StatusCode) + assert.Equal(t, errorResponse.Code, err.Code) + assert.Equal(t, errorResponse.Message, err.Message) +} + func TestHandleE2TInstanceAbsenceError(t *testing.T) { controller, _, _, _, _ := setupControllerTest(t) diff --git a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go index 7edc13c..869890a 100644 --- a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go +++ b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go @@ -67,9 +67,9 @@ func (h *DeleteAllRequestHandler) Handle(request models.Request) (models.IRespon return nil, err } - err = h.rmClient.DissociateAllRans(e2tAddresses) + dissocErr := h.rmClient.DissociateAllRans(e2tAddresses) - if err != nil { + if dissocErr != nil { h.logger.Warnf("#DeleteAllRequestHandler.Handle - routing manager failure. continue flow.") } @@ -95,6 +95,11 @@ func (h *DeleteAllRequestHandler) Handle(request models.Request) (models.IRespon } if allRansAreShutDown { + + if dissocErr != nil { + return models.NewRedButtonPartialSuccessResponseModel("Operation succeeded, except Routing Manager failure"), nil + } + return nil, nil } @@ -102,7 +107,16 @@ func (h *DeleteAllRequestHandler) Handle(request models.Request) (models.IRespon h.logger.Infof("#DeleteAllRequestHandler.Handle - timer expired") err, _ = h.updateNodebs(h.updateNodebInfoShutDown) - return nil, err + + if err != nil { + return nil, err + } + + if dissocErr != nil { + return models.NewRedButtonPartialSuccessResponseModel("Operation succeeded, except Routing Manager failure"), nil + } + + return nil, nil } func (h *DeleteAllRequestHandler) updateNodebs(updateCb func(node *entities.NodebInfo) error) (error, bool) { @@ -120,14 +134,18 @@ func (h *DeleteAllRequestHandler) updateNodebs(updateCb func(node *entities.Node if err != nil { h.logger.Errorf("#DeleteAllRequestHandler.updateNodebs - failed to get nodeB entity for ran name: %s from rNib. error: %s", nbIdentity.InventoryName, err) - continue + return e2managererrors.NewRnibDbError(), false } if node.ConnectionStatus != entities.ConnectionStatus_SHUT_DOWN { allRansAreShutdown = false } - _ = updateCb(node) + err = updateCb(node) + + if err != nil { + return err, false + } } return nil, allRansAreShutdown @@ -169,8 +187,8 @@ func (h *DeleteAllRequestHandler) updateNodebInfo(node *entities.NodebInfo, conn err := h.rnibDataService.UpdateNodebInfo(node) if err != nil { - h.logger.Errorf("#DeleteAllRequestHandler.updateNodebInfo - RAN name: %s - failed saving nodeB entity to rNib. error: %s", node.RanName, err) - return err + h.logger.Errorf("#DeleteAllRequestHandler.updateNodebInfo - RAN name: %s - failed updating nodeB entity in rNib. error: %s", node.RanName, err) + return e2managererrors.NewRnibDbError() } h.logger.Infof("#DeleteAllRequestHandler.updateNodebInfo - RAN name: %s, connection status: %s", node.RanName, connectionStatus) diff --git a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go index 5332bd9..9b8731c 100644 --- a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go +++ b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go @@ -90,7 +90,7 @@ func mockHttpClientDissociateAllRans(httpClientMock *mocks.HttpClientMock, e2tAd func TestGetE2TAddressesFailure(t *testing.T) { h, readerMock, _, _, _ := setupDeleteAllRequestHandlerTest(t) - readerMock.On("GetE2TAddresses").Return([]string{}, e2managererrors.NewRnibDbError()) + readerMock.On("GetE2TAddresses").Return([]string{}, common.NewInternalError(errors.New("error"))) _, err := h.Handle(nil) assert.IsType(t, &e2managererrors.RnibDbError{}, err) readerMock.AssertExpectations(t) @@ -123,7 +123,7 @@ func TestTwoRansGetE2TAddressesEmptyListOneGetNodebFailure(t *testing.T) { var nb2 *entities.NodebInfo readerMock.On("GetNodeb", "RanName_2").Return(nb2, common.NewInternalError(errors.New("error"))) _, err := h.Handle(nil) - assert.Nil(t, err) + assert.IsType(t,&e2managererrors.RnibDbError{}, err) writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1) readerMock.AssertExpectations(t) } @@ -144,7 +144,7 @@ func TestTwoRansGetE2TAddressesEmptyListOneUpdateNodebInfoFailure(t *testing.T) updatedNb2 := &entities.NodebInfo{RanName: "RanName_2", ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN,} writerMock.On("UpdateNodebInfo", updatedNb2).Return(common.NewInternalError(errors.New("error"))) _, err := h.Handle(nil) - assert.Nil(t, err) + assert.IsType(t,&e2managererrors.RnibDbError{}, err) readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) } @@ -223,11 +223,11 @@ func TestOneRanTryShuttingDownSucceedsClearSucceedsRmrSendFails(t *testing.T) { writerMock.AssertExpectations(t) } -func TestTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdown(t *testing.T) { +func testTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdown(t *testing.T, partial bool) { h, readerMock, writerMock, rmrMessengerMock, httpClientMock := setupDeleteAllRequestHandlerTest(t) e2tAddresses := []string{E2TAddress} readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil) - mockHttpClientDissociateAllRans(httpClientMock, e2tAddresses, true) + mockHttpClientDissociateAllRans(httpClientMock, e2tAddresses, !partial) nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}, {InventoryName: "RanName_2"}} readerMock.On("GetListNodebIds").Return(nbIdentityList, nil) nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN} @@ -244,13 +244,28 @@ func TestTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdow rmrMessage := models.RmrMessage{MsgType: rmrCgo.RIC_SCTP_CLEAR_ALL} mbuf := rmrCgo.NewMBuf(rmrMessage.MsgType, len(rmrMessage.Payload), rmrMessage.RanName, &rmrMessage.Payload, &rmrMessage.XAction) rmrMessengerMock.On("SendMsg", mbuf, true).Return(mbuf, nil) - _, err := h.Handle(nil) + resp, err := h.Handle(nil) assert.Nil(t, err) + + if partial { + assert.IsType(t, &models.RedButtonPartialSuccessResponseModel{}, resp) + } else { + assert.Nil(t, resp) + } + rmrMessengerMock.AssertCalled(t, "SendMsg", mbuf, true) readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) } +func TestTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdownSuccess(t *testing.T) { + testTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdown(t, false) +} + +func TestTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdownPartialSuccess(t *testing.T) { + testTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdown(t, true) +} + //func TestOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsAlreadyShutdown(t *testing.T) { // h, readerMock, writerMock, rmrMessengerMock, httpClientMock := setupDeleteAllRequestHandlerTest(t) // e2tAddresses := []string{E2TAddress} @@ -285,11 +300,45 @@ func TestTwoRansTryShuttingDownSucceedsClearSucceedsRmrSucceedsAllRansAreShutdow // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1) //} -func TestOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttingDown(t *testing.T) { +//func TestOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttingDownUpdateFailure(t *testing.T) { +// h, readerMock, writerMock, rmrMessengerMock, httpClientMock := setupDeleteAllRequestHandlerTest(t) +// e2tAddresses := []string{E2TAddress} +// readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil) +// mockHttpClientDissociateAllRans(httpClientMock, e2tAddresses, true) +// nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}} +// readerMock.On("GetListNodebIds").Return(nbIdentityList, nil) +// //nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_CONNECTED, AssociatedE2TInstanceAddress: E2TAddress} +// //readerMock.On("GetNodeb", "RanName_1").Return(nb1, nil) +// updatedNb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,} +// writerMock.On("UpdateNodebInfo", updatedNb1).Return(nil) +// readerMock.On("GetE2TAddresses").Return([]string{E2TAddress}, nil) +// e2tInstance := entities.E2TInstance{Address: E2TAddress, AssociatedRanList: []string{"RanName_1"}} +// readerMock.On("GetE2TInstances", []string{E2TAddress}).Return([]*entities.E2TInstance{&e2tInstance}, nil) +// updatedE2tInstance := e2tInstance +// updatedE2tInstance.AssociatedRanList = []string{} +// writerMock.On("SaveE2TInstance", &updatedE2tInstance).Return(nil) +// +// rmrMessage := models.RmrMessage{MsgType: rmrCgo.RIC_SCTP_CLEAR_ALL} +// mbuf := rmrCgo.NewMBuf(rmrMessage.MsgType, len(rmrMessage.Payload), rmrMessage.RanName, &rmrMessage.Payload, &rmrMessage.XAction) +// rmrMessengerMock.On("SendMsg", mbuf, true).Return(mbuf, nil) +// +// readerMock.On("GetListNodebIds").Return(nbIdentityList, nil) +// readerMock.On("GetNodeb", "RanName_1").Return(updatedNb1, nil) +// updatedNb2 := *updatedNb1 +// updatedNb2.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN +// writerMock.On("UpdateNodebInfo", &updatedNb2).Return(common.NewInternalError(errors.New("error"))) +// _, err := h.Handle(nil) +// assert.IsType(t,&e2managererrors.RnibDbError{}, err) +// rmrMessengerMock.AssertCalled(t, "SendMsg", mbuf, true) +// readerMock.AssertExpectations(t) +// writerMock.AssertExpectations(t) +//} + +func testOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttingDown(t *testing.T, partial bool) { h, readerMock, writerMock, rmrMessengerMock, httpClientMock := setupDeleteAllRequestHandlerTest(t) e2tAddresses := []string{E2TAddress} readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil) - mockHttpClientDissociateAllRans(httpClientMock, e2tAddresses, true) + mockHttpClientDissociateAllRans(httpClientMock, e2tAddresses, !partial) nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}} readerMock.On("GetListNodebIds").Return(nbIdentityList, nil) //nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_CONNECTED, AssociatedE2TInstanceAddress: E2TAddress} @@ -319,6 +368,14 @@ func TestOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttin writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2) } +func TestOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttingDownSuccess (t *testing.T) { + testOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttingDown(t, false) +} + +func TestOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttingDownPartialSuccess (t *testing.T) { + testOneRanTryShuttingDownSucceedsClearSucceedsRmrSucceedsRanStatusIsShuttingDown(t, true) +} + func TestSuccessTwoE2TInstancesSixRans(t *testing.T) { h, readerMock, writerMock, rmrMessengerMock, httpClientMock := setupDeleteAllRequestHandlerTest(t) e2tAddresses := []string{E2TAddress, E2TAddress2} diff --git a/E2Manager/models/red_button_partial_success_response.go b/E2Manager/models/red_button_partial_success_response.go new file mode 100644 index 0000000..115bcef --- /dev/null +++ b/E2Manager/models/red_button_partial_success_response.go @@ -0,0 +1,48 @@ +// +// Copyright 2019 AT&T Intellectual Property +// Copyright 2019 Nokia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// This source code is part of the near-RT RIC (RAN Intelligent Controller) +// platform project (RICP). + +package models + +import ( + "e2mgr/e2managererrors" + "encoding/json" +) + +type RedButtonPartialSuccessResponseModel struct { + Message string `json:"message"` +} + +func NewRedButtonPartialSuccessResponseModel(message string) *RedButtonPartialSuccessResponseModel { + return &RedButtonPartialSuccessResponseModel{ + Message: message, + } +} + +func (response RedButtonPartialSuccessResponseModel) Marshal() ([]byte, error) { + + data, err := json.Marshal(response) + + if err != nil { + return nil, e2managererrors.NewInternalError() + } + + return data, nil + +} -- 2.16.6