--- /dev/null
+// -
+// ========================LICENSE_START=================================
+// O-RAN-SC
+// %%
+// Copyright (C) 2022: Nordix Foundation. All rights reserved.
+// Copyright (C) 2023 OpenInfra Foundation Europe. All rights reserved.
+// %%
+// 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 (
+ "crypto/tls"
+ "fmt"
+ "io"
+ "net/http"
+ "testing"
+ "time"
+
+ "github.com/deepmap/oapi-codegen/pkg/testutil"
+ "github.com/getkin/kin-openapi/openapi3"
+ "github.com/labstack/echo/v4"
+ "github.com/stretchr/testify/assert"
+ "oransc.org/nonrtric/capifcore"
+ "oransc.org/nonrtric/capifcore/internal/common29122"
+)
+
+func Test_routing(t *testing.T) {
+ e := echo.New()
+ capifcore.RegisterHandlers(e, nil, nil)
+
+ 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",
+ },
+ },
+ {
+ name: "Event path",
+ args: args{
+ url: "/capif-events/v1/subscriberId/subscriptions/subId",
+ returnStatus: http.StatusNoContent,
+ method: "DELETE",
+ },
+ },
+ {
+ name: "Security path",
+ args: args{
+ url: "/capif-security/v1/trustedInvokers/apiInvokerId",
+ returnStatus: http.StatusNotFound,
+ method: "GET",
+ },
+ },
+ }
+ 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) {
+ e := echo.New()
+ capifcore.RegisterHandlers(e, nil, nil)
+
+ 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: "Events api",
+ args: args{
+ apiPath: "events",
+ apiName: "Events",
+ },
+ },
+ {
+ name: "Discover api",
+ args: args{
+ apiPath: "discover",
+ apiName: "Discover",
+ },
+ },
+ {
+ name: "Security api",
+ args: args{
+ apiPath: "security",
+ apiName: "Security",
+ },
+ },
+ }
+ 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)
+}
+
+func TestHTTPSServer(t *testing.T) {
+ e := echo.New()
+ capifcore.RegisterHandlers(e, nil, nil)
+
+ var port = 44333
+ go startHttpsWebServer(e, 44333, "../certs/cert.pem", "../certs/key.pem") //"certs/test/cert.pem", "certs/test/key.pem"
+
+ time.Sleep(100 * time.Millisecond)
+
+ tr := &http.Transport{
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+ }
+
+ client := &http.Client{Transport: tr}
+ res, err := client.Get(fmt.Sprintf("https://localhost:%d", port))
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ defer res.Body.Close()
+ assert.Equal(t, res.StatusCode, res.StatusCode)
+
+ body, err := io.ReadAll(res.Body)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ expected := []byte("Hello, World!")
+ assert.Equal(t, expected, body)
+}