blob: 8e2dfcc735413b235a5de45d9284adcd386755fe [file] [log] [blame]
//==================================================================================
// Copyright (c) 2022 Samsung
//
// 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 resthooks
import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"net"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"strings"
"testing"
ch "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/charts"
"gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/health"
"gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/models"
"gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/onboard"
"gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/charts"
h "gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/restapi/operations/health"
"gerrit.o-ran-sc.org/r/ric-plt/ricdms/pkg/ricdms"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
var rh *Resthook
var successStatus *models.Status
func TestMain(m *testing.M) {
successStatus = &models.Status{
Status: &health.HEALTHY,
}
ricdms.Init()
rh = &Resthook{
HealthChecker: HealthCheckerMock{},
Onboarder: onboard.NewOnboarder(),
ChartMgr: ch.NewChartmgr(),
}
code := m.Run()
os.Exit(code)
}
func TestHealth(t *testing.T) {
resp := rh.GetDMSHealth()
switch resp.(type) {
case *h.GetHealthCheckOK:
assert.Equal(t, successStatus, resp.(*h.GetHealthCheckOK).Payload)
case *h.GetHealthCheckInternalServerError:
assert.Fail(t, "Internal Server generated: %v", resp)
default:
assert.Fail(t, "Unknown type of resp : %v", resp)
}
}
func TestOnboard(t *testing.T) {
xApp := &models.Descriptor{
Config: "SAMPLE_CONFIGURATION",
Schema: "SAMPLE_SCHEMA",
}
svr := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var d map[string]interface{}
reqBytes, _ := ioutil.ReadAll(r.Body)
defer r.Body.Close()
err := json.Unmarshal(reqBytes, &d)
ricdms.Logger.Debug("after unmarshal : %+v body: %+v", d, string(reqBytes))
if err != nil {
assert.Fail(t, "Not able to parse the request body")
}
assert.Equal(t, xApp.Config, d["config-file.json"])
assert.Equal(t, xApp.Schema, d["controls-schema.json"])
fmt.Fprintf(w, "SAMPLE_RESPONSE")
}))
svr.Listener.Close()
svr.Listener, _ = net.Listen("tcp", ricdms.Config.MockServer)
svr.Start()
defer svr.Close()
resp := rh.OnBoard(xApp)
assert.NotEqual(t, nil, resp)
}
func TestGetCharts(t *testing.T) {
svr := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ricdms.Logger.Debug("Mock server running")
fmt.Fprintf(w, "SAMPLE_RESPONSE")
}))
svr.Listener.Close()
svr.Listener, _ = net.Listen("tcp", ricdms.Config.MockServer)
svr.Start()
defer svr.Close()
resp := rh.GetCharts()
assert.NotEqual(t, nil, resp)
successResp := resp.(*charts.GetChartsListOK)
assert.Equal(t, "SAMPLE_RESPONSE", successResp.Payload)
}
func TestDownloadChart(t *testing.T) {
svr := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ricdms.Logger.Debug("request received by mock to download chart")
reader := strings.NewReader("SAMPLE_RESPONSE")
data, _ := io.ReadAll(reader)
ricdms.Logger.Debug("writing : %+v", data)
w.Write(data)
}))
svr.Listener.Close()
svr.Listener, _ = net.Listen("tcp", ricdms.Config.MockServer)
svr.Start()
defer svr.Close()
resp := rh.DownloadChart("CHART_NAME", "VERSION")
assert.IsType(t, &charts.DownloadHelmChartOK{}, resp, "response did not match type")
}
func TestGetChartsByName(t *testing.T) {
svr := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ricdms.Logger.Debug("request received by mock to get chart by name")
path, _ := filepath.Abs("./mocks/resp-get-charts-by-name.json")
file, err := os.Open(path)
if err != nil {
ricdms.Logger.Error("error in reading file: %v", err)
}
jsonData, err := io.ReadAll(file)
if err != nil {
ricdms.Logger.Error("Error in rading file: %v", err)
}
w.Write(jsonData)
}))
svr.Listener.Close()
svr.Listener, _ = net.Listen("tcp", ricdms.Config.MockServer)
svr.Start()
defer svr.Close()
resp := rh.GetChartsByName("TEST_NAME")
ricdms.Logger.Debug("resp Data: %s", resp.(*charts.GetChartOK).Payload...)
assert.IsType(t, &charts.GetChartOK{}, resp, "response did not match type")
}
func TestGetChartsByNameAndVersion(t *testing.T) {
svr := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ricdms.Logger.Debug("request received by mock to get chart by name and version")
path, _ := filepath.Abs("./mocks/resp-get-charts-by-name-and-ver.json")
file, err := os.Open(path)
if err != nil {
ricdms.Logger.Error("error in reading file: %v", err)
}
jsonData, err := io.ReadAll(file)
if err != nil {
ricdms.Logger.Error("Error in rading file: %v", err)
}
w.Write(jsonData)
}))
svr.Listener.Close()
svr.Listener, _ = net.Listen("tcp", ricdms.Config.MockServer)
svr.Start()
defer svr.Close()
resp := rh.GetChartByNameAndVersion("Test", "1.0.0")
ricdms.Logger.Debug("resp data: %s", resp.(*charts.GetChartsFetcherOK).Payload)
assert.IsType(t, &charts.GetChartsFetcherOK{}, resp, "response did not match type")
}
type HealthCheckerMock struct {
mock.Mock
}
func (h HealthCheckerMock) GetStatus() *models.Status {
return successStatus
}