[Libosinfo] [PATCH osinfo-db 08/15] tests: Sort input OS/files before testing
Cole Robinson
crobinso at redhat.com
Mon Mar 25 14:32:12 UTC 2019
Right now we can get quite random ordering of test case running,
based on whatever order os.listdir() returns. This sorts filenames
and OS shortids with a number aware sort function which gives more
sensible pytest-3 -vv output
Signed-off-by: Cole Robinson <crobinso at redhat.com>
---
tests/test_isoinfo.py | 3 ++-
tests/util.py | 17 ++++++++++++++++-
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/tests/test_isoinfo.py b/tests/test_isoinfo.py
index 07d6550..8809126 100644
--- a/tests/test_isoinfo.py
+++ b/tests/test_isoinfo.py
@@ -19,7 +19,8 @@ def _get_isodatapaths():
'isodata')
ret = []
- for osdir in glob.glob(os.path.join(isodata_path, "*", "*")):
+ allpaths = glob.glob(os.path.join(isodata_path, "*", "*"))
+ for osdir in sorted(allpaths, key=util.human_sort):
osname = os.path.basename(osdir)
isodatapaths = glob.glob(os.path.join(osdir, "*"))
ret.append((osname, isodatapaths))
diff --git a/tests/util.py b/tests/util.py
index bf04b74..a2e88f6 100644
--- a/tests/util.py
+++ b/tests/util.py
@@ -4,6 +4,7 @@
from collections import defaultdict
import os
+import re
import xml.etree.ElementTree as ET
import pytest
@@ -11,6 +12,20 @@ import pytest
from . import osinfo
+def human_sort(text):
+ # natural/human sorting
+ # https://stackoverflow.com/questions/5967500/how-to-correctly-sort-a-string-with-a-number-inside
+ def atof(t):
+ try:
+ retval = float(t)
+ except ValueError:
+ retval = t
+ return retval
+
+ return [atof(c) for c in
+ re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]
+
+
class _DataFiles():
"""
Track a list of DATA_DIR XML files and provide APIs for querying
@@ -33,7 +48,7 @@ class _DataFiles():
"""
if not self._all_xml_cache:
for (dirpath, _, filenames) in os.walk(self.datadir):
- for filename in filenames:
+ for filename in sorted(filenames, key=human_sort):
if not filename.endswith('.xml'):
continue
self._all_xml_cache.append(os.path.join(dirpath, filename))
--
2.21.0
More information about the Libosinfo
mailing list