[RICPLT-2727] Update RoutingMangaerClient UTs + others....
[ric-plt/e2mgr.git] / E2Manager / clients / routing_manager_client.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 clients
21
22 import (
23         "bytes"
24         "e2mgr/configuration"
25         "e2mgr/e2managererrors"
26         "e2mgr/logger"
27         "e2mgr/models"
28         "encoding/json"
29         "fmt"
30         "net/http"
31 )
32
33 const (
34         AddE2TInstanceApiSuffix = "e2t"
35 )
36
37 type RoutingManagerClient struct {
38         logger     *logger.Logger
39         config     *configuration.Configuration
40         httpClient HttpClient
41 }
42
43 type IRoutingManagerClient interface {
44         AddE2TInstance(e2tAddress string) error
45 }
46
47 func NewRoutingManagerClient(logger *logger.Logger, config *configuration.Configuration, httpClient HttpClient) *RoutingManagerClient {
48         return &RoutingManagerClient{
49                 logger:     logger,
50                 config:     config,
51                 httpClient: httpClient,
52         }
53 }
54
55 func (c *RoutingManagerClient) AddE2TInstance(e2tAddress string) error {
56         data := models.NewRoutingManagerE2TData(e2tAddress)
57
58         marshaled, err := json.Marshal(data)
59
60         if err != nil {
61                 return e2managererrors.NewRoutingManagerError(err)
62         }
63
64         body := bytes.NewBuffer(marshaled)
65         c.logger.Infof("[E2M -> Routing Manager] #RoutingManagerClient.AddE2TInstance - request body: %+v", body)
66
67         url := c.config.RoutingManager.BaseUrl + AddE2TInstanceApiSuffix
68         resp, err := c.httpClient.Post(url, "application/json", body)
69
70         if err != nil {
71                 c.logger.Errorf("#RoutingManagerClient.AddE2TInstance - failed sending request. error: %s", err)
72                 return e2managererrors.NewRoutingManagerError(err)
73         }
74
75         defer resp.Body.Close()
76
77         if resp.StatusCode == http.StatusCreated {
78                 c.logger.Infof("[Routing Manager -> E2M] #RoutingManagerClient.AddE2TInstance - success. http status code: %d", resp.StatusCode)
79                 return nil
80         }
81
82         c.logger.Errorf("[Routing Manager -> E2M] #RoutingManagerClient.AddE2TInstance - failure. http status code: %d", resp.StatusCode)
83         return e2managererrors.NewRoutingManagerError(fmt.Errorf("invalid data"))
84 }