X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=capifcore%2Finternal%2Fpublishservice%2Fpublishservice.go;h=54a7f675d2e30f82588e94c85ba0a8ad5aa0f50e;hb=refs%2Fchanges%2F11%2F12711%2F6;hp=b4e38e76d518c5342c49679f135486f294228807;hpb=d17ee019461493f52df06074ce95a6cb951ffdc4;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/internal/publishservice/publishservice.go b/capifcore/internal/publishservice/publishservice.go index b4e38e7..54a7f67 100644 --- a/capifcore/internal/publishservice/publishservice.go +++ b/capifcore/internal/publishservice/publishservice.go @@ -49,6 +49,7 @@ type PublishRegister interface { // Gets all published APIs. // Returns a list of all APIs that has been published. GetAllPublishedServices() []publishapi.ServiceAPIDescription + GetAllowedPublishedServices(invokerApiList []publishapi.ServiceAPIDescription) []publishapi.ServiceAPIDescription } type PublishService struct { @@ -94,6 +95,30 @@ func (ps *PublishService) GetAllPublishedServices() []publishapi.ServiceAPIDescr return publishedDescriptions } +func (ps *PublishService) GetAllowedPublishedServices(apiListRequestedServices []publishapi.ServiceAPIDescription) []publishapi.ServiceAPIDescription { + apiListAllPublished := ps.GetAllPublishedServices() + allowedPublishedServices := join(apiListAllPublished, apiListRequestedServices) + return allowedPublishedServices +} + +func join(a, b []publishapi.ServiceAPIDescription) []publishapi.ServiceAPIDescription { + var result []publishapi.ServiceAPIDescription + + if (a == nil) || (b == nil) || (len(a) == 0) || (len(b) == 0) { + return result + } + + for _, itemA := range a { + for _, itemB := range b { + if itemA.ApiName == itemB.ApiName { + result = append(result, itemA) + break + } + } + } + return result +} + // Retrieve all published APIs. func (ps *PublishService) GetApfIdServiceApis(ctx echo.Context, apfId string) error { if !ps.serviceRegister.IsPublishingFunctionRegistered(apfId) { @@ -179,7 +204,7 @@ func (ps *PublishService) isServicePublished(newService publishapi.ServiceAPIDes func (ps *PublishService) installHelmChart(newServiceAPIDescription publishapi.ServiceAPIDescription, ctx echo.Context) (bool, error) { info := strings.Split(*newServiceAPIDescription.Description, ",") - if len(info) == 5 { + if (len(info) == 5) && (ps.helmManager != nil) { err := ps.helmManager.InstallHelmChart(info[1], info[2], info[3], info[4]) if err != nil { return true, sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf("Unable to install Helm chart %s due to: %s", info[3], err.Error())) @@ -196,7 +221,7 @@ func (ps *PublishService) DeleteApfIdServiceApisServiceApiId(ctx echo.Context, a pos, description := getServiceDescription(serviceApiId, serviceDescriptions) if description != nil { info := strings.Split(*description.Description, ",") - if len(info) == 5 { + if (len(info) == 5) && (ps.helmManager != nil) { ps.helmManager.UninstallHelmChart(info[1], info[3]) log.Debug("Deleted service: ", serviceApiId) } @@ -233,7 +258,8 @@ func (ps *PublishService) GetApfIdServiceApisServiceApiId(ctx echo.Context, apfI func getServiceDescription(serviceApiId string, descriptions []publishapi.ServiceAPIDescription) (int, *publishapi.ServiceAPIDescription) { for pos, description := range descriptions { - if serviceApiId == *description.ApiId { + // Check for nil as we had a failure here when running unit tests in parallel against a single Capifcore instance + if (description.ApiId != nil) && (serviceApiId == *description.ApiId) { return pos, &description } } @@ -258,7 +284,7 @@ func (ps *PublishService) PutApfIdServiceApisServiceApiId(ctx echo.Context, apfI defer ps.lock.Unlock() errMsg := "Unable to update service due to %s." - pos, publishedService, err := ps.checkIfServiceIsPublished(apfId, serviceApiId, ctx) + pos, publishedService, err := ps.checkIfServiceIsPublished(apfId, serviceApiId) if err != nil { return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err)) } @@ -279,7 +305,7 @@ func (ps *PublishService) PutApfIdServiceApisServiceApiId(ctx echo.Context, apfI return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err)) } - ps.updateDescription(pos, apfId, &updatedServiceDescription, &publishedService) + ps.updateDescription(&updatedServiceDescription, &publishedService) publishedService.AefProfiles = updatedServiceDescription.AefProfiles ps.publishedServices[apfId][pos] = publishedService @@ -292,7 +318,7 @@ func (ps *PublishService) PutApfIdServiceApisServiceApiId(ctx echo.Context, apfI return nil } -func (ps *PublishService) checkIfServiceIsPublished(apfId string, serviceApiId string, ctx echo.Context) (int, publishapi.ServiceAPIDescription, error) { +func (ps *PublishService) checkIfServiceIsPublished(apfId string, serviceApiId string) (int, publishapi.ServiceAPIDescription, error) { publishedServices, ok := ps.publishedServices[apfId] if !ok { return 0, publishapi.ServiceAPIDescription{}, fmt.Errorf("service must be published before updating it") @@ -315,7 +341,7 @@ func getServiceFromRequest(ctx echo.Context) (publishapi.ServiceAPIDescription, return updatedServiceDescription, nil } -func (ps *PublishService) updateDescription(pos int, apfId string, updatedServiceDescription, publishedService *publishapi.ServiceAPIDescription) { +func (ps *PublishService) updateDescription(updatedServiceDescription, publishedService *publishapi.ServiceAPIDescription) { if updatedServiceDescription.Description != nil { publishedService.Description = updatedServiceDescription.Description go ps.sendEvent(*publishedService, eventsapi.CAPIFEventSERVICEAPIUPDATE)