Update invokermanagement 28/9928/1
authorelinuxhenrik <henrik.b.andersson@est.tech>
Fri, 2 Dec 2022 13:28:24 +0000 (14:28 +0100)
committerelinuxhenrik <henrik.b.andersson@est.tech>
Fri, 2 Dec 2022 13:28:34 +0000 (14:28 +0100)
Issue-ID: NONRTRIC-814
Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
Change-Id: I2b479dc2148aa5f673f1292b4de2e11c8e4e862b

capifcore/internal/invokermanagement/invokermanagement.go
capifcore/internal/invokermanagement/invokermanagement_test.go

index 69d7149..c1ff264 100644 (file)
@@ -88,7 +88,11 @@ func (im *InvokerManager) VerifyInvokerSecret(invokerId, secret string) bool {
 func (im *InvokerManager) GetInvokerApiList(invokerId string) *invokerapi.APIList {
        invoker, ok := im.onboardedInvokers[invokerId]
        if ok {
-               return invoker.ApiList
+               var apiList invokerapi.APIList = im.publishRegister.GetAllPublishedServices()
+               im.lock.Lock()
+               defer im.lock.Unlock()
+               invoker.ApiList = &apiList
+               return &apiList
        }
        return nil
 }
index 0b90de8..c662d6d 100644 (file)
@@ -23,7 +23,6 @@ import (
        "fmt"
        "net/http"
        "os"
-       "path"
        "strings"
        "testing"
 
@@ -113,61 +112,53 @@ func TestOnboardInvoker(t *testing.T) {
 }
 
 func TestDeleteInvoker(t *testing.T) {
-       publishRegisterMock := publishmocks.PublishRegister{}
-       publishRegisterMock.On("GetAllPublishedServices").Return([]publishserviceapi.ServiceAPIDescription{})
-       invokerUnderTest, requestHandler := getEcho(&publishRegisterMock)
+       invokerUnderTest, requestHandler := getEcho(nil)
 
+       invokerId := "invokerId"
        newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
+               ApiInvokerId:            &invokerId,
                NotificationDestination: "url",
                OnboardingInformation: invokermanagementapi.OnboardingInformation{
                        ApiInvokerPublicKey: "key",
                },
        }
-
-       // Onboard an invoker
-       result := testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
-
-       invokerUrl := result.Recorder.Header().Get(echo.HeaderLocation)
-       assert.True(t, invokerUnderTest.IsInvokerRegistered(path.Base(invokerUrl)))
+       invokerUnderTest.onboardedInvokers[invokerId] = newInvoker
+       assert.True(t, invokerUnderTest.IsInvokerRegistered(invokerId))
 
        // Delete the invoker
-       result = testutil.NewRequest().Delete(invokerUrl).Go(t, requestHandler)
+       result := testutil.NewRequest().Delete("/onboardedInvokers/"+invokerId).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusNoContent, result.Code())
-       assert.False(t, invokerUnderTest.IsInvokerRegistered(path.Base(invokerUrl)))
+       assert.False(t, invokerUnderTest.IsInvokerRegistered(invokerId))
 }
 
 func TestUpdateInvoker(t *testing.T) {
        publishRegisterMock := publishmocks.PublishRegister{}
        publishRegisterMock.On("GetAllPublishedServices").Return([]publishserviceapi.ServiceAPIDescription{})
-       _, requestHandler := getEcho(&publishRegisterMock)
+       serviceUnderTest, requestHandler := getEcho(&publishRegisterMock)
 
-       newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
+       invokerId := "invokerId"
+       invoker := invokermanagementapi.APIInvokerEnrolmentDetails{
+               ApiInvokerId:            &invokerId,
                NotificationDestination: "url",
                OnboardingInformation: invokermanagementapi.OnboardingInformation{
                        ApiInvokerPublicKey: "key",
                },
        }
-
-       // Onboard an invoker
-       result := testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
-       var resultInvoker invokermanagementapi.APIInvokerEnrolmentDetails
-       result.UnmarshalBodyToObject(&resultInvoker)
+       serviceUnderTest.onboardedInvokers[invokerId] = invoker
 
        // Update the invoker with valid invoker, should return 200 with updated invoker details
-       invokerId := resultInvoker.ApiInvokerId
-       invokerUrl := result.Recorder.Header().Get(echo.HeaderLocation)
-       resultInvoker.ApiList = nil
        newNotifURL := "newUrl"
-       resultInvoker.NotificationDestination = common29122.Uri(newNotifURL)
+       invoker.NotificationDestination = common29122.Uri(newNotifURL)
        newPublicKey := "newPublicKey"
-       resultInvoker.OnboardingInformation.ApiInvokerPublicKey = newPublicKey
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(resultInvoker).Go(t, requestHandler)
+       invoker.OnboardingInformation.ApiInvokerPublicKey = newPublicKey
+       result := testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invoker).Go(t, requestHandler)
 
