[RICPLT-2789] Refactor HttpClient | Add DeleteE2TInstance method 73/2173/1
authoris005q <idan.shalom@intl.att.com>
Wed, 8 Jan 2020 17:17:49 +0000 (19:17 +0200)
committeris005q <idan.shalom@intl.att.com>
Wed, 8 Jan 2020 17:17:55 +0000 (19:17 +0200)
Change-Id: Id898d5a4ce769e8d0c4b609f69d054025ee06c0f
Signed-off-by: is005q <idan.shalom@intl.att.com>
E2Manager/app/main.go
E2Manager/clients/http_client.go
E2Manager/clients/routing_manager_client.go
E2Manager/clients/routing_manager_client_test.go
E2Manager/managers/e2t_association_manager_test.go
E2Manager/mocks/http_client_mock.go
E2Manager/models/routing_manager_delete_request_model.go [new file with mode: 0644]

index 8c4dee2..6f180e3 100644 (file)
@@ -17,7 +17,6 @@
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
-
 package main
 
 import (
 package main
 
 import (
@@ -38,7 +37,6 @@ import (
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
-       "net/http"
        "os"
        "strconv"
 )
        "os"
        "strconv"
 )
@@ -54,13 +52,13 @@ func main() {
        db := sdlgo.NewDatabase()
        sdl := sdlgo.NewSdlInstance("e2Manager", db)
        defer sdl.Close()
        db := sdlgo.NewDatabase()
        sdl := sdlgo.NewSdlInstance("e2Manager", db)
        defer sdl.Close()
-       rnibDataService := services.NewRnibDataService(logger, config, reader.GetRNibReader(sdl), rNibWriter.GetRNibWriter( sdl))
+       rnibDataService := services.NewRnibDataService(logger, config, reader.GetRNibReader(sdl), rNibWriter.GetRNibWriter(sdl))
        var msgImpl *rmrCgo.Context
        rmrMessenger := msgImpl.Init("tcp:"+strconv.Itoa(config.Rmr.Port), config.Rmr.MaxMsgSize, 0, logger)
        rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger)
        ranSetupManager := managers.NewRanSetupManager(logger, rmrSender, rnibDataService)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        var msgImpl *rmrCgo.Context
        rmrMessenger := msgImpl.Init("tcp:"+strconv.Itoa(config.Rmr.Port), config.Rmr.MaxMsgSize, 0, logger)
        rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger)
        ranSetupManager := managers.NewRanSetupManager(logger, rmrSender, rnibDataService)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
-       routingManagerClient := clients.NewRoutingManagerClient(logger, config, &http.Client{})
+       routingManagerClient := clients.NewRoutingManagerClient(logger, config, clients.NewHttpClient())
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient)
        e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, ranSetupManager)
        e2tKeepAliveWorker := managers.NewE2TKeepAliveWorker(logger, rmrSender, e2tInstancesManager, e2tShutdownManager, config)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient)
        e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, ranSetupManager)
        e2tKeepAliveWorker := managers.NewE2TKeepAliveWorker(logger, rmrSender, e2tInstancesManager, e2tShutdownManager, config)
