Added typeupdate and typeaccess 98/10398/4
authorshikha0203 <shivani.khare@est.tech>
Tue, 7 Feb 2023 14:54:29 +0000 (14:54 +0000)
committerHenrik Andersson <henrik.b.andersson@est.tech>
Tue, 7 Feb 2023 15:37:18 +0000 (15:37 +0000)
Issue-ID: NONRTRIC-814
Signed-off-by: shikha0203 <shivani.khare@est.tech>
Change-Id: I4d74454a88b5d1bb3d98375510211ddb69476e3d

capifcore/internal/invokermanagement/invokermanagement.go
capifcore/internal/publishservice/publishservice.go
capifcore/internal/publishservice/publishservice_test.go
capifcore/internal/publishserviceapi/typeaccess.go [new file with mode: 0644]
capifcore/internal/publishserviceapi/typeupdate.go [new file with mode: 0644]

index c6f2db3..1fbe2f0 100644 (file)
 package invokermanagement
 
 import (
-       "errors"
        "fmt"
        "net/http"
        "path"
        "sync"
 
        "oransc.org/nonrtric/capifcore/internal/eventsapi"
-       publishapi "oransc.org/nonrtric/capifcore/internal/publishserviceapi"
 
        "oransc.org/nonrtric/capifcore/internal/common29122"
        invokerapi "oransc.org/nonrtric/capifcore/internal/invokermanagementapi"
@@ -214,20 +212,10 @@ func (im *InvokerManager) validateInvoker(invoker invokerapi.APIInvokerEnrolment
        if err := invoker.Validate(); err != nil {
                return err
        }
-       if !im.areAPIsPublished(invoker.ApiList) {
-               return errors.New("some APIs needed by invoker are not registered")
-       }
 
        return nil
 }
 
-func (im *InvokerManager) areAPIsPublished(apis *invokerapi.APIList) bool {
-       if apis == nil {
-               return true
-       }
-       return im.publishRegister.AreAPIsPublished((*[]publishapi.ServiceAPIDescription)(apis))
-}
-
 func (im *InvokerManager) sendEvent(invokerId string, eventType eventsapi.CAPIFEvent) {
        invokerIds := []string{invokerId}
        event := eventsapi.EventNotification{
index ee3efef..bf79899 100644 (file)
@@ -42,9 +42,6 @@ import (
 
 //go:generate mockery --name PublishRegister
 type PublishRegister interface {
-       // Checks if the provided APIs are published.
-       // Returns true if all provided APIs have been published, false otherwise.
-       AreAPIsPublished(serviceDescriptions *[]publishapi.ServiceAPIDescription) bool
        // Checks if the provided API is published.
        // Returns true if the provided API has been published, false otherwise.
        IsAPIPublished(aefId, path string) bool
@@ -71,15 +68,6 @@ func NewPublishService(serviceRegister providermanagement.ServiceRegister, hm he
        }
 }
 
-func (ps *PublishService) AreAPIsPublished(serviceDescriptions *[]publishapi.ServiceAPIDescription) bool {
-
-       if serviceDescriptions != nil {
-               registeredApis := ps.getAllAefIds()
-               return checkNewDescriptions(*serviceDescriptions, registeredApis)
-       }
-       return true
-}
-
 func (ps *PublishService) getAllAefIds() []string {
        ps.lock.Lock()
        defer ps.lock.Unlock()
@@ -87,46 +75,12 @@ func (ps *PublishService) getAllAefIds() []string {
        allIds := []string{}
        for _, descriptions := range ps.publishedServices {
                for _, description := range descriptions {
-                       allIds = append(allIds, getIdsFromDescription(description)...)
+                       allIds = append(allIds, description.GetAefIds()...)
                }
        }
        return allIds
 }
 
-func getIdsFromDescription(description publishapi.ServiceAPIDescription) []string {
-       allIds := []string{}
-       if description.AefProfiles != nil {
-               for _, aefProfile := range *description.AefProfiles {
-                       allIds = append(allIds, aefProfile.AefId)
-               }
-       }
-       return allIds
-}
-
-func checkNewDescriptions(newDescriptions []publishapi.ServiceAPIDescription, registeredAefIds []string) bool {
-       registered := true
-       for _, newApi := range newDescriptions {
-               if !checkProfiles(newApi.AefProfiles, registeredAefIds) {
-                       registered = false
-                       break
-               }
-       }
-       return registered
-}
-
-func checkProfiles(newProfiles *[]publishapi.AefProfile, registeredAefIds []string) bool {
-       allRegistered := true
-       if newProfiles != nil {
-               for _, profile := range *newProfiles {
-                       if !slices.Contains(registeredAefIds, profile.AefId) {
-                               allRegistered = false
-                               break
-                       }
-               }
-       }
-       return allRegistered
-}
-
 func (ps *PublishService) IsAPIPublished(aefId, path string) bool {
        return slices.Contains(ps.getAllAefIds(), aefId)
 }
@@ -181,8 +135,7 @@ func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) e
                }
        }
 
-       newId := "api_id_" + newServiceAPIDescription.ApiName
-       newServiceAPIDescription.ApiId = &newId
+       newServiceAPIDescription.PrepareNewService()
 
        shouldReturn, returnValue := ps.installHelmChart(newServiceAPIDescription, ctx)
        if shouldReturn {
@@ -307,11 +260,11 @@ func (ps *PublishService) PutApfIdServiceApisServiceApiId(ctx echo.Context, apfI
        if err != nil {
                return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err))
        }
-       ps.updateDescription(pos, apfId, &updatedServiceDescription, &publishedService)
        err = ps.checkProfilesRegistered(apfId, *updatedServiceDescription.AefProfiles)
        if err != nil {
                return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err))
        }
