You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jd...@apache.org on 2023/04/12 19:49:14 UTC
[qpid-python] branch main updated: QPID-8170: fix qpid-python-test discovery broken by commit 85348b01 (#18)
This is an automated email from the ASF dual-hosted git repository.
jdanek pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-python.git
The following commit(s) were added to refs/heads/main by this push:
new 71171f7 QPID-8170: fix qpid-python-test discovery broken by commit 85348b01 (#18)
71171f7 is described below
commit 71171f7ea61b3ebfef6217f807a35db88fef905d
Author: Jiri Daněk <jd...@redhat.com>
AuthorDate: Wed Apr 12 21:49:09 2023 +0200
QPID-8170: fix qpid-python-test discovery broken by commit 85348b01 (#18)
The problem stems from the way the testcode imports the production code, so that when both have a module of the same name, the test runner descends into the production code when discovering tests, instead of into the test code.
```
{code:title=qpid/tests/messaging/__init__.py}
from qpid.tests.messaging.implementation import *
[...]
from . import address, endpoints, message, selector
{code}
The file imported on the first line contains
{code:title=qpid/tests/messaging/implementation.py}
from qpid.messaging import *
{code}
```
and {{qpid.messaging}} contains its own {{address.py}} submodule.
Therefore, when {{qpid-test-runner}} tries to access {{qpid.tests.messaging.mesage}}, it actually gets {{qpid.messaging.message}}, which was imported first. But that does not contain any tests, and the message tests are missed and never executed.
This only started happening after my relative imports modernizing commit https://github.com/apache/qpid-python/commit/9651001c6fe0b65e538a96e27df36582b7ccb004.
Before, Totals: 349 tests, 349 passed, 0 skipped, 0 ignored, 0 failed and Totals: 678 tests, 585 passed, 93 skipped, 0 ignored, 0 failed (https://github.com/apache/qpid-python/actions/runs/4661323947/jobs/8250463871)
After, Totals: 218 tests, 218 passed, 0 skipped, 0 ignored, 0 failed and Totals: 547 tests, 454 passed, 93 skipped, 0 ignored, 0 failed (https://github.com/apache/qpid-python/actions/runs/4661535006/jobs/8250915935)
---
qpid-python-test | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/qpid-python-test b/qpid-python-test
index ac7d70b..ea575ae 100755
--- a/qpid-python-test
+++ b/qpid-python-test
@@ -22,6 +22,8 @@
from __future__ import absolute_import
from __future__ import print_function
+
+import importlib
import logging, optparse, os, struct, sys, time, traceback, types
from fnmatch import fnmatchcase as match
from getopt import GetoptError
@@ -532,7 +534,19 @@ class ModuleScanner:
names = dir(obj)
names.sort()
for name in names:
- yield getattr(obj, name)
+ child = getattr(obj, name)
+ if type(child) is not types.ModuleType:
+ yield child
+ else:
+ # import the submodule of the given name afresh
+ absname = "%s.%s" % (obj.__name__, name)
+ try:
+ yield importlib.import_module(absname)
+ except ImportError:
+ # if module m imports module n, then we end up trying to import module m.n, which does not exist
+ # therefore fail only if the import we tried looks very reasonable but it still did not succeed
+ if absname == child.__name__:
+ raise
def extract(self, obj):
# the None is required for older versions of python
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org