From: elinuxhenrik Date: Fri, 3 Feb 2023 08:49:16 +0000 (+0100) Subject: Add check for same service publication X-Git-Tag: 1.1.0~29^2~1 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=c3cc44190afd4793d76f3cc5814b8b5e79267fb3;p=nonrtric%2Fplt%2Fsme.git Add check for same service publication Issue-ID: NONRTRIC-814 Signed-off-by: elinuxhenrik Change-Id: I9ed7c24cbe39e42a8b1d5beac3d79d558d1c558b --- diff --git a/capifcore/internal/publishservice/publishservice.go b/capifcore/internal/publishservice/publishservice.go index e3a2314..5cea538 100644 --- a/capifcore/internal/publishservice/publishservice.go +++ b/capifcore/internal/publishservice/publishservice.go @@ -158,12 +158,16 @@ func (ps *PublishService) GetApfIdServiceApis(ctx echo.Context, apfId string) er // Publish a new API. func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) error { var newServiceAPIDescription publishapi.ServiceAPIDescription - errorMsg := "Unable to register the service due to: %s " + errorMsg := "Unable to publish the service due to %s " err := ctx.Bind(&newServiceAPIDescription) if err != nil { return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errorMsg, "invalid format for service "+apfId)) } + if ps.isServicePublished(newServiceAPIDescription) { + return sendCoreError(ctx, http.StatusForbidden, fmt.Sprintf(errorMsg, "service already published")) + } + if err := newServiceAPIDescription.Validate(); err != nil { return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errorMsg, err)) } @@ -204,6 +208,17 @@ func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) e return nil } +func (ps *PublishService) isServicePublished(newService publishapi.ServiceAPIDescription) bool { + for _, services := range ps.publishedServices { + for _, service := range services { + if newService.ApiName == service.ApiName { + return true + } + } + } + return false +} + func (ps *PublishService) installHelmChart(newServiceAPIDescription publishapi.ServiceAPIDescription, ctx echo.Context) (bool, error) { info := strings.Split(*newServiceAPIDescription.Description, ",") if len(info) == 5 { diff --git a/capifcore/internal/publishservice/publishservice_test.go b/capifcore/internal/publishservice/publishservice_test.go index ffbfba3..3c19204 100644 --- a/capifcore/internal/publishservice/publishservice_test.go +++ b/capifcore/internal/publishservice/publishservice_test.go @@ -101,6 +101,16 @@ func TestPublishUnpublishService(t *testing.T) { assert.NoError(t, err, "error unmarshaling response") assert.Equal(t, *resultService.ApiId, newApiId) + // Publish the same service again should result in Forbidden + result = testutil.NewRequest().Post("/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, requestHandler) + + assert.Equal(t, http.StatusForbidden, result.Code()) + var resultError common29122.ProblemDetails + err = result.UnmarshalBodyToObject(&resultError) + assert.NoError(t, err, "error unmarshaling response") + assert.Contains(t, *resultError.Cause, "already published") + assert.Equal(t, http.StatusForbidden, *resultError.Status) + // Delete the service helmManagerMock.On("UninstallHelmChart", mock.Anything, mock.Anything).Return(nil) @@ -141,8 +151,7 @@ func TestPostUnpublishedServiceWithUnregisteredFunction(t *testing.T) { assert.NoError(t, err, "error unmarshaling response") assert.Contains(t, *resultError.Cause, aefId) assert.Contains(t, *resultError.Cause, "not registered") - notFound := http.StatusNotFound - assert.Equal(t, ¬Found, resultError.Status) + assert.Equal(t, http.StatusNotFound, *resultError.Status) } func TestGetServices(t *testing.T) {