+       ps.updateDescription(pos, apfId, &updatedServiceDescription, &publishedService)
        publishedService.AefProfiles = updatedServiceDescription.AefProfiles
        ps.publishedServices[apfId][pos] = publishedService
        err = ctx.JSON(http.StatusOK, publishedService)
index 3c19204..b69b956 100644 (file)
@@ -80,8 +80,6 @@ func TestPublishUnpublishService(t *testing.T) {
        assert.Equal(t, newApiId, *resultService.ApiId)
        assert.Equal(t, "http://example.com/"+apfId+"/service-apis/"+*resultService.ApiId, result.Recorder.Header().Get(echo.HeaderLocation))
        newServiceDescription.ApiId = &newApiId
-       wantedAPILIst := []publishapi.ServiceAPIDescription{newServiceDescription}
-       assert.True(t, serviceUnderTest.AreAPIsPublished(&wantedAPILIst))
        assert.True(t, serviceUnderTest.IsAPIPublished(aefId, apiName))
        serviceRegisterMock.AssertCalled(t, "GetAefsForPublisher", apfId)
        helmManagerMock.AssertCalled(t, "InstallHelmChart", namespace, repoName, chartName, releaseName)
diff --git a/capifcore/internal/publishserviceapi/typeaccess.go b/capifcore/internal/publishserviceapi/typeaccess.go
new file mode 100644 (file)
index 0000000..32c1a7a
--- /dev/null
@@ -0,0 +1,30 @@
+// -
+//
+//     ========================LICENSE_START=================================
+//     O-RAN-SC
+//     %%
+//     Copyright (C) 2023: Nordix Foundation
+//     %%
+//     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 publishserviceapi
+
+func (sd ServiceAPIDescription) GetAefIds() []string {
+       allIds := []string{}
+       if sd.AefProfiles != nil {
+               for _, aefProfile := range *sd.AefProfiles {
+                       allIds = append(allIds, aefProfile.AefId)
+               }
+       }
+       return allIds
+}
diff --git a/capifcore/internal/publishserviceapi/typeupdate.go b/capifcore/internal/publishserviceapi/typeupdate.go
new file mode 100644 (file)
index 0000000..98e059c
--- /dev/null
@@ -0,0 +1,26 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2023: Nordix Foundation
+//   %%
+//   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 publishserviceapi
+
+func (sd *ServiceAPIDescription) PrepareNewService() {
+       apiName := "api_id_" + sd.ApiName
+       sd.ApiId = &apiName
+}