@@ -82,4 +80,4 @@ func main() {
        nodebController := controllers.NewNodebController(logger, httpMsgHandlerProvider)
        e2tController := controllers.NewE2TController(logger, httpMsgHandlerProvider)
        _ = httpserver.Run(logger, config.Http.Port, rootController, nodebController, e2tController)
        nodebController := controllers.NewNodebController(logger, httpMsgHandlerProvider)
        e2tController := controllers.NewE2TController(logger, httpMsgHandlerProvider)
        _ = httpserver.Run(logger, config.Http.Port, rootController, nodebController, e2tController)
-}
\ No newline at end of file
+}
index e3692f5..187d83c 100644 (file)
@@ -17,7 +17,6 @@
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
-
 package clients
 
 import (
 package clients
 
 import (
@@ -25,6 +24,22 @@ import (
        "net/http"
 )
 
        "net/http"
 )
 
-type HttpClient interface {
+type IHttpClient interface {
        Post(url, contentType string, body io.Reader) (resp *http.Response, err error)
        Post(url, contentType string, body io.Reader) (resp *http.Response, err error)
-}
\ No newline at end of file
+       Delete(url, contentType string, body io.Reader) (resp *http.Response, err error)
+}
+
+type HttpClient struct {
+       *http.Client
+}
+
+func NewHttpClient() *HttpClient {
+       return &HttpClient{}
+}
+
+func (c *HttpClient) Delete(url, contentType string, body io.Reader) (resp *http.Response, err error) {
+       req, _ := http.NewRequest(http.MethodDelete, url, body)
+       req.Header.Set("Content-Type", contentType)
+       return c.Do(req)
+}
+
index 7679cca..318b7cf 100644 (file)
@@ -33,12 +33,13 @@ const (
        AddE2TInstanceApiSuffix            = "e2t"
        AssociateRanToE2TInstanceApiSuffix = "associate-ran-to-e2t"
        DissociateRanE2TInstanceApiSuffix  = "dissociate-ran"
        AddE2TInstanceApiSuffix            = "e2t"
        AssociateRanToE2TInstanceApiSuffix = "associate-ran-to-e2t"
        DissociateRanE2TInstanceApiSuffix  = "dissociate-ran"
+       DeleteE2TInstanceApiSuffix         = "e2t"
 )
 
 type RoutingManagerClient struct {
        logger     *logger.Logger
        config     *configuration.Configuration
 )
 
 type RoutingManagerClient struct {
        logger     *logger.Logger
        config     *configuration.Configuration
-       httpClient HttpClient
+       httpClient IHttpClient
 }
 
 type IRoutingManagerClient interface {
 }
 
 type IRoutingManagerClient interface {
@@ -49,7 +50,7 @@ type IRoutingManagerClient interface {
        DeleteE2TInstance(e2tAddress string, ransToBeDissociated []string, e2tToRansAssociations map[string][]string) error
 }
 
        DeleteE2TInstance(e2tAddress string, ransToBeDissociated []string, e2tToRansAssociations map[string][]string) error
 }
 
-func NewRoutingManagerClient(logger *logger.Logger, config *configuration.Configuration, httpClient HttpClient) *RoutingManagerClient {
+func NewRoutingManagerClient(logger *logger.Logger, config *configuration.Configuration, httpClient IHttpClient) *RoutingManagerClient {
        return &RoutingManagerClient{
                logger:     logger,
                config:     config,
        return &RoutingManagerClient{
                logger:     logger,
                config:     config,
@@ -62,7 +63,7 @@ func (c *RoutingManagerClient) AddE2TInstance(e2tAddress string) error {
        data := models.NewRoutingManagerE2TData(e2tAddress)
        url := c.config.RoutingManager.BaseUrl + AddE2TInstanceApiSuffix
 
        data := models.NewRoutingManagerE2TData(e2tAddress)
        url := c.config.RoutingManager.BaseUrl + AddE2TInstanceApiSuffix
 
-       return c.PostMessage(data, url)
+       return c.PostMessage(url, data)
 }
 
 func (c *RoutingManagerClient) AssociateRanToE2TInstance(e2tAddress string, ranName string) error {
 }
 
 func (c *RoutingManagerClient) AssociateRanToE2TInstance(e2tAddress string, ranName string) error {
@@ -70,7 +71,7 @@ func (c *RoutingManagerClient) AssociateRanToE2TInstance(e2tAddress string, ranN
        data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(e2tAddress, ranName)}
        url := c.config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
 
        data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(e2tAddress, ranName)}
        url := c.config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
 
-       return c.PostMessage(data, url)
+       return c.PostMessage(url, data)
 }
 
 func (c *RoutingManagerClient) DissociateRanE2TInstance(e2tAddress string, ranName string) error {
 }
 
 func (c *RoutingManagerClient) DissociateRanE2TInstance(e2tAddress string, ranName string) error {
@@ -78,7 +79,7 @@ func (c *RoutingManagerClient) DissociateRanE2TInstance(e2tAddress string, ranNa
        data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(e2tAddress, ranName)}
        url := c.config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
 
        data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(e2tAddress, ranName)}
        url := c.config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
 
-       return c.PostMessage(data, url)
+       return c.PostMessage(url, data)
 }
 
 func (c *RoutingManagerClient) DissociateAllRans(e2tAddresses []string) error {
 }
 
 func (c *RoutingManagerClient) DissociateAllRans(e2tAddresses []string) error {
@@ -86,15 +87,17 @@ func (c *RoutingManagerClient) DissociateAllRans(e2tAddresses []string) error {
        data := mapE2TAddressesToE2DataList(e2tAddresses)
        url := c.config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
 
        data := mapE2TAddressesToE2DataList(e2tAddresses)
        url := c.config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
 
-       return c.PostMessage(data, url)
+       return c.PostMessage(url, data)
 }
 
 }
 
-func (c *RoutingManagerClient) DeleteE2TInstance(e2tAddress string, ransToBeDissociated []string, e2tToRansAssociations map[string][]string) error {
-       //TODO - here should be the call to routing-manager...
-       return nil
+func (c *RoutingManagerClient) DeleteE2TInstance(e2tAddress string, ransTobeDissociated []string, e2tToRansAssociations map[string][]string) error {
+       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
+       data := models.NewRoutingManagerDeleteRequestModel(e2tAddress, ransTobeDissociated, e2tDataList)
+       url := c.config.RoutingManager.BaseUrl + DeleteE2TInstanceApiSuffix
+       return c.DeleteMessage(url, data)
 }
 
 }
 
-func (c *RoutingManagerClient) PostMessage(data interface{}, url string) error {
+func (c *RoutingManagerClient) sendMessage(method string, url string, data interface{}) error {
        marshaled, err := json.Marshal(data)
 
        if err != nil {
        marshaled, err := json.Marshal(data)
 
        if err != nil {
@@ -102,26 +105,40 @@ func (c *RoutingManagerClient) PostMessage(data interface{}, url string) error {
        }
 
        body := bytes.NewBuffer(marshaled)
        }
 
        body := bytes.NewBuffer(marshaled)
-       c.logger.Infof("[E2 Manager -> Routing Manager] #RoutingManagerClient.PostMessage - url: %s, request body: %+v", url, body)
+       c.logger.Infof("[E2 Manager -> Routing Manager] #RoutingManagerClient.sendMessage - %s url: %s, request body: %+v", method, url, body)
 
 
-       resp, err := c.httpClient.Post(url, "application/json", body)
+       var resp *http.Response
+
+       if method == http.MethodPost {
+               resp, err = c.httpClient.Post(url, "application/json", body)
+       } else if method == http.MethodDelete {
+               resp, err = c.httpClient.Delete(url, "application/json", body)
+       }
 
        if err != nil {
 
        if err != nil {
-               c.logger.Errorf("#RoutingManagerClient.PostMessage - failed sending request. error: %s", err)
+               c.logger.Errorf("#RoutingManagerClient.sendMessage - failed sending request. error: %s", err)
                return e2managererrors.NewRoutingManagerError()
        }
 
        defer resp.Body.Close()
 
        if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices {
                return e2managererrors.NewRoutingManagerError()
        }
 
        defer resp.Body.Close()
 
        if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices {
-               c.logger.Infof("[Routing Manager -> E2 Manager] #RoutingManagerClient.PostMessage - success. http status code: %d", resp.StatusCode)
+               c.logger.Infof("[Routing Manager -> E2 Manager] #RoutingManagerClient.sendMessage - success. http status code: %d", resp.StatusCode)
                return nil
        }
 
                return nil
        }
 
-       c.logger.Errorf("[Routing Manager -> E2 Manager] #RoutingManagerClient.PostMessage - failure. http status code: %d", resp.StatusCode)
+       c.logger.Errorf("[Routing Manager -> E2 Manager] #RoutingManagerClient.sendMessage - failure. http status code: %d", resp.StatusCode)
        return e2managererrors.NewRoutingManagerError()
 }
 
        return e2managererrors.NewRoutingManagerError()
 }
 
+func (c *RoutingManagerClient) DeleteMessage(url string, data interface{}) error {
+       return c.sendMessage(http.MethodDelete, url, data)
+}
+
+func (c *RoutingManagerClient) PostMessage(url string, data interface{}) error {
+       return c.sendMessage(http.MethodPost, url, data)
+}
+
 func mapE2TAddressesToE2DataList(e2tAddresses []string) models.RoutingManagerE2TDataList {
        e2tDataList := make(models.RoutingManagerE2TDataList, len(e2tAddresses))
 
 func mapE2TAddressesToE2DataList(e2tAddresses []string) models.RoutingManagerE2TDataList {
        e2tDataList := make(models.RoutingManagerE2TDataList, len(e2tAddresses))
 
@@ -131,3 +148,14 @@ func mapE2TAddressesToE2DataList(e2tAddresses []string) models.RoutingManagerE2T
 
        return e2tDataList
 }
 
        return e2tDataList
 }
+
+func convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations map[string][]string) models.RoutingManagerE2TDataList {
+       e2tDataList := make(models.RoutingManagerE2TDataList, len(e2tToRansAssociations))
+       i := 0
+       for k, v := range e2tToRansAssociations {
+               e2tDataList[i] = models.NewRoutingManagerE2TData(k, v...)
+               i++
+       }
+
+       return e2tDataList
+}
index 59e6125..2af458c 100644 (file)
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
-
 package clients
 
 import (
        "bytes"
        "e2mgr/configuration"
 package clients
 
 import (
        "bytes"
        "e2mgr/configuration"
+       "e2mgr/e2managererrors"
        "e2mgr/logger"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/logger"
        "e2mgr/mocks"
        "e2mgr/models"
@@ -35,9 +35,9 @@ import (
 )
 
 const E2TAddress = "10.0.2.15:38000"
 )
 
 const E2TAddress = "10.0.2.15:38000"
+const E2TAddress2 = "10.0.2.15:38001"
 const RanName = "test1"
 
 const RanName = "test1"
 
-
 func initRoutingManagerClientTest(t *testing.T) (*RoutingManagerClient, *mocks.HttpClientMock, *configuration.Configuration) {
        logger := initLog(t)
        config := &configuration.Configuration{}
 func initRoutingManagerClientTest(t *testing.T) (*RoutingManagerClient, *mocks.HttpClientMock, *configuration.Configuration) {
        logger := initLog(t)
        config := &configuration.Configuration{}
@@ -47,6 +47,56 @@ func initRoutingManagerClientTest(t *testing.T) (*RoutingManagerClient, *mocks.H
        return rmClient, httpClientMock, config
 }
 
        return rmClient, httpClientMock, config
 }
 
+func TestDeleteE2TInstanceSuccess(t *testing.T) {
+       rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
+
+       e2tToRansAssociations := map[string][]string{
+               E2TAddress2: {"test1"},
+       }
+       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},e2tDataList)
+       marshaled, _ := json.Marshal(data)
+       body := bytes.NewBuffer(marshaled)
+       url := config.RoutingManager.BaseUrl + "e2t"
+       respBody := ioutil.NopCloser(bytes.NewBufferString(""))
+       httpClientMock.On("Delete", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusOK, Body: respBody}, nil)
+       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"}, e2tToRansAssociations)
+       assert.Nil(t, err)
+}
+
+func TestDeleteE2TInstanceFailure(t *testing.T) {
+       rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
+
+       e2tToRansAssociations := map[string][]string{
+               E2TAddress2: {"test1"},
+       }
+       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},e2tDataList)
+       marshaled, _ := json.Marshal(data)
+       body := bytes.NewBuffer(marshaled)
+       url := config.RoutingManager.BaseUrl + "e2t"
+       respBody := ioutil.NopCloser(bytes.NewBufferString(""))
+       httpClientMock.On("Delete", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body: respBody}, nil)
+       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"}, e2tToRansAssociations)
+       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
+}
+
+func TestDeleteE2TInstanceDeleteFailure(t *testing.T) {
+       rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
+
+       e2tToRansAssociations := map[string][]string{
+               E2TAddress2: {"test1"},
+       }
+       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},e2tDataList)
+       marshaled, _ := json.Marshal(data)
+       body := bytes.NewBuffer(marshaled)
+       url := config.RoutingManager.BaseUrl + "e2t"
+       httpClientMock.On("Delete", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
+       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"}, e2tToRansAssociations)
+       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
+}
+
 func TestAddE2TInstanceSuccess(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
 func TestAddE2TInstanceSuccess(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
@@ -69,7 +119,7 @@ func TestAddE2TInstanceHttpPostFailure(t *testing.T) {
        url := config.RoutingManager.BaseUrl + "e2t"
        httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
        err := rmClient.AddE2TInstance(E2TAddress)
        url := config.RoutingManager.BaseUrl + "e2t"
        httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
        err := rmClient.AddE2TInstance(E2TAddress)
-       assert.NotNil(t, err)
+       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
 }
 
 func TestAddE2TInstanceFailure(t *testing.T) {
 }
 
 func TestAddE2TInstanceFailure(t *testing.T) {
@@ -80,7 +130,7 @@ func TestAddE2TInstanceFailure(t *testing.T) {
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + "e2t"
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + "e2t"
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
-       httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body:respBody}, nil)
+       httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body: respBody}, nil)
        err := rmClient.AddE2TInstance(E2TAddress)
        assert.NotNil(t, err)
 }
        err := rmClient.AddE2TInstance(E2TAddress)
        assert.NotNil(t, err)
 }
