"fmt"
"net/http"
+ "github.com/getkin/kin-openapi/openapi3"
"github.com/labstack/echo/v4"
"helm.sh/helm/v3/pkg/cli"
+ "oransc.org/nonrtric/capifcore/internal/common29122"
"oransc.org/nonrtric/capifcore/internal/discoverserviceapi"
"oransc.org/nonrtric/capifcore/internal/invokermanagementapi"
"oransc.org/nonrtric/capifcore/internal/providermanagementapi"
discoverserviceapi.RegisterHandlersWithBaseURL(e, discoverService, "/service-apis/v1")
// Register Security
- securitySwagger, err := publishserviceapi.GetSwagger()
+ securitySwagger, err := securityapi.GetSwagger()
if err != nil {
log.Fatalf("Error loading Security swagger spec\n: %s", err)
}
e.GET("/", hello)
+ e.GET("/swagger/:apiName", getSwagger)
+
return e
}
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!\n")
}
+
+func getSwagger(c echo.Context) error {
+ var swagger *openapi3.T
+ var err error
+ switch api := c.Param("apiName"); api {
+ case "provider":
+ swagger, err = providermanagementapi.GetSwagger()
+ case "publish":
+ swagger, err = publishserviceapi.GetSwagger()
+ case "invoker":
+ swagger, err = invokermanagementapi.GetSwagger()
+ case "discover":
+ swagger, err = discoverserviceapi.GetSwagger()
+ case "security":
+ swagger, err = securityapi.GetSwagger()
+ default:
+ return c.JSON(http.StatusBadRequest, getProblemDetails("Invalid API name "+api, http.StatusBadRequest))
+ }
+ if err != nil {
+ return c.JSON(http.StatusInternalServerError, getProblemDetails("Unable to get swagger for API", http.StatusInternalServerError))
+ }
+ return c.JSON(http.StatusOK, swagger)
+}
+
+func getProblemDetails(cause string, status int) common29122.ProblemDetails {
+ return common29122.ProblemDetails{
+ Cause: &cause,
+ Status: &status,
+ }
+}
"testing"
"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/internal/common29122"
)
var e *echo.Echo
})
}
}
+
+func TestGetSwagger(t *testing.T) {
+ e = getEcho()
+
+ 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",
+ },
+ },
+ {
+ 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)
+}