--- /dev/null
+// -
+// ========================LICENSE_START=================================
+// O-RAN-SC
+// %%
+// Copyright (C) 2023-2024: OpenInfra Foundation Europe
+// %%
+// 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.
+// ========================LICENSE_END===================================
+//
+
+package main
+
+import (
+ "net/http"
+ "os"
+ "testing"
+
+ "github.com/deepmap/oapi-codegen/pkg/testutil"
+ "github.com/getkin/kin-openapi/openapi3"
+ "github.com/labstack/echo/v4"
+ "github.com/stretchr/testify/assert"
+ log "github.com/sirupsen/logrus"
+
+ "oransc.org/nonrtric/servicemanager/internal/common29122"
+ "oransc.org/nonrtric/servicemanager/internal/envreader"
+)
+
+var e *echo.Echo
+var myPorts map [string]int
+
+func TestMain(m *testing.M) {
+ // Init code to run before tests
+ myEnv, myPorts, err := envreader.ReadDotEnv()
+ if err != nil {
+ log.Fatal("error loading environment file")
+ return
+ }
+
+ e, err = getEcho(myEnv, myPorts)
+ if err != nil {
+ log.Fatal("getEcho fatal error")
+ return
+ }
+
+ // Run tests
+ exitVal := m.Run()
+
+ // Finalization code to run after tests
+
+ // Exit with exit value from tests
+ os.Exit(exitVal)
+}
+
+
+func Test_routing(t *testing.T) {
+ type args struct {
+ url string
+ returnStatus int
+ method string
+ }
+ tests := []struct {
+ name string
+ args args
+ }{
+ {
+ name: "Default path",
+ args: args{
+ url: "/",
+ returnStatus: http.StatusOK,
+ method: "GET",
+ },
+ },
+ {
+ name: "Provider path",
+ args: args{
+ url: "/api-provider-management/v1/registrations/provider",
+ returnStatus: http.StatusNoContent,
+ method: "DELETE",
+ },
+ },
+ {
+ name: "Publish path",
+ args: args{
+ url: "/published-apis/v1/apfId/service-apis/serviceId",
+ returnStatus: http.StatusNotFound,
+ method: "GET",
+ },
+ },
+ {
+ name: "Discover path",
+ args: args{
+ url: "/service-apis/v1/allServiceAPIs?api-invoker-id=api_invoker_id",
+ returnStatus: http.StatusNotFound,
+ method: "GET",
+ },
+ },
+ {
+ name: "Invoker path",
+ args: args{
+ url: "/api-invoker-management/v1/onboardedInvokers/invoker",
+ returnStatus: http.StatusNoContent,
+ method: "DELETE",
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ var result *testutil.CompletedRequest
+ if tt.args.method == "GET" {
+ result = testutil.NewRequest().Get(tt.args.url).Go(t, e)
+ } else if tt.args.method == "DELETE" {
+ result = testutil.NewRequest().Delete(tt.args.url).Go(t, e)
+ }
+
+ assert.Equal(t, tt.args.returnStatus, result.Code(), tt.name)
+ })
+ }
+}
+
+func TestGetSwagger(t *testing.T) {
+ type args struct {
+ apiPath string
+ apiName string
+ }
+ tests := []struct {
+ name string
+ args args
+ }{
+ {
+ name: "Provider api",
+ args: args{
+ apiPath: "provider",
+ apiName: "Provider",
+ },
+ },
+ {
+ name: "Publish api",
+ args: args{
+ apiPath: "publish",
+ apiName: "Publish",
+ },
+ },
+ {
+ name: "Invoker api",
+ args: args{
+ apiPath: "invoker",
+ apiName: "Invoker",
+ },
+ },
+ {
+ name: "Discover api",
+ args: args{
+ apiPath: "discover",
+ apiName: "Discover",
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ result := testutil.NewRequest().Get("/swagger/"+tt.args.apiPath).Go(t, e)
+ assert.Equal(t, http.StatusOK, result.Code())
+ var swaggerResponse openapi3.T
+ err := result.UnmarshalJsonToObject(&swaggerResponse)
+ assert.Nil(t, err)
+ assert.Contains(t, swaggerResponse.Info.Title, tt.args.apiName)
+ })
+ }
+ invalidApi := "foobar"
+ result := testutil.NewRequest().Get("/swagger/"+invalidApi).Go(t, e)
+ assert.Equal(t, http.StatusBadRequest, result.Code())
+ var errorResponse common29122.ProblemDetails
+ err := result.UnmarshalJsonToObject(&errorResponse)
+ assert.Nil(t, err)
+ assert.Contains(t, *errorResponse.Cause, "Invalid API")
+ assert.Contains(t, *errorResponse.Cause, invalidApi)
+}
\ No newline at end of file