8cc3ad49f8ef6ef20eec0cb8536a4681b165b83c
[ric-plt/vespamgr.git] / cmd / vesmgr / vesmgr_queryxappconfig_test.go
1 /*
2  *  Copyright (c) 2019 AT&T Intellectual Property.
3  *  Copyright (c) 2018-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  */
21
22 package main
23
24 import (
25         "fmt"
26         "net"
27         "net/http"
28         "net/url"
29         "os"
30         "testing"
31         "time"
32
33         "github.com/stretchr/testify/suite"
34 )
35
36 type do func(w http.ResponseWriter)
37
38 type QueryXAppsConfigTestSuite struct {
39         suite.Suite
40         listener    net.Listener
41         xAppMgrFunc do
42 }
43
44 // suite setup creates the HTTP server
45 func (suite *QueryXAppsConfigTestSuite) SetupSuite() {
46         os.Unsetenv("http_proxy")
47         os.Unsetenv("HTTP_PROXY")
48         var err error
49         suite.listener, err = net.Listen("tcp", ":0")
50         suite.Nil(err)
51         go runXAppMgr(suite.listener, "/test_url/", suite)
52 }
53
54 func runXAppMgr(listener net.Listener, url string, suite *QueryXAppsConfigTestSuite) {
55
56         http.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
57                 switch r.Method {
58                 case "GET":
59                         suite.xAppMgrFunc(w)
60                 }
61         })
62         http.Serve(listener, nil)
63 }
64
65 func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigFailsWithTimeout() {
66         doSleep := func(w http.ResponseWriter) {
67                 time.Sleep(time.Second * 2)
68         }
69         suite.xAppMgrFunc = doSleep
70
71         data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1)
72         suite.Equal([]byte("{}"), data)
73         suite.NotNil(err)
74         e, ok := err.(*url.Error)
75         suite.Equal(ok, true)
76         suite.Equal(e.Timeout(), true)
77 }
78
79 func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigFailsWithAnErrorReply() {
80         doReplyWithErr := func(w http.ResponseWriter) {
81                 http.Error(w, "405 method not allowed", http.StatusMethodNotAllowed)
82         }
83         suite.xAppMgrFunc = doReplyWithErr
84
85         data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1)
86         suite.Equal([]byte("{}"), data)
87         suite.NotNil(err)
88         suite.Equal("405 Method Not Allowed", err.Error())
89 }
90
91 func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigOk() {
92         doReply := func(w http.ResponseWriter) {
93                 fmt.Fprintf(w, "reply message")
94         }
95         suite.xAppMgrFunc = doReply
96
97         data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1)
98         suite.NotNil(data)
99         suite.Nil(err)
100         suite.Equal(data, []byte("reply message"))
101 }
102
103 func TestQueryXAppsConfigTestSuite(t *testing.T) {
104         suite.Run(t, new(QueryXAppsConfigTestSuite))
105 }