From d40f1556aba6c25dfa73bf0d652dbc8b79f8f8d6 Mon Sep 17 00:00:00 2001 From: HeshanSudarshana Date: Wed, 24 Jan 2024 00:10:04 +0530 Subject: [PATCH 1/2] Add validation for empty configs value for params file --- import-export-cli/impl/importAPI.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/import-export-cli/impl/importAPI.go b/import-export-cli/impl/importAPI.go index ae44d4007..2c12adac2 100644 --- a/import-export-cli/impl/importAPI.go +++ b/import-export-cli/impl/importAPI.go @@ -289,7 +289,7 @@ func envParamsFileProcess(importPath, paramsPath, importEnvironment string) erro } // envParamsDirectoryProcess function is used to process the environment parameters when they are provided as a -//directory +// directory func envParamsDirectoryProcess(importPath, paramsPath, importEnvironment string) error { apiParams, err := params.LoadApiParamsFromDirectory(paramsPath) if err != nil { @@ -362,6 +362,10 @@ func handleCustomizedParameters(importPath, paramsPath, importEnvironment string // Process env params and create the intermediate_params.yaml file to pass to the server func handleEnvParams(tempDirectory string, destDirectory string, environmentParams *params.Environment) error { // read api params from external parameters file + if len(environmentParams.Config) == 0 { + return errors.New("configs value is empty in the provided parameters") + } + envParamsJson, err := jsoniter.Marshal(environmentParams.Config) if err != nil { return err From c77c9792d0ee65e8915fdc75a0a55f440a0994be Mon Sep 17 00:00:00 2001 From: HeshanSudarshana Date: Wed, 24 Jan 2024 11:49:52 +0530 Subject: [PATCH 2/2] Add testcase for API import with an invalid params file --- .../integration/envSpecific_test.go | 23 +++++++++++++++++++ .../invalid_api_params_endpoint.yaml | 7 ++++++ .../integration/testutils/testConstants.go | 7 ++++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 import-export-cli/integration/testdata/EnvParamsFiles/invalid_api_params_endpoint.yaml diff --git a/import-export-cli/integration/envSpecific_test.go b/import-export-cli/integration/envSpecific_test.go index 533966958..0e51ed15a 100644 --- a/import-export-cli/integration/envSpecific_test.go +++ b/import-export-cli/integration/envSpecific_test.go @@ -63,6 +63,29 @@ func TestEnvironmentSpecificParamsEndpoint(t *testing.T) { } } +// Try to import an API with the external params file with invalid format (missing the configs key) +func TestInvalidEnvironmentSpecificParamsEndpoint(t *testing.T) { + for _, user := range testCaseUsers { + t.Run(user.Description, func(t *testing.T) { + dev := GetDevClient() + prod := GetProdClient() + + api := testutils.AddAPI(t, dev, user.ApiCreator.Username, user.ApiCreator.Password) + + args := &testutils.ApiImportExportTestArgs{ + ApiProvider: testutils.Credentials{Username: user.ApiCreator.Username, Password: user.ApiCreator.Password}, + CtlUser: testutils.Credentials{Username: user.CtlUser.Username, Password: user.CtlUser.Password}, + Api: api, + SrcAPIM: dev, + DestAPIM: prod, + ParamsFile: testutils.InvalidAPIEndpointParamsFile, + } + + testutils.ValidateAPIImportFailure(t, args) + }) + } +} + // Add an API to one environment, export it and re-import it to another environment by setting // the configs for endpoints using the params file func TestEnvironmentSpecificParamsEndpointConfigs(t *testing.T) { diff --git a/import-export-cli/integration/testdata/EnvParamsFiles/invalid_api_params_endpoint.yaml b/import-export-cli/integration/testdata/EnvParamsFiles/invalid_api_params_endpoint.yaml new file mode 100644 index 000000000..0a25787e4 --- /dev/null +++ b/import-export-cli/integration/testdata/EnvParamsFiles/invalid_api_params_endpoint.yaml @@ -0,0 +1,7 @@ +environments: + - name: production + endpoints: + production: + url: 'https://prod.wso2.com' + sandbox: + url: 'https://sand.wso2.com' diff --git a/import-export-cli/integration/testutils/testConstants.go b/import-export-cli/integration/testutils/testConstants.go index 8d0102052..9526eb390 100644 --- a/import-export-cli/integration/testutils/testConstants.go +++ b/import-export-cli/integration/testutils/testConstants.go @@ -18,7 +18,7 @@ package testutils -//Environment management related test constants +// Environment management related test constants const ApictlInitMessage = "apictl is a Command Line Tool for Importing and Exporting APIs and Applications between " + "different environments of WSO2 API Manager" const CustomTestExportDirectory = "CustomExportDirectory" @@ -34,7 +34,7 @@ const TestMigrationDirectorySuffix = "/migration" const DefaultApictlTestAppName = "default-apictl-app" -//Export test cases +// Export test cases const DevFirstDefaultAPIName = "SwaggerPetstoreNew" const DevFirstSwagger2APIName = "PizzaShackAPI" const OpenAPI3DefinitionWithoutEndpointsAPIName = "PizzaShackAPI" @@ -136,6 +136,9 @@ const APIAwsEndpointWithStoredCredentialsParamsFile = EnvParamsFilesDir + "/api_ // APIDynamicEndpointParamsFile : Dynamic Endpoint with stored credentials in api_params.yaml const APIDynamicEndpointParamsFile = EnvParamsFilesDir + "/api_params_dynamic_endpoint.yaml" +// InvalidAPIEndpointParamsFile : Invalid Endpoint URL api_params.yaml +const InvalidAPIEndpointParamsFile = EnvParamsFilesDir + "/invalid_api_params_endpoint.yaml" + // API types const APITypeREST = "HTTP" const APITypeSoap = "SOAP"