2 * Copyright (c) 2019 AT&T Intellectual Property.
3 * Copyright (c) 2018-2019 Nokia.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
24 "github.com/stretchr/testify/suite"
31 type AppmgrHttpServerTestSuite struct {
33 subscriptions chan subsChannel
38 func (suite *AppmgrHttpServerTestSuite) SetupSuite() {
39 vesmgr.appmgrSubsId = string("")
40 vesmgr.myIPAddress, _ = getMyIP()
41 suite.xappNotifUrl = "http://" + vesmgr.myIPAddress + ":" + vesmgrXappNotifPort + vesmgrXappNotifPath
42 suite.subscriptions = make(chan subsChannel)
46 func (suite *AppmgrHttpServerTestSuite) SetupTest() {
47 suite.subscriptions = make(chan subsChannel)
51 func (suite *AppmgrHttpServerTestSuite) TearDownTest() {
52 vesmgr.appmgrSubsId = string("")
55 func (suite *AppmgrHttpServerTestSuite) TestSubscribexAppNotifications() {
56 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
57 body, _ := ioutil.ReadAll(req.Body)
58 var result map[string]interface{}
59 err := json.Unmarshal([]byte(body), &result)
61 suite.Equal(5, int(result["maxRetries"].(float64)))
62 suite.Equal(5, int(result["retryTimer"].(float64)))
63 suite.Equal("all", result["eventType"].(string))
64 suite.Equal("POST", req.Method)
65 res.Header().Add("Content-Type", "application/json")
66 res.WriteHeader(http.StatusCreated)
67 res.Write([]byte(`{"id":"deadbeef1234567890", "version":0, "eventType":"all"}`))
69 defer testServer.Close()
71 go subscribexAppNotifications(suite.xappNotifUrl, suite.subscriptions, 1, testServer.URL)
72 isSubscribed := <-suite.subscriptions
73 suite.Nil(isSubscribed.err)
74 suite.Equal("deadbeef1234567890", vesmgr.appmgrSubsId)
77 func (suite *AppmgrHttpServerTestSuite) TestSubscribexAppNotificationsWrongStatus() {
78 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
79 res.Header().Add("Content-Type", "application/json")
80 res.WriteHeader(http.StatusUnauthorized)
81 res.Write([]byte(`{"id":"deadbeef1234567890", "version":0, "eventType":"all"}`))
83 defer testServer.Close()
85 requestBody := []byte(fmt.Sprintf(`{"maxRetries": 5, "retryTimer": 5, "eventType":"all", "targetUrl": "%v"}`, suite.xappNotifUrl))
86 req, _ := http.NewRequest("POST", testServer.URL, bytes.NewBuffer(requestBody))
87 req.Header.Set("Content-Type", "application/json")
88 client := &http.Client{}
90 err := subscribexAppNotificationsClientDo(req, client)
91 suite.Equal(errWrongStatusCode, err)
92 // after failed POST vesmgr.appmgrSubsId holds an initial values
93 suite.Equal("", vesmgr.appmgrSubsId)
96 func (suite *AppmgrHttpServerTestSuite) TestSubscribexAppNotificationsWrongUrl() {
97 // use fake appmgrUrl that is not served in unit test
98 appmgrUrl := "/I_do_not_exist/"
99 requestBody := []byte(fmt.Sprintf(`{"maxRetries": 5, "retryTimer": 5, "eventType":"all", "targetUrl": "%v"}`, suite.xappNotifUrl))
100 req, _ := http.NewRequest("POST", appmgrUrl, bytes.NewBuffer(requestBody))
101 req.Header.Set("Content-Type", "application/json")
102 client := &http.Client{}
104 err := subscribexAppNotificationsClientDo(req, client)
105 suite.Equal(errPostingFailed, err)
106 // after failed POST vesmgr.appmgrSubsId holds an initial values
107 suite.Equal("", vesmgr.appmgrSubsId)
110 func (suite *AppmgrHttpServerTestSuite) TestSubscribexAppNotificationsReadBodyFails() {
111 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
112 res.Header().Set("Content-Length", "1")
113 res.Header().Add("Content-Type", "application/json")
114 res.WriteHeader(http.StatusCreated)
116 defer testServer.Close()
118 go subscribexAppNotifications(suite.xappNotifUrl, suite.subscriptions, 1, testServer.URL)
119 isSubscribed := <-suite.subscriptions
120 suite.Equal("unexpected EOF", isSubscribed.err.Error())
121 suite.Equal("", vesmgr.appmgrSubsId)
124 func (suite *AppmgrHttpServerTestSuite) TestSubscribexAppNotificationsUnMarshalFails() {
125 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
126 res.Header().Add("Content-Type", "application/json")
127 res.WriteHeader(http.StatusCreated)
128 res.Write([]byte(`{""dump for UT": make(chan int),"}`))
130 defer testServer.Close()
132 go subscribexAppNotifications(suite.xappNotifUrl, suite.subscriptions, 1, testServer.URL)
133 isSubscribed := <-suite.subscriptions
134 suite.Equal("invalid character 'd' after object key", isSubscribed.err.Error())
135 suite.Equal("", vesmgr.appmgrSubsId)
138 func TestAppmgrHttpServerTestSuite(t *testing.T) {
139 suite.Run(t, new(AppmgrHttpServerTestSuite))