blob: 8cc3ad49f8ef6ef20eec0cb8536a4681b165b83c [file] [log] [blame]
Katri Turunen412df962019-09-16 08:48:18 +03001/*
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.
Roni Riska6ffba082019-11-27 10:59:54 +020016 *
17 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 * platform project (RICP).
19 *
Katri Turunen412df962019-09-16 08:48:18 +030020 */
21
22package main
23
24import (
25 "fmt"
Katri Turunen412df962019-09-16 08:48:18 +030026 "net"
27 "net/http"
28 "net/url"
29 "os"
30 "testing"
31 "time"
Roni Riskafc77ebb2019-09-26 08:20:44 +030032
33 "github.com/stretchr/testify/suite"
Katri Turunen412df962019-09-16 08:48:18 +030034)
35
36type do func(w http.ResponseWriter)
37
Roni Riskafc77ebb2019-09-26 08:20:44 +030038type QueryXAppsConfigTestSuite struct {
Katri Turunen412df962019-09-16 08:48:18 +030039 suite.Suite
40 listener net.Listener
41 xAppMgrFunc do
42}
43
44// suite setup creates the HTTP server
Roni Riskafc77ebb2019-09-26 08:20:44 +030045func (suite *QueryXAppsConfigTestSuite) SetupSuite() {
Katri Turunen412df962019-09-16 08:48:18 +030046 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
Roni Riskafc77ebb2019-09-26 08:20:44 +030054func runXAppMgr(listener net.Listener, url string, suite *QueryXAppsConfigTestSuite) {
Katri Turunen412df962019-09-16 08:48:18 +030055
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
Roni Riskafc77ebb2019-09-26 08:20:44 +030065func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigFailsWithTimeout() {
66 doSleep := func(w http.ResponseWriter) {
Katri Turunen412df962019-09-16 08:48:18 +030067 time.Sleep(time.Second * 2)
68 }
Roni Riskafc77ebb2019-09-26 08:20:44 +030069 suite.xAppMgrFunc = doSleep
Katri Turunen412df962019-09-16 08:48:18 +030070
Roni Riskafc77ebb2019-09-26 08:20:44 +030071 data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1)
72 suite.Equal([]byte("{}"), data)
Katri Turunen412df962019-09-16 08:48:18 +030073 suite.NotNil(err)
74 e, ok := err.(*url.Error)
75 suite.Equal(ok, true)
76 suite.Equal(e.Timeout(), true)
77}
78
Roni Riskafc77ebb2019-09-26 08:20:44 +030079func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigFailsWithAnErrorReply() {
80 doReplyWithErr := func(w http.ResponseWriter) {
Katri Turunen412df962019-09-16 08:48:18 +030081 http.Error(w, "405 method not allowed", http.StatusMethodNotAllowed)
82 }
Roni Riskafc77ebb2019-09-26 08:20:44 +030083 suite.xAppMgrFunc = doReplyWithErr
Katri Turunen412df962019-09-16 08:48:18 +030084
Roni Riskafc77ebb2019-09-26 08:20:44 +030085 data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1)
86 suite.Equal([]byte("{}"), data)
Katri Turunen412df962019-09-16 08:48:18 +030087 suite.NotNil(err)
88 suite.Equal("405 Method Not Allowed", err.Error())
89}
90
Roni Riskafc77ebb2019-09-26 08:20:44 +030091func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigOk() {
92 doReply := func(w http.ResponseWriter) {
Katri Turunen412df962019-09-16 08:48:18 +030093 fmt.Fprintf(w, "reply message")
94 }
Roni Riskafc77ebb2019-09-26 08:20:44 +030095 suite.xAppMgrFunc = doReply
Katri Turunen412df962019-09-16 08:48:18 +030096
Roni Riskafc77ebb2019-09-26 08:20:44 +030097 data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1)
Katri Turunen412df962019-09-16 08:48:18 +030098 suite.NotNil(data)
99 suite.Nil(err)
100 suite.Equal(data, []byte("reply message"))
101}
102
Roni Riskafc77ebb2019-09-26 08:20:44 +0300103func TestQueryXAppsConfigTestSuite(t *testing.T) {
104 suite.Run(t, new(QueryXAppsConfigTestSuite))
Katri Turunen412df962019-09-16 08:48:18 +0300105}