X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=servicemanager%2Finternal%2Fprovidermanagement%2Fprovidermanagement_test.go;h=3d07f90e6980a6d63c2d9547934c5538b643d456;hb=refs%2Fchanges%2F11%2F12711%2F6;hp=f00afd0b510e2da1134bcea7898d85194efc26d4;hpb=ff5fb255f6c98317ffb69f40fc1f77e98bb650a6;p=nonrtric%2Fplt%2Fsme.git diff --git a/servicemanager/internal/providermanagement/providermanagement_test.go b/servicemanager/internal/providermanagement/providermanagement_test.go index f00afd0..3d07f90 100644 --- a/servicemanager/internal/providermanagement/providermanagement_test.go +++ b/servicemanager/internal/providermanagement/providermanagement_test.go @@ -21,8 +21,9 @@ package providermanagement import ( - "fmt" "net/http" + "net/http/httptest" + "net/url" "os" "strings" "testing" @@ -32,19 +33,22 @@ import ( "oransc.org/nonrtric/servicemanager/internal/common29122" "oransc.org/nonrtric/servicemanager/internal/envreader" "oransc.org/nonrtric/servicemanager/internal/kongclear" + provapi "oransc.org/nonrtric/servicemanager/internal/providermanagementapi" - "oransc.org/nonrtric/servicemanager/internal/publishservice" - publishapi "oransc.org/nonrtric/servicemanager/internal/publishserviceapi" "github.com/deepmap/oapi-codegen/pkg/middleware" "github.com/deepmap/oapi-codegen/pkg/testutil" echomiddleware "github.com/labstack/echo/v4/middleware" log "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" + + "oransc.org/nonrtric/capifcore" + "oransc.org/nonrtric/servicemanager/mockkong" ) var ( - domainID = "domain_id_Kong" + domainID = "domain_id_Kong" domainInfo = "Kong" funcInfoAPF = "rApp Kong as APF" funcIdAPF = "APF_id_rApp_Kong_as_APF" @@ -52,7 +56,15 @@ var ( funcIdAEF = "AEF_id_rApp_Kong_as_AEF" ) -var requestHandler *echo.Echo +var ( + eServiceManager *echo.Echo + eCapifWeb *echo.Echo + eKong *echo.Echo + mockConfigReader *envreader.MockConfigReader + serviceManagerServer *httptest.Server + capifServer *httptest.Server + mockKongServer *httptest.Server +) func TestMain(m *testing.M) { err := setupTest() @@ -68,30 +80,81 @@ func TestMain(m *testing.M) { } func setupTest() error { - myEnv, myPorts, err := envreader.ReadDotEnv() + // Start the mock Kong server + eKong = echo.New() + mockKong.RegisterHandlers(eKong) + mockKongServer = httptest.NewServer(eKong) + + // Parse the server URL + parsedMockKongURL, err := url.Parse(mockKongServer.URL) + if err != nil { + log.Fatalf("error parsing mock Kong URL: %v", err) + return err + } + + // Extract the host and port + mockKongHost := parsedMockKongURL.Hostname() + mockKongControlPlanePort := parsedMockKongURL.Port() + + eCapifWeb = echo.New() + capifcore.RegisterHandlers(eCapifWeb, nil, nil) + capifServer = httptest.NewServer(eCapifWeb) + + // Parse the server URL + parsedCapifURL, err := url.Parse(capifServer.URL) + if err != nil { + log.Fatalf("error parsing mock Kong URL: %v", err) + return err + } + + // Extract the host and port + capifHost := parsedCapifURL.Hostname() + capifPort := parsedCapifURL.Port() + + // Set up the mock config reader with the desired configuration for testing + mockConfigReader = &envreader.MockConfigReader{ + MockedConfig: map[string]string{ + "KONG_DOMAIN": "kong", + "KONG_PROTOCOL": "http", + "KONG_IPV4": mockKongHost, + "KONG_DATA_PLANE_PORT": "32080", + "KONG_CONTROL_PLANE_PORT": mockKongControlPlanePort, + "CAPIF_PROTOCOL": "http", + "CAPIF_IPV4": capifHost, + "CAPIF_PORT": capifPort, + "LOG_LEVEL": "Info", + "SERVICE_MANAGER_PORT": "8095", + "TEST_SERVICE_IPV4": "10.101.1.101", + "TEST_SERVICE_PORT": "30951", + }, + } + + myEnv, myPorts, err := mockConfigReader.ReadDotEnv() if err != nil { log.Fatal("error loading environment file on setupTest") return err } - requestHandler, err = getEcho(myEnv, myPorts) + eServiceManager = echo.New() + err = registerHandlers(eServiceManager, myEnv, myPorts) if err != nil { - log.Fatal("getEcho fatal error on setupTest") + log.Fatal("registerHandlers fatal error on setupTest") return err } + serviceManagerServer = httptest.NewServer(eServiceManager) + return err } -func teardown() error { - log.Trace("entering teardown") - t := new(testing.T) // Create a new testing.T instance for teardown +func capifCleanUp() { + t := new(testing.T) // Create a new testing.T instance for capifCleanUp // Delete the invoker invokerInfo := "invoker a" invokerId := "api_invoker_id_" + strings.Replace(invokerInfo, " ", "_", 1) - result := testutil.NewRequest().Delete("/api-invoker-management/v1/onboardedInvokers/"+invokerId).Go(t, requestHandler) + result := testutil.NewRequest().Delete("/api-invoker-management/v1/onboardedInvokers/"+invokerId).Go(t, eServiceManager) assert.Equal(t, http.StatusNoContent, result.Code()) // Delete the original published service @@ -99,7 +162,7 @@ func teardown() error { apiName := "apiName" apiId := "api_id_" + apiName - result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, requestHandler) + result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager) assert.Equal(t, http.StatusNoContent, result.Code()) // Delete the first published service @@ -107,21 +170,26 @@ func teardown() error { apiName = "apiName1" apiId = "api_id_" + apiName - result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, requestHandler) + result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager) assert.Equal(t, http.StatusNoContent, result.Code()) // Delete the second published service apiName = "apiName2" apiId = "api_id_" + apiName - result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, requestHandler) + result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager) assert.Equal(t, http.StatusNoContent, result.Code()) // Delete the provider - result = testutil.NewRequest().Delete("/api-provider-management/v1/registrations/"+domainID).Go(t, requestHandler) + result = testutil.NewRequest().Delete("/api-provider-management/v1/registrations/"+domainID).Go(t, eServiceManager) assert.Equal(t, http.StatusNoContent, result.Code()) +} + + +func teardown() error { + log.Trace("entering teardown") - myEnv, myPorts, err := envreader.ReadDotEnv() + myEnv, myPorts, err := mockConfigReader.ReadDotEnv() if err != nil { log.Fatal("error loading environment file") return err @@ -131,15 +199,20 @@ func teardown() error { if err != nil { log.Fatal("error clearing Kong on teardown") } - return err + + mockKongServer.Close() + capifServer.Close() + serviceManagerServer.Close() + + return nil } func TestRegisterValidProvider(t *testing.T) { - teardown() + capifCleanUp() // Register a valid provider newProvider := getProvider() - result := testutil.NewRequest().Post("/api-provider-management/v1/registrations").WithJsonBody(newProvider).Go(t, requestHandler) + result := testutil.NewRequest().Post("/api-provider-management/v1/registrations").WithJsonBody(newProvider).Go(t, eServiceManager) assert.Equal(t, http.StatusCreated, result.Code()) var resultProvider provapi.APIProviderEnrolmentDetails @@ -164,11 +237,11 @@ func TestRegisterValidProvider(t *testing.T) { assert.Equal(t, "http://example.com/api-provider-management/v1/registrations/"+*resultProvider.ApiProvDomId, result.Recorder.Header().Get(echo.HeaderLocation)) // Register same provider again should result in Forbidden - result = testutil.NewRequest().Post("/api-provider-management/v1/registrations").WithJsonBody(newProvider).Go(t, requestHandler) + result = testutil.NewRequest().Post("/api-provider-management/v1/registrations").WithJsonBody(newProvider).Go(t, eServiceManager) - var errorObj common29122.ProblemDetails assert.Equal(t, http.StatusForbidden, result.Code()) + var errorObj common29122.ProblemDetails err = result.UnmarshalBodyToObject(&errorObj) assert.NoError(t, err, "error unmarshaling response") assert.Equal(t, http.StatusForbidden, *errorObj.Status) @@ -196,7 +269,7 @@ func TestUpdateValidProviderWithNewFunction(t *testing.T) { }) updatedProvider.ApiProvFuncs = &testFuncs - result := testutil.NewRequest().Put("/api-provider-management/v1/registrations/"+domainID).WithJsonBody(updatedProvider).Go(t, requestHandler) + result := testutil.NewRequest().Put("/api-provider-management/v1/registrations/"+domainID).WithJsonBody(updatedProvider).Go(t, eServiceManager) var resultProvider provapi.APIProviderEnrolmentDetails assert.Equal(t, http.StatusOK, result.Code()) @@ -214,9 +287,9 @@ func TestDeleteProvider(t *testing.T) { provider := getProvider() provider.ApiProvDomId = &domainID (*provider.ApiProvFuncs)[0].ApiProvFuncId = &funcIdAPF - result := testutil.NewRequest().Delete("/api-provider-management/v1/registrations/"+domainID).Go(t, requestHandler) + result := testutil.NewRequest().Delete("/api-provider-management/v1/registrations/"+domainID).Go(t, eServiceManager) assert.Equal(t, http.StatusNoContent, result.Code()) - teardown() + capifCleanUp() } func getProvider() provapi.APIProviderEnrolmentDetails { @@ -243,48 +316,24 @@ func getProvider() provapi.APIProviderEnrolmentDetails { } } -func getEcho(myEnv map[string]string, myPorts map[string]int) (*echo.Echo, error) { +func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string]int) (err error) { capifProtocol := myEnv["CAPIF_PROTOCOL"] capifIPv4 := common29122.Ipv4Addr(myEnv["CAPIF_IPV4"]) capifPort := common29122.Port(myPorts["CAPIF_PORT"]) - kongDomain := myEnv["KONG_DOMAIN"] - kongProtocol := myEnv["KONG_PROTOCOL"] - kongIPv4 := common29122.Ipv4Addr(myEnv["KONG_IPV4"]) - kongDataPlanePort := common29122.Port(myPorts["KONG_DATA_PLANE_PORT"]) - kongControlPlanePort := common29122.Port(myPorts["KONG_CONTROL_PLANE_PORT"]) - - e := echo.New() // Register ProviderManagement providerManagerSwagger, err := provapi.GetSwagger() if err != nil { log.Fatalf("Error loading ProviderManagement swagger spec\n: %s", err) - return nil, err + return err } providerManagerSwagger.Servers = nil providerManager := NewProviderManager(capifProtocol, capifIPv4, capifPort) - var group *echo.Group - - group = e.Group("/api-provider-management/v1") + group := e.Group("/api-provider-management/v1") + group.Use(echomiddleware.Logger()) group.Use(middleware.OapiRequestValidator(providerManagerSwagger)) provapi.RegisterHandlersWithBaseURL(e, providerManager, "/api-provider-management/v1") - publishServiceSwagger, err := publishapi.GetSwagger() - if err != nil { - fmt.Fprintf(os.Stderr, "Error loading PublishService swagger spec\n: %s", err) - return nil, err - } - - publishServiceSwagger.Servers = nil - - ps := publishservice.NewPublishService(kongDomain, kongProtocol, kongIPv4, kongDataPlanePort, kongControlPlanePort, capifProtocol, capifIPv4, capifPort) - - group = e.Group("/published-apis/v1") - group.Use(echomiddleware.Logger()) - group.Use(middleware.OapiRequestValidator(publishServiceSwagger)) - publishapi.RegisterHandlersWithBaseURL(e, ps, "/published-apis/v1") - - // return ps, eventChannel, e - return e, err + return err }