@@ -88,7 +138,7 @@ func TestAddE2TInstanceFailure(t *testing.T) {
 func TestAssociateRanToE2TInstance_Success(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
 func TestAssociateRanToE2TInstance_Success(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress,RanName)}
+       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
@@ -101,32 +151,32 @@ func TestAssociateRanToE2TInstance_Success(t *testing.T) {
 func TestAssociateRanToE2TInstance_RoutingManagerError(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
 func TestAssociateRanToE2TInstance_RoutingManagerError(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress,RanName)}
+       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
        httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
        err := rmClient.AssociateRanToE2TInstance(E2TAddress, RanName)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
        httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
        err := rmClient.AssociateRanToE2TInstance(E2TAddress, RanName)
-       assert.NotNil(t, err)
+       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
 }
 
 func TestAssociateRanToE2TInstance_RoutingManager_400(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
 }
 
 func TestAssociateRanToE2TInstance_RoutingManager_400(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress,RanName)}
+       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + AssociateRanToE2TInstanceApiSuffix
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
-       httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body:respBody}, nil)
+       httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body: respBody}, nil)
        err := rmClient.AssociateRanToE2TInstance(E2TAddress, RanName)
        err := rmClient.AssociateRanToE2TInstance(E2TAddress, RanName)
