2016-08-22 14:08:25 +00:00
# -*- coding: utf-8 -*-
2016-09-22 08:28:01 +00:00
try :
import unittest2 as unittest
except ImportError :
import unittest
2016-08-22 14:08:25 +00:00
2017-09-05 08:01:21 +00:00
import six
2022-11-07 18:10:33 +00:00
from unittest import mock
2016-08-22 14:08:25 +00:00
from pungi import checks
from tests . helpers import load_config , PKGSET_REPOS
2016-12-07 14:57:35 +00:00
class ConfigTestCase ( unittest . TestCase ) :
def assertValidation ( self , cfg , errors = [ ] , warnings = [ ] ) :
actual_errors , actual_warnings = checks . validate ( cfg )
2019-10-04 12:45:03 +00:00
six . assertCountEqual ( self , errors , actual_errors )
2016-12-07 14:57:35 +00:00
self . assertEqual ( warnings , actual_warnings )
class PkgsetConfigTestCase ( ConfigTestCase ) :
2016-08-22 14:08:25 +00:00
def test_validate_minimal_pkgset_koji ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( pkgset_source = " koji " , )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
def test_validate_minimal_pkgset_repos ( self ) :
cfg = load_config (
2020-01-22 10:02:22 +00:00
pkgset_source = " repos " ,
pkgset_repos = { " x86_64 " : " /first " , " ppc64 " : " /second " } ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
def test_pkgset_mismatch_repos ( self ) :
cfg = load_config (
2020-01-22 10:02:22 +00:00
pkgset_source = " repos " , pkgset_koji_tag = " f25 " , pkgset_koji_inherit = False ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[
checks . REQUIRES . format ( " pkgset_source " , " repos " , " pkgset_repos " ) ,
checks . CONFLICTS . format ( " pkgset_source " , " repos " , " pkgset_koji_tag " ) ,
checks . CONFLICTS . format (
" pkgset_source " , " repos " , " pkgset_koji_inherit "
) ,
] ,
)
2016-08-22 14:08:25 +00:00
def test_pkgset_mismatch_koji ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( pkgset_source = " koji " , pkgset_repos = { " whatever " : " /foo " } , )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation (
2020-01-22 10:02:22 +00:00
cfg , [ checks . CONFLICTS . format ( " pkgset_source " , " koji " , " pkgset_repos " ) ]
)
2016-08-22 14:08:25 +00:00
2017-06-27 11:48:02 +00:00
def test_pkgset_multiple_koji_tags ( self ) :
cfg = load_config (
2020-01-22 10:02:22 +00:00
pkgset_source = " koji " ,
pkgset_koji_tag = [ " f25 " , " f25-extra " ] ,
2017-06-27 11:48:02 +00:00
pkgset_koji_inherit = False ,
)
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class ReleaseConfigTestCase ( ConfigTestCase ) :
2019-06-03 06:55:40 +00:00
def test_set_release_is_layered ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , release_is_layered = True )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2019-06-03 06:55:40 +00:00
warnings = [
2020-02-06 07:09:32 +00:00
" WARNING: Config option release_is_layered was removed and has no effect; remove it. It ' s layered if there ' s configuration for base product. " # noqa: E501
2020-01-22 10:02:22 +00:00
] ,
)
2016-08-22 14:08:25 +00:00
2019-06-03 06:55:40 +00:00
def test_only_config_base_product_name ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , base_product_name = " Prod " , )
2019-06-03 06:55:40 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[
checks . REQUIRES . format (
" base_product_name " , " Prod " , " base_product_short "
) ,
checks . REQUIRES . format (
" base_product_name " , " Prod " , " base_product_version "
) ,
checks . CONFLICTS . format (
" base_product_short " , None , " base_product_name "
) ,
checks . CONFLICTS . format (
" base_product_version " , None , " base_product_name "
) ,
] ,
)
2019-06-03 06:55:40 +00:00
def test_only_config_base_product_short ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , base_product_short = " bp " , )
2019-06-03 06:55:40 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[
checks . REQUIRES . format ( " base_product_short " , " bp " , " base_product_name " ) ,
checks . REQUIRES . format (
" base_product_short " , " bp " , " base_product_version "
) ,
checks . CONFLICTS . format (
" base_product_name " , None , " base_product_short "
) ,
checks . CONFLICTS . format (
" base_product_version " , None , " base_product_short "
) ,
] ,
)
2019-06-03 06:55:40 +00:00
def test_only_config_base_product_version ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , base_product_version = " 1.0 " , )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[
checks . REQUIRES . format (
" base_product_version " , " 1.0 " , " base_product_name "
) ,
checks . REQUIRES . format (
" base_product_version " , " 1.0 " , " base_product_short "
) ,
checks . CONFLICTS . format (
" base_product_name " , None , " base_product_version "
) ,
checks . CONFLICTS . format (
" base_product_short " , None , " base_product_version "
) ,
] ,
)
2016-08-22 14:08:25 +00:00
2018-11-01 09:07:38 +00:00
class ImageNameConfigTestCase ( ConfigTestCase ) :
def test_image_name_simple_string ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , image_name_format = " foobar " , )
2018-11-01 09:07:38 +00:00
self . assertValidation ( cfg , [ ] )
def test_image_name_variant_mapping ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , image_name_format = { " ^Server$ " : " foobar " } , )
2018-11-01 09:07:38 +00:00
self . assertValidation ( cfg , [ ] )
2016-12-07 14:57:35 +00:00
class RunrootConfigTestCase ( ConfigTestCase ) :
2019-06-24 08:18:55 +00:00
def test_set_runroot_true ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , runroot = True , )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
warnings = [
2020-02-06 07:09:32 +00:00
" WARNING: Config option runroot was removed and has no effect; remove it. Please specify ' runroot_method ' if you want to enable runroot, otherwise run things locally. " # noqa: E501
2020-01-22 10:02:22 +00:00
] ,
)
2016-08-22 14:08:25 +00:00
2019-06-24 08:18:55 +00:00
def test_set_runroot_false ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , runroot = False , )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
warnings = [
2020-02-06 07:09:32 +00:00
" WARNING: Config option runroot was removed and has no effect; remove it. Please specify ' runroot_method ' if you want to enable runroot, otherwise run things locally. " # noqa: E501
2020-01-22 10:02:22 +00:00
] ,
)
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class BuildinstallConfigTestCase ( ConfigTestCase ) :
2019-07-22 07:29:47 +00:00
def test_bootable_deprecated ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , bootable = True , )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
warnings = [
2020-02-06 07:09:32 +00:00
" WARNING: Config option bootable was removed and has no effect; remove it. Setting buildinstall_method option if you want a bootable installer. " # noqa: E501
2020-01-22 10:02:22 +00:00
] ,
)
2016-08-22 14:08:25 +00:00
def test_buildinstall_method_without_bootable ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , buildinstall_method = " lorax " , )
2016-08-22 14:08:25 +00:00
2020-01-22 10:02:22 +00:00
self . assertValidation ( cfg , [ ] )
2016-08-22 14:08:25 +00:00
def test_buildinstall_with_lorax_options ( self ) :
cfg = load_config (
PKGSET_REPOS ,
2020-01-22 10:02:22 +00:00
buildinstall_method = " buildinstall " ,
lorax_options = [ ( " ^Server$ " , { } ) ] ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[
checks . CONFLICTS . format (
" buildinstall_method " , " buildinstall " , " lorax_options "
)
] ,
)
2016-08-22 14:08:25 +00:00
def test_lorax_with_lorax_options ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , buildinstall_method = " lorax " , lorax_options = [ ] )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
def test_lorax_options_without_bootable_and_method ( self ) :
cfg = load_config (
PKGSET_REPOS ,
2020-01-22 10:02:22 +00:00
lorax_options = [ ( " ^Server$ " , { } ) ] ,
buildinstall_kickstart = " foo " ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[
checks . CONFLICTS . format ( " buildinstall_method " , " None " , " lorax_options " ) ,
checks . CONFLICTS . format (
" buildinstall_method " , " None " , " buildinstall_kickstart "
) ,
] ,
)
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class CreaterepoConfigTestCase ( ConfigTestCase ) :
2016-08-22 14:08:25 +00:00
def test_validate_minimal_pkgset_koji ( self ) :
cfg = load_config (
2020-01-22 10:02:22 +00:00
pkgset_source = " koji " , pkgset_koji_tag = " f25 " , product_id_allow_missing = True ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[ checks . CONFLICTS . format ( " product_id " , " None " , " product_id_allow_missing " ) ] ,
)
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class GatherConfigTestCase ( ConfigTestCase ) :
2017-09-21 07:41:43 +00:00
def test_dnf_backend_is_default_on_py3 ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( pkgset_source = " koji " , pkgset_koji_tag = " f27 " , )
2017-09-21 07:41:43 +00:00
2020-01-22 10:02:22 +00:00
with mock . patch ( " six.PY2 " , new = False ) :
2017-09-21 07:41:43 +00:00
self . assertValidation ( cfg , [ ] )
2020-01-22 10:02:22 +00:00
self . assertEqual ( cfg [ " gather_backend " ] , " dnf " )
2017-09-21 07:41:43 +00:00
def test_yum_backend_is_default_on_py2 ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( pkgset_source = " koji " , pkgset_koji_tag = " f27 " , )
2017-09-21 07:41:43 +00:00
2020-01-22 10:02:22 +00:00
with mock . patch ( " six.PY2 " , new = True ) :
2017-09-21 07:41:43 +00:00
self . assertValidation ( cfg , [ ] )
2020-01-22 10:02:22 +00:00
self . assertEqual ( cfg [ " gather_backend " ] , " yum " )
2017-09-21 07:41:43 +00:00
def test_yum_backend_is_rejected_on_py3 ( self ) :
cfg = load_config (
2020-01-22 10:02:22 +00:00
pkgset_source = " koji " , pkgset_koji_tag = " f27 " , gather_backend = " yum " ,
2017-09-21 07:41:43 +00:00
)
2020-01-22 10:02:22 +00:00
with mock . patch ( " six.PY2 " , new = False ) :
2017-09-21 07:41:43 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[ " Failed validation in gather_backend: ' yum ' is not one of [ ' dnf ' ] " ] ,
)
2017-09-21 07:41:43 +00:00
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class OSBSConfigTestCase ( ConfigTestCase ) :
2016-08-22 14:08:25 +00:00
def test_validate ( self ) :
cfg = load_config (
PKGSET_REPOS ,
2020-01-22 10:02:22 +00:00
osbs = {
" ^Server$ " : {
" url " : " http://example.com " ,
" target " : " f25-build " ,
" git_branch " : " f25 " ,
}
} ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
def test_validate_bad_conf ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , osbs = " yes please " )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertNotEqual ( checks . validate ( cfg ) , ( [ ] , [ ] ) )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class OstreeConfigTestCase ( ConfigTestCase ) :
2016-08-22 14:08:25 +00:00
def test_validate ( self ) :
cfg = load_config (
PKGSET_REPOS ,
ostree = [
2020-01-22 10:02:22 +00:00
(
" ^Atomic$ " ,
{
" x86_64 " : {
" treefile " : " fedora-atomic-docker-host.json " ,
2020-02-06 07:09:32 +00:00
" config_url " : " https://git.fedorahosted.org/git/fedora-atomic.git " , # noqa: E501
2020-01-22 10:02:22 +00:00
" repo " : " Everything " ,
" ostree_repo " : " /mnt/koji/compose/atomic/Rawhide/ " ,
" version " : " !OSTREE_VERSION_FROM_LABEL_DATE_TYPE_RESPIN " ,
}
} ,
)
] ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
def test_validate_bad_conf ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , ostree = " yes please " )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertNotEqual ( checks . validate ( cfg ) , ( [ ] , [ ] ) )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class OstreeInstallerConfigTestCase ( ConfigTestCase ) :
2016-08-22 14:08:25 +00:00
def test_validate ( self ) :
cfg = load_config (
PKGSET_REPOS ,
ostree_installer = [
2020-01-22 10:02:22 +00:00
(
" ^Atomic$ " ,
{
" x86_64 " : {
" repo " : " Everything " ,
" release " : None ,
" installpkgs " : [ " fedora-productimg-atomic " ] ,
" add_template " : [
2020-02-06 07:09:32 +00:00
" /spin-kickstarts/atomic-installer/lorax-configure-repo.tmpl " # noqa: E501
2020-01-22 10:02:22 +00:00
] ,
" add_template_var " : [
" ostree_osname=fedora-atomic " ,
" ostree_ref=fedora-atomic/Rawhide/x86_64/docker-host " ,
] ,
" add_arch_template " : [
2020-02-06 07:09:32 +00:00
" /spin-kickstarts/atomic-installer/lorax-embed-repo.tmpl " # noqa: E501
2020-01-22 10:02:22 +00:00
] ,
" rootfs_size " : " 3 " ,
" add_arch_template_var " : [
2020-02-06 07:09:32 +00:00
" ostree_repo=https://kojipkgs.fedoraproject.org/compose/atomic/Rawhide/ " , # noqa: E501
2020-01-22 10:02:22 +00:00
" ostree_osname=fedora-atomic " ,
" ostree_ref=fedora-atomic/Rawhide/x86_64/docker-host " ,
] ,
}
} ,
)
] ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
def test_validate_bad_conf ( self ) :
cfg = load_config (
PKGSET_REPOS ,
ostree_installer = [
2020-01-22 10:02:22 +00:00
(
" ^Atomic$ " ,
{
" x86_64 " : {
" repo " : " Everything " ,
" release " : None ,
" installpkgs " : [ " fedora-productimg-atomic " ] ,
" add_template " : [
2020-02-06 07:09:32 +00:00
" /spin-kickstarts/atomic-installer/lorax-configure-repo.tmpl " # noqa: E501
2020-01-22 10:02:22 +00:00
] ,
" add_template_var " : [
" ostree_osname=fedora-atomic " ,
" ostree_ref=fedora-atomic/Rawhide/x86_64/docker-host " ,
] ,
" add_arch_template " : 15 ,
" add_arch_template_var " : [
2020-02-06 07:09:32 +00:00
" ostree_repo=https://kojipkgs.fedoraproject.org/compose/atomic/Rawhide/ " , # noqa: E501
2020-01-22 10:02:22 +00:00
" ostree_osname=fedora-atomic " ,
" ostree_ref=fedora-atomic/Rawhide/x86_64/docker-host " ,
] ,
}
} ,
)
] ,
2016-08-22 14:08:25 +00:00
)
2016-12-07 14:57:35 +00:00
self . assertNotEqual ( checks . validate ( cfg ) , ( [ ] , [ ] ) )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class LiveMediaConfigTestCase ( ConfigTestCase ) :
2018-11-21 09:56:22 +00:00
@mock.patch ( " pungi.util.resolve_git_url " )
def test_global_config_validation ( self , resolve_git_url ) :
2016-08-22 14:08:25 +00:00
cfg = load_config (
PKGSET_REPOS ,
2020-01-22 10:02:22 +00:00
live_media_ksurl = " git://example.com/repo.git#HEAD " ,
live_media_target = " f24 " ,
live_media_release = " RRR " ,
live_media_version = " Rawhide " ,
2016-08-22 14:08:25 +00:00
)
2018-11-21 09:56:22 +00:00
resolve_git_url . side_effect = lambda x : x . replace ( " HEAD " , " CAFE " )
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2018-11-21 09:56:22 +00:00
self . assertEqual ( cfg [ " live_media_ksurl " ] , " git://example.com/repo.git#CAFE " )
2016-08-22 14:08:25 +00:00
def test_global_config_null_release ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , live_media_release = None , )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
self . assertValidation ( cfg )
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class TestSuggestions ( ConfigTestCase ) :
2016-08-19 08:09:40 +00:00
def test_with_a_typo ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , product_pid = None )
2016-08-22 14:08:25 +00:00
2020-01-22 10:02:22 +00:00
self . assertValidation (
cfg , [ ] , [ checks . UNKNOWN_SUGGEST . format ( " product_pid " , " product_id " ) ]
)
2016-08-22 14:08:25 +00:00
2016-12-07 14:57:35 +00:00
class TestRegexValidation ( ConfigTestCase ) :
2016-10-12 07:38:59 +00:00
def test_incorrect_regular_expression ( self ) :
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , multilib = [ ( " ^*$ " , { " * " : [ ] } ) ] )
2016-10-12 07:38:59 +00:00
2020-02-06 07:09:32 +00:00
msg = " Failed validation in multilib.0.0: incorrect regular expression: nothing to repeat " # noqa: E501
2017-09-05 08:01:21 +00:00
if six . PY3 :
2020-01-22 10:02:22 +00:00
msg + = " at position 1 "
2017-09-05 08:01:21 +00:00
self . assertValidation ( cfg , [ msg ] , [ ] )
2016-10-12 07:38:59 +00:00
2017-01-26 08:19:12 +00:00
class RepoclosureTestCase ( ConfigTestCase ) :
def test_invalid_backend ( self ) :
cfg = load_config (
2020-01-22 10:02:22 +00:00
PKGSET_REPOS , repoclosure_backend = " fnd " , # Intentionally with a typo
2017-01-26 08:19:12 +00:00
)
2020-01-22 10:02:22 +00:00
options = [ " yum " , " dnf " ] if six . PY2 else [ " dnf " ]
2017-01-26 08:19:12 +00:00
self . assertValidation (
cfg ,
2020-01-22 10:02:22 +00:00
[
" Failed validation in repoclosure_backend: ' fnd ' is not one of %s "
% options
] ,
)
2017-01-26 08:19:12 +00:00
2018-04-10 12:27:55 +00:00
class VariantAsLookasideTestCase ( ConfigTestCase ) :
def test_empty ( self ) :
variant_as_lookaside = [ ]
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , variant_as_lookaside = variant_as_lookaside , )
2018-04-10 12:27:55 +00:00
self . assertValidation ( cfg )
def test_basic ( self ) :
variant_as_lookaside = [
( " Client " , " Base " ) ,
( " Server " , " Client " ) ,
( " Everything " , " Spin " ) ,
]
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , variant_as_lookaside = variant_as_lookaside , )
2018-04-10 12:27:55 +00:00
self . assertValidation ( cfg )
2018-05-15 11:30:00 +00:00
class SkipPhasesTestCase ( ConfigTestCase ) :
def test_empty ( self ) :
skip_phases = [ ]
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , skip_phases = skip_phases , )
2018-05-15 11:30:00 +00:00
self . assertValidation ( cfg )
def test_basic ( self ) :
skip_phases = [
" buildinstall " ,
" gather " ,
]
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , skip_phases = skip_phases , )
2018-05-15 11:30:00 +00:00
self . assertValidation ( cfg )
def test_bad_phase_name ( self ) :
skip_phases = [
" gather " ,
" non-existing-phase_name " ,
]
2020-01-22 10:02:22 +00:00
cfg = load_config ( PKGSET_REPOS , skip_phases = skip_phases , )
2018-05-15 11:30:00 +00:00
self . assertNotEqual ( checks . validate ( cfg ) , ( [ ] , [ ] ) )