[Libosinfo] [PATCH osinfo-db 3/7] tests: test_isoinfo: Parameterize based on input OS

Fabiano Fidêncio fidencio at redhat.com
Thu Mar 21 12:10:52 UTC 2019


On Wed, 2019-03-20 at 17:53 -0400, Cole Robinson wrote:
> Right now we run the test case for every OS, even if there's no
> isodata/ tracked for it. Instead, only run the test if we detect an
> osname from the special isodata/ dir naming. This revealed a few
> issues:
> 
> * We weren't even testing windows data because it was looking for
>   isodata/win, but the folder is isodata/windows.
> * libosinfo was also testing .lng files specially. Our test chokes
>   on them thinking they are isos. I've just opted to skip them for
>   now.
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  tests/test_isoinfo.py | 53 +++++++++++++++++++++++----------------
> ----
>  1 file changed, 29 insertions(+), 24 deletions(-)
> 
> diff --git a/tests/test_isoinfo.py b/tests/test_isoinfo.py
> index 3476ea9..4d70d87 100644
> --- a/tests/test_isoinfo.py
> +++ b/tests/test_isoinfo.py
> @@ -1,6 +1,7 @@
>  # This work is licensed under the GNU GPLv2 or later.
>  # See the COPYING file in the top-level directory.
>  
> +import glob
>  import logging
>  import os
>  import pytest
> @@ -8,18 +9,41 @@ import pytest
>  from . import util
>  
>  
> - at pytest.mark.parametrize('_os', util.DataFiles.oses(), ids=lambda o:
> o.shortid)
> -def test_iso_detection(_os):
> -    for isodatamedia in _get_isodatamedias(_os):
> +def _get_isodatapaths():
> +    """
> +    Collect iso media data and return a list of tuples:
> +        (osname, isodatapaths)
> +    """
> +    isodata_path = os.path.join(
> +        os.path.dirname(os.path.realpath(__file__)),
> +        'isodata')
> +
> +    ret = []
> +    for osdir in glob.glob(os.path.join(isodata_path, "*", "*")):
> +        osname = os.path.basename(osdir)
> +        isodatapaths = glob.glob(os.path.join(osdir, "*"))
> +        ret.append((osname, isodatapaths))
> +    return ret
> +
> +
> + at pytest.mark.parametrize("testdata", _get_isodatapaths(), ids=lambda
> d: d[0])
> +def test_iso_detection(testdata):
> +    osname, isodatapaths = testdata
> +    for isodatapath in isodatapaths:
> +        if isodatapath.endswith(".lng"):
> +            # libosinfo handled these specially, we should too
> +            continue
> +
>          detected = []
> +        isodatamedia = _get_isodatamedia(isodatapath)
>          for __os in util.DataFiles.oses():
>              for media in __os.medias:
>                  if isodatamedia.match(media.iso):
> -                    if _os.shortid != __os.shortid:
> +                    if osname != __os.shortid:
>                          logging.warning(
>                              'ISO \'%s\' was matched by OS \'%s\'
> while it '
>                              'should only be matched by OS \'%s\'',
> -                            isodatamedia.filename, __os.shortid,
> _os.shortid)
> +                            isodatamedia.filename, __os.shortid,
> osname)
>                      else:
>                          logging.info('ISO \'%s\' matched by OS
> \'%s\'',
>                                       isodatamedia.filename,
> __os.shortid)
> @@ -124,22 +148,3 @@ def _get_isodatamedia(filepath):
>  
>      return _ISODataMedia(filepath, volumeid, publisherid, systemid,
>                           applicationid, volumesize)
> -
> -
> -def _get_isodatamedias(_os):
> -    isodata_path = os.path.join(
> -        os.path.dirname(os.path.realpath(__file__)),
> -        'isodata')
> -    shortid_path = os.path.join(isodata_path, _os.distro,
> _os.shortid)
> -
> -    medias = []
> -    if not os.path.exists(shortid_path):
> -        return []
> -
> -    for _file in os.listdir(shortid_path):
> -        path = os.path.join(shortid_path, _file)
> -        if not os.path.exists(path):
> -            continue
> -
> -        medias.append(_get_isodatamedia(path, _os.shortid))
> -    return medias


Reviewed-by: Fabiano Fidêncio <fidencio at redhat.com>

Best Regards,
-- 
Fabiano Fidêncio




More information about the Libosinfo mailing list