On Wed, 2019-03-20 at 17:53 -0400, Cole Robinson wrote: > And use it in the test cases to reduce the amount of objects we act > on. This makes the test output quicker and less '.' spammy > > This also revealed that osinfo-db doesn't actually track any 'image' > data despite there being a test for verifying the URLs... > > Signed-off-by: Cole Robinson <crobinso@xxxxxxxxxx> > --- > tests/test_devices.py | 2 +- > tests/test_resources.py | 10 +++++----- > tests/test_urls.py | 6 +++--- > tests/util.py | 37 +++++++++++++++++++++++++++++++------ > 4 files changed, 40 insertions(+), 15 deletions(-) > > diff --git a/tests/test_devices.py b/tests/test_devices.py > index 8696ccc..0bcf8fb 100644 > --- a/tests/test_devices.py > +++ b/tests/test_devices.py > @@ -4,7 +4,7 @@ > from . import util > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_devices=True) > def test_devices_duplication(_os): > broken = [] > related = util.DataFiles.get_os_related(_os) > diff --git a/tests/test_resources.py b/tests/test_resources.py > index 6e00dba..46bdebb 100644 > --- a/tests/test_resources.py > +++ b/tests/test_resources.py > @@ -8,7 +8,7 @@ import logging > from . import util > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_resources=True) > def test_resources_uniqueness_by_arch(_os): > result = defaultdict(list) > for resources in _os.resources_list: > @@ -18,7 +18,7 @@ def test_resources_uniqueness_by_arch(_os): > assert len(value) == 1 > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_resources=True) > def test_minimum_recommended_resources(_os): > _resources_helper(_os, > _os.get_minimum_resources, > @@ -27,7 +27,7 @@ def test_minimum_recommended_resources(_os): > 'recommended') > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_resources=True) > def test_recommended_maximum_resources(_os): > _resources_helper(_os, > _os.get_recommended_resources, > @@ -36,7 +36,7 @@ def test_recommended_maximum_resources(_os): > 'maximum') > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_resources=True) > def test_recommended_network_install_resources(_os): > _resources_helper(_os, > _os.get_recommended_resources, > @@ -45,7 +45,7 @@ def > test_recommended_network_install_resources(_os): > 'network-install') > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_resources=True) > def test_network_install_maximum_resources(_os): > _resources_helper(_os, > _os.get_network_install_resources, > diff --git a/tests/test_urls.py b/tests/test_urls.py > index b6dcd62..552e6eb 100644 > --- a/tests/test_urls.py > +++ b/tests/test_urls.py > @@ -7,7 +7,7 @@ import pytest > from . import util > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_images=True) > @pytest.mark.skipif(os.environ.get('OSINFO_DB_NETWORK_TESTS') is > None, > reason='Network related tests are not enabled') > def test_images_url(_os): > @@ -19,7 +19,7 @@ def test_images_url(_os): > assert broken == [] > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_trees=True) > @pytest.mark.skipif(os.environ.get('OSINFO_DB_NETWORK_TESTS') is > None, > reason='Network related tests are not enabled') > def test_medias_url(_os): > @@ -31,7 +31,7 @@ def test_medias_url(_os): > assert broken == [] > > > -@util.os_parametrize('_os') > +@util.os_parametrize('_os', filter_media=True) > @pytest.mark.skipif(os.environ.get('OSINFO_DB_NETWORK_TESTS') is > None, > reason='Network related tests are not enabled') > def test_trees_url(_os): > diff --git a/tests/util.py b/tests/util.py > index 76e08da..08fbd3f 100644 > --- a/tests/util.py > +++ b/tests/util.py > @@ -46,12 +46,31 @@ class _DataFiles(): > return [p for p in self._get_all_xml() if > p.startswith(os.path.join(self.datadir, dirname))] > > - def oses(self): > + def oses(self, filter_media=False, filter_trees=False, > filter_images=False, > + filter_devices=False, filter_resources=False): > + """ > + Return a list of osinfo.Os objects > + > + :param filter_FOO: Only return objects that have at least > one > + instance of a FOO object > + """ > if not self._oses_cache: > for path in self._filter_xml('os'): > osroot = ET.parse(path).getroot().find('os') > self._oses_cache.append(osinfo.Os(osroot)) > - return self._oses_cache > + > + oses = self._oses_cache[:] > + if filter_media: > + oses = [o for o in oses if o.medias] > + if filter_trees: > + oses = [o for o in oses if o.trees] > + if filter_images: > + oses = [o for o in oses if o.images] > + if filter_devices: > + oses = [o for o in oses if o.devices] > + if filter_resources: > + oses = [o for o in oses if o.resources_list] > + return oses > > def get_os_related(self, _os): > if _os.internal_id not in self._os_related_cache: > @@ -86,9 +105,15 @@ class _DataFiles(): > DataFiles = _DataFiles() > > > -def os_parametrize(argname): > +def os_parametrize(argname, **kwargs): > """ > - Helper for parametrizing a test with an OS list. > + Helper for parametrizing a test with an OS list. Passthrough any > + extra arguments to DataFiles.oses() > """ > - oses = DataFiles.oses() > - return pytest.mark.parametrize(argname, oses, ids=lambda o: > o.shortid) > + def ids_cb(osxml): > + # pytest passes us a weird value when oses is empty, like > for > + # test_urls image testing at the time of this commit > + return getattr(osxml, "shortid", str(osxml)) > + > + oses = DataFiles.oses(**kwargs) > + return pytest.mark.parametrize(argname, oses, ids=ids_cb) Reviewed-by: Fabiano Fidêncio <fidencio@xxxxxxxxxx> Best Regards, -- Fabiano Fidêncio _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo