X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=capifcore%2Finternal%2Fprovidermanagement%2Fprovidermanagement_test.go;h=cbcf43899021976071ee9a887d46d5574087417e;hb=d17ee019461493f52df06074ce95a6cb951ffdc4;hp=06919e5e2db2483ef40695b21c04b0090a522ec7;hpb=c9e08b2a2f647f9f870040570c5e71305f0fb5d2;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/internal/providermanagement/providermanagement_test.go b/capifcore/internal/providermanagement/providermanagement_test.go index 06919e5..cbcf438 100644 --- a/capifcore/internal/providermanagement/providermanagement_test.go +++ b/capifcore/internal/providermanagement/providermanagement_test.go @@ -37,39 +37,69 @@ import ( "github.com/stretchr/testify/assert" ) -func TestProviderHandlingSuccessfully(t *testing.T) { +var ( + domainID = "domain_id_rApp_domain" + otherDomainID = "domain_id_other_domain" + domainInfo = "rApp domain" + funcInfoAPF = "rApp as APF" + funcIdAPF = "APF_id_rApp_as_APF" + funcInfoAMF = "rApp as AMF" + funcIdAMF = "AMF_id_rApp_as_AMF" + funcInfoAEF = "rApp as AEF" + funcIdAEF = "AEF_id_rApp_as_AEF" +) + +func TestFailedUpdateValidProviderWithNewFunction(t *testing.T) { managerUnderTest, requestHandler := getEcho() - domainInfo := "rApp domain" - funcInfoAPF := "rApp as APF" - funcInfoAMF := "rApp as AMF" - funcInfoAEF := "rApp as AEF" - testFuncs := []provapi.APIProviderFunctionDetails{ - { - ApiProvFuncInfo: &funcInfoAPF, - ApiProvFuncRole: provapi.ApiProviderFuncRoleAPF, - }, - { - ApiProvFuncInfo: &funcInfoAMF, - ApiProvFuncRole: provapi.ApiProviderFuncRoleAMF, - }, - { - ApiProvFuncInfo: &funcInfoAEF, - ApiProvFuncRole: provapi.ApiProviderFuncRoleAEF, + provider := getProvider() + provider.ApiProvDomId = &domainID + (*provider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + (*provider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF + (*provider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + managerUnderTest.registeredProviders[domainID] = provider + + // Modify the provider + updatedProvider := getProvider() + + // For this test case, we do not set updatedProvider.ApiProvDomId, so that we can test for a 400 error below. + (*updatedProvider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + (*updatedProvider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF + (*updatedProvider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + newDomainInfo := "New domain info" + updatedProvider.ApiProvDomInfo = &newDomainInfo + newFunctionInfo := "New function info" + (*updatedProvider.ApiProvFuncs)[0].ApiProvFuncInfo = &newFunctionInfo + newFuncInfoAEF := "new func as AEF" + testFuncs := *updatedProvider.ApiProvFuncs + testFuncs = append(testFuncs, provapi.APIProviderFunctionDetails{ + ApiProvFuncInfo: &newFuncInfoAEF, + ApiProvFuncRole: provapi.ApiProviderFuncRoleAEF, + RegInfo: provapi.RegistrationInformation{ + ApiProvPubKey: "key", }, - } - newProvider := provapi.APIProviderEnrolmentDetails{ - ApiProvDomInfo: &domainInfo, - ApiProvFuncs: &testFuncs, - } + }) + updatedProvider.ApiProvFuncs = &testFuncs + + result := testutil.NewRequest().Put("/registrations/"+domainID).WithJsonBody(updatedProvider).Go(t, requestHandler) + assert.Equal(t, http.StatusBadRequest, result.Code()) + + var resultError common29122.ProblemDetails + err := result.UnmarshalJsonToObject(&resultError) + assert.NoError(t, err, "error unmarshaling response") + + assert.Contains(t, *resultError.Cause, "APIProviderEnrolmentDetails ApiProvDomId doesn't match path parameter") + assert.False(t, managerUnderTest.IsFunctionRegistered("AEF_id_new_func_as_AEF")) +} + +func TestRegisterValidProvider(t *testing.T) { + managerUnderTest, requestHandler := getEcho() + + newProvider := getProvider() // Register a valid provider result := testutil.NewRequest().Post("/registrations").WithJsonBody(newProvider).Go(t, requestHandler) - domainID := "domain_id_rApp_domain" - funcIdAPF := "APF_id_rApp_as_APF" - funcIdAMF := "AMF_id_rApp_as_AMF" - funcIdAEF := "AEF_id_rApp_as_AEF" assert.Equal(t, http.StatusCreated, result.Code()) var resultProvider provapi.APIProviderEnrolmentDetails err := result.UnmarshalBodyToObject(&resultProvider) @@ -82,49 +112,231 @@ func TestProviderHandlingSuccessfully(t *testing.T) { assert.Equal(t, "http://example.com/registrations/"+*resultProvider.ApiProvDomId, result.Recorder.Header().Get(echo.HeaderLocation)) assert.True(t, managerUnderTest.IsFunctionRegistered("APF_id_rApp_as_APF")) - // Update the provider - newProvider.ApiProvDomId = &domainID - (*newProvider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF - (*newProvider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF - (*newProvider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + // Register same provider again should result in Forbidden + result = testutil.NewRequest().Post("/registrations").WithJsonBody(newProvider).Go(t, requestHandler) + var errorObj common29122.ProblemDetails + assert.Equal(t, http.StatusForbidden, result.Code()) + err = result.UnmarshalBodyToObject(&errorObj) + assert.NoError(t, err, "error unmarshaling response") + assert.Equal(t, http.StatusForbidden, *errorObj.Status) + assert.Contains(t, *errorObj.Cause, "already registered") +} + +func TestUpdateValidProviderWithNewFunction(t *testing.T) { + managerUnderTest, requestHandler := getEcho() + + provider := getProvider() + provider.ApiProvDomId = &domainID + (*provider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + (*provider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF + (*provider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + managerUnderTest.registeredProviders[domainID] = provider + + // Modify the provider + updatedProvider := getProvider() + updatedProvider.ApiProvDomId = &domainID + (*updatedProvider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + (*updatedProvider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF + (*updatedProvider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + newDomainInfo := "New domain info" + updatedProvider.ApiProvDomInfo = &newDomainInfo + newFunctionInfo := "New function info" + (*updatedProvider.ApiProvFuncs)[0].ApiProvFuncInfo = &newFunctionInfo newFuncInfoAEF := "new func as AEF" + testFuncs := *updatedProvider.ApiProvFuncs testFuncs = append(testFuncs, provapi.APIProviderFunctionDetails{ ApiProvFuncInfo: &newFuncInfoAEF, - ApiProvFuncRole: "AEF", + ApiProvFuncRole: provapi.ApiProviderFuncRoleAEF, + RegInfo: provapi.RegistrationInformation{ + ApiProvPubKey: "key", + }, }) + updatedProvider.ApiProvFuncs = &testFuncs - result = testutil.NewRequest().Put("/registrations/"+domainID).WithJsonBody(newProvider).Go(t, requestHandler) + result := testutil.NewRequest().Put("/registrations/"+domainID).WithJsonBody(updatedProvider).Go(t, requestHandler) + var resultProvider provapi.APIProviderEnrolmentDetails assert.Equal(t, http.StatusOK, result.Code()) - err = result.UnmarshalBodyToObject(&resultProvider) + err := result.UnmarshalBodyToObject(&resultProvider) assert.NoError(t, err, "error unmarshaling response") + assert.Equal(t, newDomainInfo, *resultProvider.ApiProvDomInfo) + assert.Equal(t, newFunctionInfo, *(*resultProvider.ApiProvFuncs)[0].ApiProvFuncInfo) assert.Equal(t, *(*resultProvider.ApiProvFuncs)[3].ApiProvFuncId, "AEF_id_new_func_as_AEF") assert.Empty(t, resultProvider.FailReason) assert.True(t, managerUnderTest.IsFunctionRegistered("AEF_id_new_func_as_AEF")) +} + +func TestUpdateValidProviderWithDeletedFunction(t *testing.T) { + managerUnderTest, requestHandler := getEcho() - // Delete the provider - result = testutil.NewRequest().Delete("/registrations/"+*resultProvider.ApiProvDomId).Go(t, requestHandler) + provider := getProvider() + provider.ApiProvDomId = &domainID + (*provider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + (*provider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF + (*provider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + managerUnderTest.registeredProviders[domainID] = provider - assert.Equal(t, http.StatusNoContent, result.Code()) - assert.False(t, managerUnderTest.IsFunctionRegistered("APF_id_rApp_as_APF")) + // Modify the provider + updatedProvider := getProvider() + updatedProvider.ApiProvDomId = &domainID + (*updatedProvider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + (*updatedProvider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + testFuncs := []provapi.APIProviderFunctionDetails{ + (*updatedProvider.ApiProvFuncs)[0], + (*updatedProvider.ApiProvFuncs)[2], + } + updatedProvider.ApiProvFuncs = &testFuncs + + result := testutil.NewRequest().Put("/registrations/"+domainID).WithJsonBody(updatedProvider).Go(t, requestHandler) + + var resultProvider provapi.APIProviderEnrolmentDetails + assert.Equal(t, http.StatusOK, result.Code()) + err := result.UnmarshalBodyToObject(&resultProvider) + assert.NoError(t, err, "error unmarshaling response") + assert.Len(t, (*resultProvider.ApiProvFuncs), 2) + assert.Empty(t, resultProvider.FailReason) + assert.False(t, managerUnderTest.IsFunctionRegistered(funcIdAMF)) } +func TestUpdateMissingFunction(t *testing.T) { + managerUnderTest, requestHandler := getEcho() + + provider := getProvider() + provider.ApiProvDomId = &domainID + otherId := "otherId" + (*provider.ApiProvFuncs)[0].ApiProvFuncId = &otherId + (*provider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF + (*provider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + managerUnderTest.registeredProviders[domainID] = provider + + // Modify the provider + updatedProvider := getProvider() + updatedProvider.ApiProvDomId = &domainID + (*updatedProvider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + newFunctionInfo := "New function info" + (*updatedProvider.ApiProvFuncs)[0].ApiProvFuncInfo = &newFunctionInfo + + result := testutil.NewRequest().Put("/registrations/"+domainID).WithJsonBody(updatedProvider).Go(t, requestHandler) + + var errorObj common29122.ProblemDetails + assert.Equal(t, http.StatusBadRequest, result.Code()) + err := result.UnmarshalBodyToObject(&errorObj) + assert.NoError(t, err, "error unmarshaling response") + assert.Equal(t, http.StatusBadRequest, *errorObj.Status) + assert.Contains(t, *errorObj.Cause, funcIdAPF) + assert.Contains(t, *errorObj.Cause, "not registered") +} + +func TestDeleteProvider(t *testing.T) { + managerUnderTest, requestHandler := getEcho() + + provider := getProvider() + provider.ApiProvDomId = &domainID + (*provider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + managerUnderTest.registeredProviders[domainID] = provider + assert.True(t, managerUnderTest.IsFunctionRegistered(funcIdAPF)) + + result := testutil.NewRequest().Delete("/registrations/"+domainID).Go(t, requestHandler) + + assert.Equal(t, http.StatusNoContent, result.Code()) + assert.False(t, managerUnderTest.IsFunctionRegistered(funcIdAPF)) +} func TestProviderHandlingValidation(t *testing.T) { _, requestHandler := getEcho() newProvider := provapi.APIProviderEnrolmentDetails{} - // Register a valid provider + // Register an invalid provider result := testutil.NewRequest().Post("/registrations").WithJsonBody(newProvider).Go(t, requestHandler) assert.Equal(t, http.StatusBadRequest, result.Code()) var problemDetails common29122.ProblemDetails err := result.UnmarshalBodyToObject(&problemDetails) assert.NoError(t, err, "error unmarshaling response") - badRequest := 400 - assert.Equal(t, &badRequest, problemDetails.Status) - errMsg := "Provider missing required ApiProvDomInfo" - assert.Equal(t, &errMsg, problemDetails.Cause) + assert.Equal(t, http.StatusBadRequest, *problemDetails.Status) + assert.Contains(t, *problemDetails.Cause, "missing") + assert.Contains(t, *problemDetails.Cause, "regSec") +} + +func TestGetExposedFunctionsForPublishingFunction(t *testing.T) { + managerUnderTest := NewProviderManager() + + provider := getProvider() + provider.ApiProvDomId = &domainID + (*provider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF + (*provider.ApiProvFuncs)[1].ApiProvFuncId = &funcIdAMF + (*provider.ApiProvFuncs)[2].ApiProvFuncId = &funcIdAEF + managerUnderTest.registeredProviders[domainID] = provider + managerUnderTest.registeredProviders[otherDomainID] = getOtherProvider() + + exposedFuncs := managerUnderTest.GetAefsForPublisher(funcIdAPF) + assert.Equal(t, 1, len(exposedFuncs)) + assert.Equal(t, funcIdAEF, exposedFuncs[0]) +} + +func getProvider() provapi.APIProviderEnrolmentDetails { + testFuncs := []provapi.APIProviderFunctionDetails{ + { + ApiProvFuncInfo: &funcInfoAPF, + ApiProvFuncRole: provapi.ApiProviderFuncRoleAPF, + RegInfo: provapi.RegistrationInformation{ + ApiProvPubKey: "key", + }, + }, + { + ApiProvFuncInfo: &funcInfoAMF, + ApiProvFuncRole: provapi.ApiProviderFuncRoleAMF, + RegInfo: provapi.RegistrationInformation{ + ApiProvPubKey: "key", + }, + }, + { + ApiProvFuncInfo: &funcInfoAEF, + ApiProvFuncRole: provapi.ApiProviderFuncRoleAEF, + RegInfo: provapi.RegistrationInformation{ + ApiProvPubKey: "key", + }, + }, + } + return provapi.APIProviderEnrolmentDetails{ + RegSec: "sec", + ApiProvDomInfo: &domainInfo, + ApiProvFuncs: &testFuncs, + } + +} + +func getOtherProvider() provapi.APIProviderEnrolmentDetails { + otherDomainInfo := "other domain" + otherFuncInfoAPF := "other as APF" + otherApfId := "APF_id_other_as_APF" + otherFuncInfoAMF := "other as AMF" + otherAmfId := "AMF_id_other_as_AMF" + otherFuncInfoAEF := "other as AEF" + otherAefId := "AEF_id_other_as_AEF" + testFuncs := []provapi.APIProviderFunctionDetails{ + { + ApiProvFuncId: &otherApfId, + ApiProvFuncInfo: &otherFuncInfoAPF, + ApiProvFuncRole: provapi.ApiProviderFuncRoleAPF, + }, + { + ApiProvFuncId: &otherAmfId, + ApiProvFuncInfo: &otherFuncInfoAMF, + ApiProvFuncRole: provapi.ApiProviderFuncRoleAMF, + }, + { + ApiProvFuncId: &otherAefId, + ApiProvFuncInfo: &otherFuncInfoAEF, + ApiProvFuncRole: provapi.ApiProviderFuncRoleAEF, + }, + } + return provapi.APIProviderEnrolmentDetails{ + ApiProvDomId: &otherDomainID, + ApiProvDomInfo: &otherDomainInfo, + ApiProvFuncs: &testFuncs, + } + } func getEcho() (*ProviderManager, *echo.Echo) {