From 37157dad514b85d008cf8e01a889889d8869f02b Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Thu, 1 Dec 2022 11:22:06 +0100 Subject: tests: multiple apidir locations To support testing of external plugins, add support to the test framework and PAPI for specifying a list of locations to look for api.json files. Type: improvement Signed-off-by: Ole Troan Change-Id: I128a306e3c091dc8ef994801b1470b82d2f4595d Signed-off-by: Ole Troan --- src/vpp-api/python/vpp_papi/vpp_papi.py | 7 ++++++- test/Makefile | 7 ++++++- test/config.py | 8 ++++++++ test/vpp_papi_provider.py | 2 +- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/vpp-api/python/vpp_papi/vpp_papi.py b/src/vpp-api/python/vpp_papi/vpp_papi.py index 6755e227ed1..34d57232865 100644 --- a/src/vpp-api/python/vpp_papi/vpp_papi.py +++ b/src/vpp-api/python/vpp_papi/vpp_papi.py @@ -449,7 +449,12 @@ class VPPApiClient: if not apifiles: # Pick up API definitions from default directory try: - apifiles = VPPApiJSONFiles.find_api_files(self.apidir) + if isinstance(self.apidir, list): + apifiles = [] + for d in self.apidir: + apifiles += VPPApiJSONFiles.find_api_files(d) + else: + apifiles = VPPApiJSONFiles.find_api_files(self.apidir) except (RuntimeError, VPPApiError): # In test mode we don't care that we can't find the API files if testmode: diff --git a/test/Makefile b/test/Makefile index 87b121ac11f..e5e997583db 100644 --- a/test/Makefile +++ b/test/Makefile @@ -249,7 +249,12 @@ ifneq ($(findstring $(API_FUZZ),1 y yes),) ARG16=--api-fuzz=on endif -EXTRA_ARGS=$(ARG0) $(ARG1) $(ARG2) $(ARG3) $(ARG4) $(ARG5) $(ARG6) $(ARG7) $(ARG8) $(ARG9) $(ARG10) $(ARG11) $(ARG12) $(ARG13) $(ARG14) $(ARG15) $(ARG16) +ARG17= +ifneq ($(EXTERN_APIDIR),) +ARG17=--extern-apidir=$(EXTERN_APIDIR) +endif + +EXTRA_ARGS=$(ARG0) $(ARG1) $(ARG2) $(ARG3) $(ARG4) $(ARG5) $(ARG6) $(ARG7) $(ARG8) $(ARG9) $(ARG10) $(ARG11) $(ARG12) $(ARG13) $(ARG14) $(ARG15) $(ARG16) $(ARG17) RUN_TESTS_ARGS=--failed-dir=$(FAILED_DIR) --verbose=$(V) --jobs=$(TEST_JOBS) --filter=$(TEST) --retries=$(RETRIES) --venv-dir=$(VENV_PATH) --vpp-ws-dir=$(WS_ROOT) --vpp-tag=$(TAG) --rnd-seed=$(RND_SEED) --vpp-worker-count="$(VPP_WORKER_COUNT)" --keep-pcaps $(PLUGIN_PATH_ARGS) $(TEST_PLUGIN_PATH_ARGS) $(EXTRA_ARGS) RUN_SCRIPT_ARGS=--python-opts=$(PYTHON_OPTS) diff --git a/test/config.py b/test/config.py index e73555723ff..d2f14c82e19 100644 --- a/test/config.py +++ b/test/config.py @@ -301,6 +301,14 @@ parser.add_argument( help="directory containing external plugins", ) +parser.add_argument( + "--extern-apidir", + action="append", + type=directory, + default=[], + help="directory to look for API JSON files", +) + parser.add_argument( "--coredump-size", action="store", diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py index 148eca2053b..6c3cd7f83fa 100644 --- a/test/vpp_papi_provider.py +++ b/test/vpp_papi_provider.py @@ -238,7 +238,7 @@ class VppPapiProvider(object): # install_dir is a class attribute. We need to set it before # calling the constructor. - VPPApiClient.apidir = config.vpp_install_dir + VPPApiClient.apidir = config.extern_apidir + [config.vpp_install_dir] self.vpp = VPPApiClient( logger=test_class.logger, -- cgit 1.2.3-korg