[Libosinfo] [PATCH osinfo-db 5/7] tests: utils: Provide helpers for filtering the OS list
Fabiano Fidêncio
fidencio at redhat.com
Thu Mar 21 12:12:20 UTC 2019
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 at redhat.com>
> ---
> 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
>
>
> - at util.os_parametrize('_os')
> + at 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
>
>
> - at util.os_parametrize('_os')
> + at 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
>
>
> - at util.os_parametrize('_os')
> + at 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')
>
>
> - at util.os_parametrize('_os')
> + at 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')
>
>
> - at util.os_parametrize('_os')
> + at 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')
>
>
> - at util.os_parametrize('_os')
> + at 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
>
>
> - at util.os_parametrize('_os')
> + at 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 == []
>
>
> - at util.os_parametrize('_os')
> + at 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 == []
>
>
> - at util.os_parametrize('_os')
> + at 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 at redhat.com>
Best Regards,
--
Fabiano Fidêncio
More information about the Libosinfo
mailing list