| /* |
| * Copyright (c) 2019 AT&T Intellectual Property. |
| * Copyright (c) 2018-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 main |
| |
| import ( |
| "fmt" |
| "net" |
| "net/http" |
| "net/url" |
| "os" |
| "sync" |
| "testing" |
| "time" |
| |
| "github.com/stretchr/testify/suite" |
| ) |
| |
| type do func(w http.ResponseWriter) |
| |
| type QueryXAppsConfigTestSuite struct { |
| suite.Suite |
| listener net.Listener |
| xAppMgrFunc do |
| mu sync.Mutex |
| } |
| |
| // suite setup creates the HTTP server |
| func (suite *QueryXAppsConfigTestSuite) SetupSuite() { |
| os.Unsetenv("http_proxy") |
| os.Unsetenv("HTTP_PROXY") |
| var err error |
| suite.listener, err = net.Listen("tcp", ":0") |
| suite.Nil(err) |
| go runXAppMgr(suite.listener, "/test_url/", suite) |
| } |
| |
| func runXAppMgr(listener net.Listener, url string, suite *QueryXAppsConfigTestSuite) { |
| |
| http.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) { |
| switch r.Method { |
| case "GET": |
| suite.mu.Lock() |
| suite.xAppMgrFunc(w) |
| suite.mu.Unlock() |
| } |
| }) |
| http.Serve(listener, nil) |
| } |
| |
| func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigFailsWithTimeout() { |
| doSleep := func(w http.ResponseWriter) { |
| time.Sleep(time.Second * 2) |
| } |
| suite.xAppMgrFunc = doSleep |
| |
| data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1) |
| suite.Equal([]byte("{}"), data) |
| suite.NotNil(err) |
| e, ok := err.(*url.Error) |
| suite.Equal(ok, true) |
| suite.Equal(e.Timeout(), true) |
| } |
| |
| func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigFailsWithAnErrorReply() { |
| doReplyWithErr := func(w http.ResponseWriter) { |
| http.Error(w, "405 method not allowed", http.StatusMethodNotAllowed) |
| } |
| suite.xAppMgrFunc = doReplyWithErr |
| |
| data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1) |
| suite.Equal([]byte("{}"), data) |
| suite.NotNil(err) |
| suite.Equal("405 Method Not Allowed", err.Error()) |
| } |
| |
| func (suite *QueryXAppsConfigTestSuite) TestQueryXAppsConfigOk() { |
| doReply := func(w http.ResponseWriter) { |
| fmt.Fprintf(w, "reply message") |
| } |
| suite.xAppMgrFunc = doReply |
| |
| data, err := queryXAppsConfig("http://"+suite.listener.Addr().String()+"/test_url/", 1) |
| suite.NotNil(data) |
| suite.Nil(err) |
| suite.Equal(data, []byte("reply message")) |
| } |
| |
| func TestQueryXAppsConfigTestSuite(t *testing.T) { |
| suite.Run(t, new(QueryXAppsConfigTestSuite)) |
| } |