-       assert.NotNil(t, err)
+       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
 }
 
 func TestDissociateRanE2TInstance_Success(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
 }
 
 func TestDissociateRanE2TInstance_Success(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress,RanName)}
+       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
@@ -139,26 +189,26 @@ func TestDissociateRanE2TInstance_Success(t *testing.T) {
 func TestDissociateRanE2TInstance_RoutingManagerError(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
 func TestDissociateRanE2TInstance_RoutingManagerError(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress,RanName)}
+       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
        httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
        err := rmClient.DissociateRanE2TInstance(E2TAddress, RanName)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
        httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
        err := rmClient.DissociateRanE2TInstance(E2TAddress, RanName)
-       assert.NotNil(t, err)
+       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
 }
 
 func TestDissociateRanE2TInstance_RoutingManager_400(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
 }
 
 func TestDissociateRanE2TInstance_RoutingManager_400(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress,RanName)}
+       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + DissociateRanE2TInstanceApiSuffix
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
-       httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body:respBody}, nil)
+       httpClientMock.On("Post", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body: respBody}, nil)
        err := rmClient.DissociateRanE2TInstance(E2TAddress, RanName)
        err := rmClient.DissociateRanE2TInstance(E2TAddress, RanName)
-       assert.NotNil(t, err)
+       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
 }
 
 // TODO: extract to test_utils
 }
 
 // TODO: extract to test_utils
