X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=capifcore%2Finternal%2Fpublishservice%2Fpublishservice_test.go;h=ab923638b5cb18aab9715999a0a8fe30d7d7050b;hb=0b4c4ecb52b1c04037a65644dc8c6c29981d9736;hp=9262b112d4e6255e9413f3c59a3a60bb9cc5599a;hpb=c9e08b2a2f647f9f870040570c5e71305f0fb5d2;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/internal/publishservice/publishservice_test.go b/capifcore/internal/publishservice/publishservice_test.go index 9262b11..ab92363 100644 --- a/capifcore/internal/publishservice/publishservice_test.go +++ b/capifcore/internal/publishservice/publishservice_test.go @@ -26,6 +26,7 @@ import ( "os" "testing" + "oransc.org/nonrtric/capifcore/internal/common29122" "oransc.org/nonrtric/capifcore/internal/providermanagement" "github.com/labstack/echo/v4" @@ -44,86 +45,138 @@ import ( ) func TestPublishUnpublishService(t *testing.T) { + apfId := "apfId" aefId := "aefId" - newApiId := "api_id_app-management" serviceRegisterMock := serviceMocks.ServiceRegister{} - serviceRegisterMock.On("IsFunctionRegistered", aefId).Return(true) + serviceRegisterMock.On("GetAefsForPublisher", apfId).Return([]string{aefId, "otherAefId"}) helmManagerMock := helmMocks.HelmManager{} helmManagerMock.On("InstallHelmChart", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) serviceUnderTest, requestHandler := getEcho(&serviceRegisterMock, &helmManagerMock) - // Check no services published - result := testutil.NewRequest().Get("/aefId/service-apis/"+newApiId).Go(t, requestHandler) + // Check no services published for provider + result := testutil.NewRequest().Get("/"+apfId+"/service-apis").Go(t, requestHandler) assert.Equal(t, http.StatusNotFound, result.Code()) - domainName := "domain" - var protocol publishapi.Protocol = "HTTP_1_1" - description := "Description,namespace,repoName,chartName,releaseName" - newServiceDescription := publishapi.ServiceAPIDescription{ - AefProfiles: &[]publishapi.AefProfile{ - { - AefId: aefId, - DomainName: &domainName, - Protocol: &protocol, - Versions: []publishapi.Version{ - { - ApiVersion: "v1", - Resources: &[]publishapi.Resource{ - { - CommType: "REQUEST_RESPONSE", - Operations: &[]publishapi.Operation{ - "POST", - }, - ResourceName: "app", - Uri: "app", - }, - }, - }, - }, - }, - }, - ApiName: "app-management", - Description: &description, - } + apiName := "app-management" + namespace := "namespace" + repoName := "repoName" + chartName := "chartName" + releaseName := "releaseName" + description := fmt.Sprintf("Description,%s,%s,%s,%s", namespace, repoName, chartName, releaseName) + newServiceDescription := getServiceAPIDescription(aefId, apiName, description) - // Publish a service - result = testutil.NewRequest().Post("/aefId/service-apis").WithJsonBody(newServiceDescription).Go(t, requestHandler) + // Publish a service for provider + result = testutil.NewRequest().Post("/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, requestHandler) assert.Equal(t, http.StatusCreated, result.Code()) var resultService publishapi.ServiceAPIDescription err := result.UnmarshalBodyToObject(&resultService) assert.NoError(t, err, "error unmarshaling response") + newApiId := "api_id_" + apiName assert.Equal(t, *resultService.ApiId, newApiId) - assert.Equal(t, "http://example.com/"+aefId+"/service-apis/"+*resultService.ApiId, result.Recorder.Header().Get(echo.HeaderLocation)) + 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.AreAPIsRegistered(&wantedAPILIst)) - assert.True(t, serviceUnderTest.IsAPIRegistered("aefId", "app-management")) - serviceRegisterMock.AssertCalled(t, "IsFunctionRegistered", aefId) - helmManagerMock.AssertCalled(t, "InstallHelmChart", "namespace", "repoName", "chartName", "releaseName") - assert.ElementsMatch(t, wantedAPILIst, *serviceUnderTest.GetAPIs()) + 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) + assert.ElementsMatch(t, []string{aefId}, serviceUnderTest.getAllAefIds()) - // Check that service is published - result = testutil.NewRequest().Get("/aefId/service-apis/"+newApiId).Go(t, requestHandler) + // Check that the service is published for the provider + result = testutil.NewRequest().Get("/"+apfId+"/service-apis/"+newApiId).Go(t, requestHandler) assert.Equal(t, http.StatusOK, result.Code()) err = result.UnmarshalBodyToObject(&resultService) assert.NoError(t, err, "error unmarshaling response") assert.Equal(t, *resultService.ApiId, newApiId) - // Delete a service + // Delete the service helmManagerMock.On("UninstallHelmChart", mock.Anything, mock.Anything).Return(nil) - result = testutil.NewRequest().Delete("/aefId/service-apis/"+newApiId).Go(t, requestHandler) + result = testutil.NewRequest().Delete("/"+apfId+"/service-apis/"+newApiId).Go(t, requestHandler) assert.Equal(t, http.StatusNoContent, result.Code()) - helmManagerMock.AssertCalled(t, "UninstallHelmChart", "namespace", "chartName") - assert.Empty(t, *serviceUnderTest.GetAPIs()) + helmManagerMock.AssertCalled(t, "UninstallHelmChart", namespace, chartName) + assert.Empty(t, serviceUnderTest.getAllAefIds()) // Check no services published - result = testutil.NewRequest().Get("/aefId/service-apis/"+newApiId).Go(t, requestHandler) + result = testutil.NewRequest().Get("/"+apfId+"/service-apis/"+newApiId).Go(t, requestHandler) + + assert.Equal(t, http.StatusNotFound, result.Code()) +} + +func TestPostUnpublishedServiceWithUnregisteredFunction(t *testing.T) { + apfId := "apfId" + aefId := "aefId" + serviceRegisterMock := serviceMocks.ServiceRegister{} + serviceRegisterMock.On("GetAefsForPublisher", apfId).Return([]string{"otherAefId"}) + _, requestHandler := getEcho(&serviceRegisterMock, nil) + + newServiceDescription := getServiceAPIDescription(aefId, "apiname", "description") + + // Publish a service + result := testutil.NewRequest().Post("/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, requestHandler) + + assert.Equal(t, http.StatusNotFound, result.Code()) + var resultError common29122.ProblemDetails + err := result.UnmarshalBodyToObject(&resultError) + 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) +} + +func TestGetServices(t *testing.T) { + apfId := "apfId" + aefId := "aefId" + serviceRegisterMock := serviceMocks.ServiceRegister{} + serviceRegisterMock.On("GetAefsForPublisher", apfId).Return([]string{aefId}) + _, requestHandler := getEcho(&serviceRegisterMock, nil) + + // Check no services published for provider + result := testutil.NewRequest().Get("/"+apfId+"/service-apis").Go(t, requestHandler) assert.Equal(t, http.StatusNotFound, result.Code()) + + serviceDescription1 := getServiceAPIDescription(aefId, "api1", "Description") + serviceDescription2 := getServiceAPIDescription(aefId, "api2", "Description") + + // Publish a service for provider + testutil.NewRequest().Post("/"+apfId+"/service-apis").WithJsonBody(serviceDescription1).Go(t, requestHandler) + testutil.NewRequest().Post("/"+apfId+"/service-apis").WithJsonBody(serviceDescription2).Go(t, requestHandler) + + // Get all services for provider + result = testutil.NewRequest().Get("/"+apfId+"/service-apis").Go(t, requestHandler) + assert.Equal(t, http.StatusOK, result.Code()) + var resultServices []publishapi.ServiceAPIDescription + err := result.UnmarshalBodyToObject(&resultServices) + assert.NoError(t, err, "error unmarshaling response") + assert.Len(t, resultServices, 2) + apiId1 := "api_id_api1" + serviceDescription1.ApiId = &apiId1 + apiId2 := "api_id_api2" + serviceDescription2.ApiId = &apiId2 + assert.Contains(t, resultServices, serviceDescription1) + assert.Contains(t, resultServices, serviceDescription2) +} + +func TestGetPublishedServices(t *testing.T) { + serviceUnderTest := NewPublishService(nil, nil) + + profiles := make([]publishapi.AefProfile, 1) + serviceDescription := publishapi.ServiceAPIDescription{ + AefProfiles: &profiles, + } + serviceUnderTest.publishedServices["publisher1"] = []publishapi.ServiceAPIDescription{ + serviceDescription, + } + serviceUnderTest.publishedServices["publisher2"] = []publishapi.ServiceAPIDescription{ + serviceDescription, + } + result := serviceUnderTest.GetAllPublishedServices() + assert.Len(t, result, 2) } func getEcho(serviceRegister providermanagement.ServiceRegister, helmManager helmmanagement.HelmManager) (*PublishService, *echo.Echo) { @@ -144,3 +197,34 @@ func getEcho(serviceRegister providermanagement.ServiceRegister, helmManager hel publishapi.RegisterHandlers(e, ps) return ps, e } + +func getServiceAPIDescription(aefId, apiName, description string) publishapi.ServiceAPIDescription { + domainName := "domainName" + var protocol publishapi.Protocol = "HTTP_1_1" + return publishapi.ServiceAPIDescription{ + AefProfiles: &[]publishapi.AefProfile{ + { + AefId: aefId, + DomainName: &domainName, + Protocol: &protocol, + Versions: []publishapi.Version{ + { + ApiVersion: "v1", + Resources: &[]publishapi.Resource{ + { + CommType: "REQUEST_RESPONSE", + Operations: &[]publishapi.Operation{ + "POST", + }, + ResourceName: "app", + Uri: "app", + }, + }, + }, + }, + }, + }, + ApiName: apiName, + Description: &description, + } +}