"fmt"
"net/http"
"os"
+ "path"
+ "strings"
"testing"
"oransc.org/nonrtric/capifcore/internal/invokermanagementapi"
)
func TestOnboardInvoker(t *testing.T) {
- var err error
+ publishRegisterMock := publishmocks.PublishRegister{}
+ publishRegisterMock.On("AreAPIsPublished", mock.Anything).Return(true)
+ invokerUnderTest, requestHandler := getEcho(&publishRegisterMock)
+
+ aefProfiles := []publishserviceapi.AefProfile{
+ getAefProfile("aefId"),
+ }
apiId := "apiId"
- aefId := "aefId"
- apiRegisterMock := publishmocks.APIRegister{}
- apiRegisterMock.On("AreAPIsRegistered", mock.Anything).Return(true)
- invokerUnderTest, requestHandler := getEcho(&apiRegisterMock)
-
- description := "description"
- domainName := "domain"
- var protocol publishserviceapi.Protocol = "HTTP_1_1"
var apiList invokermanagementapi.APIList = []publishserviceapi.ServiceAPIDescription{
{
ApiId: &apiId,
- ApiName: "api",
- Description: &description,
- AefProfiles: &[]publishserviceapi.AefProfile{
- {
- AefId: aefId,
- DomainName: &domainName,
- Protocol: &protocol,
- Versions: []publishserviceapi.Version{
- {
- ApiVersion: "v1",
- Resources: &[]publishserviceapi.Resource{
- {
- ResourceName: "app",
- CommType: "REQUEST_RESPONSE",
- Uri: "uri",
- Operations: &[]publishserviceapi.Operation{
- "POST",
- },
- },
- },
- },
- },
- },
- },
+ AefProfiles: &aefProfiles,
},
}
invokerInfo := "invoker a"
- newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
- ApiInvokerInformation: &invokerInfo,
- NotificationDestination: "url",
- OnboardingInformation: invokermanagementapi.OnboardingInformation{
- ApiInvokerPublicKey: "key",
- },
- ApiList: &apiList,
- }
+ newInvoker := getInvoker(invokerInfo, apiList)
// Onboard a valid invoker
result := testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
assert.Equal(t, http.StatusCreated, result.Code())
var resultInvoker invokermanagementapi.APIInvokerEnrolmentDetails
- err = result.UnmarshalBodyToObject(&resultInvoker)
+ err := result.UnmarshalBodyToObject(&resultInvoker)
assert.NoError(t, err, "error unmarshaling response")
- assert.Equal(t, "api_invoker_id_invoker_a", *resultInvoker.ApiInvokerId)
+ wantedInvokerId := "api_invoker_id_" + strings.Replace(invokerInfo, " ", "_", 1)
+ assert.Equal(t, wantedInvokerId, *resultInvoker.ApiInvokerId)
assert.Equal(t, newInvoker.NotificationDestination, resultInvoker.NotificationDestination)
assert.Equal(t, newInvoker.OnboardingInformation.ApiInvokerPublicKey, resultInvoker.OnboardingInformation.ApiInvokerPublicKey)
- assert.Equal(t, "onboarding_secret_invoker_a", *resultInvoker.OnboardingInformation.OnboardingSecret)
+ wantedInvokerSecret := "onboarding_secret_" + strings.Replace(invokerInfo, " ", "_", 1)
+ assert.Equal(t, wantedInvokerSecret, *resultInvoker.OnboardingInformation.OnboardingSecret)
assert.Equal(t, "http://example.com/onboardedInvokers/"+*resultInvoker.ApiInvokerId, result.Recorder.Header().Get(echo.HeaderLocation))
- assert.True(t, invokerUnderTest.IsInvokerRegistered("api_invoker_id_invoker_a"))
- assert.True(t, invokerUnderTest.VerifyInvokerSecret("api_invoker_id_invoker_a", "onboarding_secret_invoker_a"))
- apiRegisterMock.AssertCalled(t, "AreAPIsRegistered", mock.Anything)
+ assert.True(t, invokerUnderTest.IsInvokerRegistered(wantedInvokerId))
+ assert.True(t, invokerUnderTest.VerifyInvokerSecret(wantedInvokerId, wantedInvokerSecret))
+ publishRegisterMock.AssertCalled(t, "AreAPIsPublished", mock.Anything)
// Onboard an invoker missing required NotificationDestination, should get 400 with problem details
invalidInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
var problemDetails common29122.ProblemDetails
err = result.UnmarshalBodyToObject(&problemDetails)
assert.NoError(t, err, "error unmarshaling response")
- badRequest := 400
+ badRequest := http.StatusBadRequest
assert.Equal(t, &badRequest, problemDetails.Status)
- errMsg := "Invoker missing required NotificationDestination"
- assert.Equal(t, &errMsg, problemDetails.Cause)
+ assert.Contains(t, *problemDetails.Cause, "missing")
+ assert.Contains(t, *problemDetails.Cause, "NotificationDestination")
// Onboard an invoker missing required OnboardingInformation.ApiInvokerPublicKey, should get 400 with problem details
invalidInvoker = invokermanagementapi.APIInvokerEnrolmentDetails{
err = result.UnmarshalBodyToObject(&problemDetails)
assert.NoError(t, err, "error unmarshaling response")
assert.Equal(t, &badRequest, problemDetails.Status)
- errMsg = "Invoker missing required OnboardingInformation.ApiInvokerPublicKey"
- assert.Equal(t, &errMsg, problemDetails.Cause)
+ assert.Contains(t, *problemDetails.Cause, "missing")
+ assert.Contains(t, *problemDetails.Cause, "OnboardingInformation.ApiInvokerPublicKey")
}
func TestDeleteInvoker(t *testing.T) {
- _, requestHandler := getEcho(nil)
+ invokerUnderTest, requestHandler := getEcho(nil)
newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
NotificationDestination: "url",
// Onboard an invoker
result := testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
- var resultInvoker invokermanagementapi.APIInvokerEnrolmentDetails
- result.UnmarshalBodyToObject(&resultInvoker)
invokerUrl := result.Recorder.Header().Get(echo.HeaderLocation)
+ assert.True(t, invokerUnderTest.IsInvokerRegistered(path.Base(invokerUrl)))
// Delete the invoker
result = testutil.NewRequest().Delete(invokerUrl).Go(t, requestHandler)
assert.Equal(t, http.StatusNoContent, result.Code())
+ assert.False(t, invokerUnderTest.IsInvokerRegistered(path.Base(invokerUrl)))
}
func TestUpdateInvoker(t *testing.T) {
var problemDetails common29122.ProblemDetails
err = result.UnmarshalBodyToObject(&problemDetails)
assert.NoError(t, err, "error unmarshaling response")
- badRequest := 400
+ badRequest := http.StatusBadRequest
assert.Equal(t, &badRequest, problemDetails.Status)
- errMsg := "Invoker missing required NotificationDestination"
- assert.Equal(t, &errMsg, problemDetails.Cause)
+ assert.Contains(t, *problemDetails.Cause, "missing")
+ assert.Contains(t, *problemDetails.Cause, "NotificationDestination")
// Update with an invoker missing required OnboardingInformation.ApiInvokerPublicKey, should get 400 with problem details
invalidInvoker.NotificationDestination = "url"
err = result.UnmarshalBodyToObject(&problemDetails)
assert.NoError(t, err, "error unmarshaling response")
assert.Equal(t, &badRequest, problemDetails.Status)
- errMsg = "Invoker missing required OnboardingInformation.ApiInvokerPublicKey"
- assert.Equal(t, &errMsg, problemDetails.Cause)
+ assert.Contains(t, *problemDetails.Cause, "missing")
+ assert.Contains(t, *problemDetails.Cause, "OnboardingInformation.ApiInvokerPublicKey")
// Update with an invoker with other ApiInvokerId than the one provided in the URL, should get 400 with problem details
invalidId := "1"
err = result.UnmarshalBodyToObject(&problemDetails)
assert.NoError(t, err, "error unmarshaling response")
assert.Equal(t, &badRequest, problemDetails.Status)
- errMsg = "Invoker ApiInvokerId not matching"
- assert.Equal(t, &errMsg, problemDetails.Cause)
+ assert.Contains(t, *problemDetails.Cause, "not matching")
+ assert.Contains(t, *problemDetails.Cause, "ApiInvokerId")
// Update an invoker that has not been onboarded, shold get 404 with problem details
missingId := "1"
assert.Equal(t, http.StatusNotFound, result.Code())
err = result.UnmarshalBodyToObject(&problemDetails)
assert.NoError(t, err, "error unmarshaling response")
- notFound := 404
+ notFound := http.StatusNotFound
assert.Equal(t, ¬Found, problemDetails.Status)
- errMsg = "The invoker to update has not been onboarded"
- assert.Equal(t, &errMsg, problemDetails.Cause)
+ assert.Contains(t, *problemDetails.Cause, "not been onboarded")
+ assert.Contains(t, *problemDetails.Cause, "invoker")
+}
+
+func TestGetInvokerApiList(t *testing.T) {
+ publishRegisterMock := publishmocks.PublishRegister{}
+ publishRegisterMock.On("AreAPIsPublished", mock.Anything).Return(true)
+ invokerUnderTest, requestHandler := getEcho(&publishRegisterMock)
+ // Onboard two invokers
+ aefProfiles := []publishserviceapi.AefProfile{
+ getAefProfile("aefId"),
+ }
+ apiId := "apiId"
+ var apiList invokermanagementapi.APIList = []publishserviceapi.ServiceAPIDescription{
+ {
+ ApiId: &apiId,
+ AefProfiles: &aefProfiles,
+ },
+ }
+ invokerInfo := "invoker a"
+ newInvoker := getInvoker(invokerInfo, apiList)
+ testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
+ aefProfiles = []publishserviceapi.AefProfile{
+ getAefProfile("aefId2"),
+ }
+ apiId2 := "apiId2"
+ apiList = []publishserviceapi.ServiceAPIDescription{
+ {
+ ApiId: &apiId2,
+ AefProfiles: &aefProfiles,
+ },
+ }
+ newInvoker = getInvoker("invoker b", apiList)
+ testutil.NewRequest().Post("/onboardedInvokers").WithJsonBody(newInvoker).Go(t, requestHandler)
+
+ wantedApiList := invokerUnderTest.GetInvokerApiList("api_invoker_id_" + strings.Replace(invokerInfo, " ", "_", 1))
+ assert.NotNil(t, wantedApiList)
+ assert.Equal(t, apiId, *(*wantedApiList)[0].ApiId)
}
-func getEcho(apiRegister publishservice.APIRegister) (*InvokerManager, *echo.Echo) {
+func getEcho(publishRegister publishservice.PublishRegister) (*InvokerManager, *echo.Echo) {
swagger, err := invokermanagementapi.GetSwagger()
if err != nil {
fmt.Fprintf(os.Stderr, "Error loading swagger spec\n: %s", err)
swagger.Servers = nil
- im := NewInvokerManager(apiRegister)
+ im := NewInvokerManager(publishRegister)
e := echo.New()
e.Use(echomiddleware.Logger())
invokermanagementapi.RegisterHandlers(e, im)
return im, e
}
+
+func getAefProfile(aefId string) publishserviceapi.AefProfile {
+ return publishserviceapi.AefProfile{
+ AefId: aefId,
+ Versions: []publishserviceapi.Version{
+ {
+ Resources: &[]publishserviceapi.Resource{
+ {
+ CommType: "REQUEST_RESPONSE",
+ },
+ },
+ },
+ },
+ }
+}
+
+func getInvoker(invokerInfo string, apiList invokermanagementapi.APIList) invokermanagementapi.APIInvokerEnrolmentDetails {
+ newInvoker := invokermanagementapi.APIInvokerEnrolmentDetails{
+ ApiInvokerInformation: &invokerInfo,
+ NotificationDestination: "url",
+ OnboardingInformation: invokermanagementapi.OnboardingInformation{
+ ApiInvokerPublicKey: "key",
+ },
+ ApiList: &apiList,
+ }
+ return newInvoker
+}