blob: 065eddbb43a7e3bae0edd5c536bd2e7969dc1897 [file] [log] [blame]
/*
==================================================================================
Copyright (c) 2019 AT&T Intellectual Property.
Copyright (c) 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.
==================================================================================
*/
package main
import (
"net/http"
"testing"
"bytes"
"encoding/json"
"net/http/httptest"
"net"
"log"
"fmt"
)
var resp SubscriptionResp
// Test cases
func TestNoSubscriptionsFound(t *testing.T) {
req, _ := http.NewRequest("GET", "/ric/v1/subscriptions", nil)
response := executeRequest(req)
checkResponseCode(t, http.StatusOK, response.Code)
if body := response.Body.String(); body != "[]" {
t.Errorf("handler returned unexpected body: got %v want []", body)
}
}
func TestAddNewSubscription(t *testing.T) {
payload := []byte(`{"maxRetries": 3, "retryTimer": 5, "eventType":"Created", "targetUrl": "http://localhost:8087/xapps_handler"}`)
req, _ := http.NewRequest("POST", "/ric/v1/subscriptions", bytes.NewBuffer(payload))
response := executeRequest(req)
checkResponseCode(t, http.StatusCreated, response.Code)
json.NewDecoder(response.Body).Decode(&resp)
if resp.Version != 0 {
t.Errorf("Creating new subscription failed: %v", resp)
}
}
func TestGettAllSubscriptions(t *testing.T) {
req, _ := http.NewRequest("GET", "/ric/v1/subscriptions", nil)
response := executeRequest(req)
checkResponseCode(t, http.StatusOK, response.Code)
var subscriptions []SubscriptionReq
json.NewDecoder(response.Body).Decode(&subscriptions)
verifySubscription(t, subscriptions[0], "http://localhost:8087/xapps_handler", 3, 5, "Created")
}
func TestGetSingleSubscription(t *testing.T) {
req, _ := http.NewRequest("GET", "/ric/v1/subscriptions/" + resp.Id, nil)
response := executeRequest(req)
checkResponseCode(t, http.StatusOK, response.Code)
var subscription SubscriptionReq
json.NewDecoder(response.Body).Decode(&subscription)
verifySubscription(t, subscription, "http://localhost:8087/xapps_handler", 3, 5, "Created")
}
func TestUpdateSingleSubscription(t *testing.T) {
payload := []byte(`{"maxRetries": 11, "retryTimer": 22, "eventType":"Deleted", "targetUrl": "http://localhost:8088/xapps_handler"}`)
req, _ := http.NewRequest("PUT", "/ric/v1/subscriptions/" + resp.Id, bytes.NewBuffer(payload))
response := executeRequest(req)
checkResponseCode(t, http.StatusOK, response.Code)
var res SubscriptionResp
json.NewDecoder(response.Body).Decode(&res)
if res.Version != 0 {
t.Errorf("handler returned unexpected data: %v", resp)
}
// Check that the subscription is updated properly
req, _ = http.NewRequest("GET", "/ric/v1/subscriptions/" + resp.Id, nil)
response = executeRequest(req)
checkResponseCode(t, http.StatusOK, response.Code)
var subscription SubscriptionReq
json.NewDecoder(response.Body).Decode(&subscription)
verifySubscription(t, subscription, "http://localhost:8088/xapps_handler", 11, 22, "Deleted")
}
func TestDeleteSingleSubscription(t *testing.T) {
req, _ := http.NewRequest("DELETE", "/ric/v1/subscriptions/" + resp.Id, nil)
response := executeRequest(req)
checkResponseCode(t, http.StatusNoContent, response.Code)
// Check that the subscription is removed properly
req, _ = http.NewRequest("GET", "/ric/v1/subscriptions/" + resp.Id, nil)
response = executeRequest(req)
checkResponseCode(t, http.StatusNotFound, response.Code)
}
func TestDeleteSingleSubscriptionFails(t *testing.T) {
req, _ := http.NewRequest("DELETE", "/ric/v1/subscriptions/invalidSubscriptionId" , nil)
response := executeRequest(req)
checkResponseCode(t, http.StatusNotFound, response.Code)
}
func TestAddSingleSubscriptionFailsBodyEmpty(t *testing.T) {
req, _ := http.NewRequest("POST", "/ric/v1/subscriptions/" + resp.Id , nil)
response := executeRequest(req)
checkResponseCode(t, http.StatusMethodNotAllowed, response.Code)
}
func TestUpdateeSingleSubscriptionFailsBodyEmpty(t *testing.T) {
req, _ := http.NewRequest("PUT", "/ric/v1/subscriptions/" + resp.Id , nil)
response := executeRequest(req)
checkResponseCode(t, http.StatusMethodNotAllowed, response.Code)
}
func TestUpdateeSingleSubscriptionFailsInvalidId(t *testing.T) {
payload := []byte(`{"maxRetries": 11, "retryTimer": 22, "eventType":"Deleted", "targetUrl": "http://localhost:8088/xapps_handler"}`)
req, _ := http.NewRequest("PUT", "/ric/v1/subscriptions/invalidSubscriptionId" + resp.Id, bytes.NewBuffer(payload))
response := executeRequest(req)
checkResponseCode(t, http.StatusNotFound, response.Code)
}
func TestPublishXappAction(t *testing.T) {
payload := []byte(`{"maxRetries": 3, "retryTimer": 5, "eventType":"Created", "targetUrl": "http://127.0.0.1:8888"}`)
req, _ := http.NewRequest("POST", "/ric/v1/subscriptions", bytes.NewBuffer(payload))
response := executeRequest(req)
checkResponseCode(t, http.StatusCreated, response.Code)
// Create a RestApi server (simulating RM)
ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, XM!")
}))
l, err := net.Listen("tcp", "127.0.0.1:8888")
if err != nil {
log.Fatal(err)
}
ts.Listener.Close()
ts.Listener = l
ts.Start()
defer ts.Close()
x.sd.Publish(xapp, EventType("created"))
}
func verifySubscription(t *testing.T, subscription SubscriptionReq, url string, retries int, timer int, event string) {
if subscription.TargetUrl != url {
t.Errorf("Unexpected url: got=%s expected=%s", subscription.TargetUrl, url)
}
if subscription.MaxRetries != retries {
t.Errorf("Unexpected retries: got=%d expected=%d", subscription.MaxRetries, retries)
}
if subscription.RetryTimer != timer {
t.Errorf("Unexpected timer: got=%d expected=%d", subscription.RetryTimer, timer)
}
if subscription.EventType != event {
t.Errorf("Unexpected event type: got=%s expected=%s", subscription.EventType, event)
}
}