+       var resultInvoker invokermanagementapi.APIInvokerEnrolmentDetails
        assert.Equal(t, http.StatusOK, result.Code())
        err := result.UnmarshalBodyToObject(&resultInvoker)
        assert.NoError(t, err, "error unmarshaling response")
-       assert.Equal(t, invokerId, resultInvoker.ApiInvokerId)
+       assert.Equal(t, invokerId, *resultInvoker.ApiInvokerId)
        assert.Equal(t, newNotifURL, string(resultInvoker.NotificationDestination))
        assert.Equal(t, newPublicKey, resultInvoker.OnboardingInformation.ApiInvokerPublicKey)
 
@@ -176,10 +167,10 @@ func TestUpdateInvoker(t *testing.T) {
                ApiInvokerPublicKey: "key",
        }
        invalidInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
-               ApiInvokerId:          invokerId,
+               ApiInvokerId:          &invokerId,
                OnboardingInformation: validOnboardingInfo,
        }
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(invalidInvoker).Go(t, requestHandler)
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invalidInvoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusBadRequest, result.Code())
        var problemDetails common29122.ProblemDetails
@@ -193,7 +184,7 @@ func TestUpdateInvoker(t *testing.T) {
        // Update with an invoker missing required OnboardingInformation.ApiInvokerPublicKey, should get 400 with problem details
        invalidInvoker.NotificationDestination = "url"
        invalidInvoker.OnboardingInformation = invokermanagementapi.OnboardingInformation{}
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(invalidInvoker).Go(t, requestHandler)
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invalidInvoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusBadRequest, result.Code())
        err = result.UnmarshalBodyToObject(&problemDetails)
@@ -206,7 +197,7 @@ func TestUpdateInvoker(t *testing.T) {
        invalidId := "1"
        invalidInvoker.ApiInvokerId = &invalidId
        invalidInvoker.OnboardingInformation = validOnboardingInfo
-       result = testutil.NewRequest().Put(invokerUrl).WithJsonBody(invalidInvoker).Go(t, requestHandler)
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+invokerId).WithJsonBody(invalidInvoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusBadRequest, result.Code())
        err = result.UnmarshalBodyToObject(&problemDetails)
@@ -217,8 +208,8 @@ func TestUpdateInvoker(t *testing.T) {
 
        // Update an invoker that has not been onboarded, shold get 404 with problem details
        missingId := "1"
-       newInvoker.ApiInvokerId = &missingId
-       result = testutil.NewRequest().Put("/onboardedInvokers/"+missingId).WithJsonBody(newInvoker).Go(t, requestHandler)
+       invoker.ApiInvokerId = &missingId
+       result = testutil.NewRequest().Put("/onboardedInvokers/"+missingId).WithJsonBody(invoker).Go(t, requestHandler)
 
        assert.Equal(t, http.StatusNotFound, result.Code())
        err = result.UnmarshalBodyToObject(&problemDetails)
@@ -250,16 +241,22 @@ func TestGetInvokerApiList(t *testing.T) {
        })
        publishRegisterMock := publishmocks.PublishRegister{}
        publishRegisterMock.On("GetAllPublishedServices").Return(apiList)
-       invokerUnderTest, requestHandler := getEcho(&publishRegisterMock)
+       invokerUnderTest, _ := getEcho(&publishRegisterMock)
 
        invokerInfo := "invoker a"
        newInvoker := getInvoker(invokerInfo)
-       testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
-       newInvoker = getInvoker("invoker b")
-       testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
-
-       wantedApiList := invokerUnderTest.GetInvokerApiList("api_invoker_id_" + strings.Replace(invokerInfo, " ", "_", 1))
+       invokerAId := "api_invoker_id_" + strings.ReplaceAll(invokerInfo, " ", "_")
+       newInvoker.ApiInvokerId = &invokerAId
+       invokerUnderTest.onboardedInvokers[invokerAId] = newInvoker
+       invokerInfo = "invoker b"
+       newInvoker = getInvoker(invokerInfo)
+       invokerId := "api_invoker_id_" + strings.ReplaceAll(invokerInfo, " ", "_")
+       newInvoker.ApiInvokerId = &invokerId
+       invokerUnderTest.onboardedInvokers[invokerId] = newInvoker
+
+       wantedApiList := invokerUnderTest.GetInvokerApiList(invokerAId)
        assert.NotNil(t, wantedApiList)
+       assert.Len(t, *wantedApiList, 2)
        assert.Equal(t, apiId, *(*wantedApiList)[0].ApiId)
 }