From a7be68a4d77791bbe02c37f7ad8ae60b02e5679e Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Tue, 9 Oct 2018 11:31:32 -0500 Subject: Test the Python C JSON extension The C JSON parser was added quite a while ago, but unless you configure with --enable-shared and have the Python 2/3 development libraries installed, and the resulting python-ovs module installed, 'make check' won't actually test it. This patch changes Python-based tests to run from the $builddir/python directory and makes the tests configurable to use both JSON backends. There are some unicode failures in the C JSON extension that I left unfixed in this patch to make it easy to show run the new tests on broken code. The next patch in this set works around the issue. Signed-off-by: Terry Wilson Signed-off-by: Ben Pfaff Acked-by: Lucas Alvares Gomes --- python/automake.mk | 11 +++++++++++ python/ovs/json.py | 10 ++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'python') diff --git a/python/automake.mk b/python/automake.mk index 5a1e1da8a..21547f7ba 100644 --- a/python/automake.mk +++ b/python/automake.mk @@ -92,6 +92,17 @@ python-sdist: $(srcdir)/python/ovs/version.py $(ovs_pyfiles) python/ovs/dirs.py pypi-upload: $(srcdir)/python/ovs/version.py $(ovs_pyfiles) python/ovs/dirs.py (cd python/ && $(PYTHON) setup.py sdist upload) + +ALL_LOCAL += python-build +python-build:$(lib_LTLIBRARIES) + (cd $(srcdir)/python/ && $(PYTHON) setup.py build_py -d $(abs_top_builddir)/python && $(PYTHON) setup.py build_ext -b $(abs_top_builddir)/python -I$(abs_top_srcdir)/include:$(abs_top_builddir)/include -L$(abs_top_builddir)/lib/.libs) +if HAVE_PYTHON3 + (cd $(srcdir)/python/ && $(PYTHON3) setup.py build_py -d $(abs_top_builddir)/python && $(PYTHON3) setup.py build_ext -b $(abs_top_builddir)/python -I$(abs_top_srcdir)/include:$(abs_top_builddir)/include -L$(abs_top_builddir)/lib/.libs) + +CLEAN_LOCAL += python-clean +python-clean: + rm -rf $(abs_top_builddir)/python +endif else ovs-install-data-local: @: diff --git a/python/ovs/json.py b/python/ovs/json.py index e84063fc2..f06204e44 100644 --- a/python/ovs/json.py +++ b/python/ovs/json.py @@ -21,10 +21,13 @@ import sys import six +PARSER_C = 'C' +PARSER_PY = 'PYTHON' try: import ovs._json + PARSER = PARSER_C except ImportError: - pass + PARSER = PARSER_PY __pychecker__ = 'no-stringiter' @@ -91,10 +94,9 @@ class Parser(object): MAX_HEIGHT = 1000 def __new__(cls, *args, **kwargs): - try: + if PARSER == PARSER_C: return ovs._json.Parser(*args, **kwargs) - except NameError: - return super(Parser, cls).__new__(cls) + return super(Parser, cls).__new__(cls) def __init__(self, check_trailer=False): self.check_trailer = check_trailer -- cgit v1.2.1