index e8090f1..937330a 100644 (file)
@@ -284,36 +284,36 @@ func TestDissociateRanRoutingManagerError(t *testing.T) {
        httpClientMock.AssertExpectations(t)
 }
 
        httpClientMock.AssertExpectations(t)
 }
 
-func TestRemoveE2tInstanceSuccess(t *testing.T) {
-       manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-       //mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
-
-       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       e2tAddresses := []string{E2TAddress, E2TAddress2}
-       readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       e2tAddressesNew := []string{E2TAddress2}
-       writerMock.On("SaveE2TAddresses", e2tAddressesNew).Return(nil)
-
-       err := manager.RemoveE2tInstance(E2TAddress, []string{""}, make(map[string][]string))
-
-       assert.Nil(t, err)
-       readerMock.AssertExpectations(t)
-       writerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-}
-
-func TestRemoveE2tInstanceFailureInE2TInstanceManager(t *testing.T) {
-       manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-       //mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
-
-       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       var e2tAddresses []string
-       readerMock.On("GetE2TAddresses").Return(e2tAddresses, e2managererrors.NewRnibDbError())
-
-       err := manager.RemoveE2tInstance(E2TAddress, []string{""}, make(map[string][]string))
-
-       assert.NotNil(t, err)
-       readerMock.AssertExpectations(t)
-       writerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-}
\ No newline at end of file
+//func TestRemoveE2tInstanceSuccess(t *testing.T) {
+//     manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
+//     //mockHttpClient(httpClientMock, clients.DeleteE2TInstanceApiSuffix, true)
+//
+//     writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
+//     e2tAddresses := []string{E2TAddress, E2TAddress2}
+//     readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
+//     e2tAddressesNew := []string{E2TAddress2}
+//     writerMock.On("SaveE2TAddresses", e2tAddressesNew).Return(nil)
+//
+//     err := manager.RemoveE2tInstance(E2TAddress, []string{""}, make(map[string][]string))
+//
+//     assert.Nil(t, err)
+//     readerMock.AssertExpectations(t)
+//     writerMock.AssertExpectations(t)
+//     httpClientMock.AssertExpectations(t)
+//}
+
+//func TestRemoveE2tInstanceFailureInE2TInstanceManager(t *testing.T) {
+//     manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
+//     //mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
+//
+//     writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
+//     var e2tAddresses []string
+//     readerMock.On("GetE2TAddresses").Return(e2tAddresses, e2managererrors.NewRnibDbError())
+//
+//     err := manager.RemoveE2tInstance(E2TAddress, []string{""}, make(map[string][]string))
+//
+//     assert.NotNil(t, err)
+//     readerMock.AssertExpectations(t)
+//     writerMock.AssertExpectations(t)
+//     httpClientMock.AssertExpectations(t)
+//}
\ No newline at end of file
index 1294c48..7c5dcad 100644 (file)
@@ -17,7 +17,6 @@
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
-
 package mocks
 
 import (
 package mocks
 
 import (
@@ -31,11 +30,11 @@ type HttpClientMock struct {
 }
 
 func (c *HttpClientMock) Post(url, contentType string, body io.Reader) (resp *http.Response, err error) {
 }
 
 func (c *HttpClientMock) Post(url, contentType string, body io.Reader) (resp *http.Response, err error) {
-               args := c.Called(url, contentType, body)
-               return args.Get(0).(*http.Response), args.Error(1)
+       args := c.Called(url, contentType, body)
+       return args.Get(0).(*http.Response), args.Error(1)
 }
 
 }
 
-//func (c *HttpClientMock) Do(req *http.Request) (*http.Response, error) {
-//     args := c.Called(req)
-//     return args.Get(0).(*http.Response), args.Error(1)
-//}
+func (c *HttpClientMock) Delete(url, contentType string, body io.Reader) (resp *http.Response, err error) {
+       args := c.Called(url, contentType, body)
+       return args.Get(0).(*http.Response), args.Error(1)
+}
diff --git a/E2Manager/models/routing_manager_delete_request_model.go b/E2Manager/models/routing_manager_delete_request_model.go
new file mode 100644 (file)
index 0000000..e9d9763
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// 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
+
+type RoutingManagerDeleteRequestModel struct {
+       E2TAddress                 string                    `json:"E2TAddress"`
+       RanNameListToBeDissociated []string                  `json:"ranNamelistTobeDissociated,omitempty"`
+       RanAssocList               RoutingManagerE2TDataList `json:"ranAssocList,omitempty"`
+}
+
+func NewRoutingManagerDeleteRequestModel(e2tAddress string, ranNameListToBeDissociated []string, ranAssocList RoutingManagerE2TDataList) *RoutingManagerDeleteRequestModel {
+       return &RoutingManagerDeleteRequestModel{
+               E2TAddress:                 e2tAddress,
+               RanNameListToBeDissociated: ranNameListToBeDissociated,
+               RanAssocList:               ranAssocList,
+       }
+}