From 8f9fb0b58f213c930eb4bf87ca180af7b6766848 Mon Sep 17 00:00:00 2001 From: shikha0203 Date: Thu, 19 Jan 2023 15:59:03 +0000 Subject: [PATCH] test new functionality to update and delete profiles Issue-ID: NONRTRIC-814 Signed-off-by: shikha0203 Change-Id: I09790518cc8f65920a105c0e8a7d23ead0d9eb91 --- .../internal/publishservice/publishservice.go | 42 ++-------- .../internal/publishservice/publishservice_test.go | 91 ++++++++++++++++++++++ 2 files changed, 99 insertions(+), 34 deletions(-) diff --git a/capifcore/internal/publishservice/publishservice.go b/capifcore/internal/publishservice/publishservice.go index 3209024..3898a80 100644 --- a/capifcore/internal/publishservice/publishservice.go +++ b/capifcore/internal/publishservice/publishservice.go @@ -289,10 +289,11 @@ func (ps *PublishService) PutApfIdServiceApisServiceApiId(ctx echo.Context, apfI return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err)) } ps.updateDescription(pos, apfId, &updatedServiceDescription, &publishedService) - pos, publishedService.AefProfiles, err = ps.updateProfiles(pos, apfId, updatedServiceDescription.AefProfiles, publishedService.AefProfiles) + err = ps.checkProfilesRegistered(apfId, *updatedServiceDescription.AefProfiles) if err != nil { return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err)) } + publishedService.AefProfiles = updatedServiceDescription.AefProfiles ps.publishedServices[apfId][pos] = publishedService err = ctx.JSON(http.StatusOK, publishedService) if err != nil { @@ -342,43 +343,16 @@ func (ps *PublishService) sendEvent(service publishapi.ServiceAPIDescription, ev ps.eventChannel <- event } -func (ps *PublishService) updateProfiles(pos int, apfId string, updatedServiceDescription *[]publishapi.AefProfile, publishedService *[]publishapi.AefProfile) (int, *[]publishapi.AefProfile, error) { +func (ps *PublishService) checkProfilesRegistered(apfId string, updatedProfiles []publishapi.AefProfile) error { + registeredFuncs := ps.serviceRegister.GetAefsForPublisher(apfId) - addedProfiles := []publishapi.AefProfile{} - changedProfiles := []publishapi.AefProfile{} - for _, profile := range *updatedServiceDescription { + for _, profile := range updatedProfiles { if !slices.Contains(registeredFuncs, profile.AefId) { - return 0, nil, fmt.Errorf("function %s not registered", profile.AefId) - } - for _, publishedProfile := range *publishedService { - if publishedProfile.AefId != profile.AefId { - registeredProfiles := *publishedService - newProfiles := append(registeredProfiles, profile) - publishedService = &newProfiles - addedProfiles = append(addedProfiles, profile) - } else { - pos, registeredProfile, err := getProfile(profile.AefId, publishedService) - if err != nil { - return pos, updatedServiceDescription, fmt.Errorf("unable to update service due to: %s", err.Error()) - } - if profile.DomainName != nil { - registeredProfile.DomainName = profile.DomainName - (*publishedService)[pos] = registeredProfile - } - changedProfiles = append(changedProfiles, profile) - } - } - } - modifiedProfiles := append(changedProfiles, addedProfiles...) - return 0, &modifiedProfiles, nil -} -func getProfile(profileId string, apiProfiles *[]publishapi.AefProfile) (int, publishapi.AefProfile, error) { - for pos, profile := range *apiProfiles { - if profile.AefId == profileId { - return pos, profile, nil + return fmt.Errorf("function %s not registered", profile.AefId) } } - return 0, publishapi.AefProfile{}, fmt.Errorf("profile with ID %s is not registered for the service", profileId) + return nil + } // This function wraps sending of an error in the Error format, and diff --git a/capifcore/internal/publishservice/publishservice_test.go b/capifcore/internal/publishservice/publishservice_test.go index 2483053..8b35f55 100644 --- a/capifcore/internal/publishservice/publishservice_test.go +++ b/capifcore/internal/publishservice/publishservice_test.go @@ -47,6 +47,7 @@ import ( ) func TestPublishUnpublishService(t *testing.T) { + apfId := "apfId" aefId := "aefId" serviceRegisterMock := serviceMocks.ServiceRegister{} @@ -102,6 +103,7 @@ func TestPublishUnpublishService(t *testing.T) { // Delete the service helmManagerMock.On("UninstallHelmChart", mock.Anything, mock.Anything).Return(nil) + result = testutil.NewRequest().Delete("/"+apfId+"/service-apis/"+newApiId).Go(t, requestHandler) assert.Equal(t, http.StatusNoContent, result.Code()) @@ -258,6 +260,7 @@ func TestUpdateDescription(t *testing.T) { assert.Equal(t, newDescription, *resultService.Description) assert.Equal(t, newDomainName, *(*resultService.AefProfiles)[0].DomainName) assert.Equal(t, "aefIdNew", (*resultService.AefProfiles)[1].AefId) + assert.True(t, serviceUnderTest.IsAPIPublished("aefIdNew", "path")) if publishEvent, ok := waitForEvent(eventChannel, 1*time.Second); ok { assert.Fail(t, "No event sent") @@ -267,6 +270,94 @@ func TestUpdateDescription(t *testing.T) { } } +func TestUpdateValidServiceWithDeletedFunction(t *testing.T) { + apfId := "apfId" + serviceApiId := "serviceApiId" + aefId := "aefId" + apiName := "apiName" + description := "description" + + serviceRegisterMock := serviceMocks.ServiceRegister{} + serviceRegisterMock.On("GetAefsForPublisher", apfId).Return([]string{aefId, "otherAefId", "aefIdNew"}) + helmManagerMock := helmMocks.HelmManager{} + helmManagerMock.On("InstallHelmChart", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + serviceUnderTest, _, requestHandler := getEcho(&serviceRegisterMock, &helmManagerMock) + + serviceDescription := getServiceAPIDescription(aefId, apiName, description) + serviceDescription.ApiId = &serviceApiId + (*serviceDescription.AefProfiles)[0].AefId = aefId + + newProfileDomain := "new profile Domain name" + var protocol publishapi.Protocol = "HTTP_1_1" + test := make([]publishapi.AefProfile, 1) + test = *serviceDescription.AefProfiles + test = append(test, publishapi.AefProfile{ + + AefId: "aefIdNew", + DomainName: &newProfileDomain, + Protocol: &protocol, + Versions: []publishapi.Version{ + { + ApiVersion: "v1", + Resources: &[]publishapi.Resource{ + { + CommType: "REQUEST_RESPONSE", + Operations: &[]publishapi.Operation{ + "POST", + }, + ResourceName: "app", + Uri: "app", + }, + }, + }, + }, + }, + ) + serviceDescription.AefProfiles = &test + serviceUnderTest.publishedServices[apfId] = []publishapi.ServiceAPIDescription{serviceDescription} + + //Modify the service + updatedServiceDescription := getServiceAPIDescription(aefId, apiName, description) + updatedServiceDescription.ApiId = &serviceApiId + test1 := make([]publishapi.AefProfile, 1) + test1 = *updatedServiceDescription.AefProfiles + test1 = append(test1, publishapi.AefProfile{ + + AefId: "aefIdNew", + DomainName: &newProfileDomain, + Protocol: &protocol, + Versions: []publishapi.Version{ + { + ApiVersion: "v1", + Resources: &[]publishapi.Resource{ + { + CommType: "REQUEST_RESPONSE", + Operations: &[]publishapi.Operation{ + "POST", + }, + ResourceName: "app", + Uri: "app", + }, + }, + }, + }, + }, + ) + updatedServiceDescription.AefProfiles = &test1 + testFunc := []publishapi.AefProfile{ + (*updatedServiceDescription.AefProfiles)[1], + } + + updatedServiceDescription.AefProfiles = &testFunc + result := testutil.NewRequest().Put("/"+apfId+"/service-apis/"+serviceApiId).WithJsonBody(updatedServiceDescription).Go(t, requestHandler) + var resultService publishapi.ServiceAPIDescription + assert.Equal(t, http.StatusOK, result.Code()) + err := result.UnmarshalBodyToObject(&resultService) + assert.NoError(t, err, "error unmarshaling response") + assert.Len(t, (*resultService.AefProfiles), 1) + assert.False(t, serviceUnderTest.IsAPIPublished("aefId", "path")) + +} func getEcho(serviceRegister providermanagement.ServiceRegister, helmManager helmmanagement.HelmManager) (*PublishService, chan eventsapi.EventNotification, *echo.Echo) { swagger, err := publishapi.GetSwagger() if err != nil { -- 2.16.6