From 814614c085bf1af0aee3ff63df8e6d177aa231fa Mon Sep 17 00:00:00 2001 From: Ryan Beisner Date: Tue, 17 Jul 2018 10:23:17 -0400 Subject: [PATCH] Enable dev_bundles flag and add unit tests --- ...t_zaza_charm_lifecycle_func_test_runner.py | 90 +++++++++++++++++++ zaza/charm_lifecycle/func_test_runner.py | 31 ++++++- 2 files changed, 117 insertions(+), 4 deletions(-) diff --git a/unit_tests/test_zaza_charm_lifecycle_func_test_runner.py b/unit_tests/test_zaza_charm_lifecycle_func_test_runner.py index 43ce7b7..c977010 100644 --- a/unit_tests/test_zaza_charm_lifecycle_func_test_runner.py +++ b/unit_tests/test_zaza_charm_lifecycle_func_test_runner.py @@ -17,12 +17,15 @@ class TestCharmLifecycleFuncTestRunner(ut_utils.BaseTestCase): args = lc_func_test_runner.parse_args([]) self.assertFalse(args.keep_model) self.assertFalse(args.smoke) + self.assertFalse(args.dev) self.assertIsNone(args.bundle) # Test flags args = lc_func_test_runner.parse_args(['--keep-model']) self.assertTrue(args.keep_model) args = lc_func_test_runner.parse_args(['--smoke']) self.assertTrue(args.smoke) + args = lc_func_test_runner.parse_args(['--dev']) + self.assertTrue(args.dev) args = lc_func_test_runner.parse_args(['--bundle', 'mybundle']) self.assertEqual(args.bundle, 'mybundle') args = lc_func_test_runner.parse_args(['--log', 'DEBUG']) @@ -40,6 +43,8 @@ class TestCharmLifecycleFuncTestRunner(ut_utils.BaseTestCase): self.get_charm_config.return_value = { 'charm_name': 'mycharm', 'gate_bundles': ['bundle1', 'bundle2'], + 'smoke_bundles': ['bundle2'], + 'dev_bundles': ['bundle3', 'bundle4'], 'configure': [ 'zaza.charm_tests.mycharm.setup.basic_setup' 'zaza.charm_tests.othercharm.setup.setup'], @@ -89,6 +94,7 @@ class TestCharmLifecycleFuncTestRunner(ut_utils.BaseTestCase): 'charm_name': 'mycharm', 'gate_bundles': ['bundle1', 'bundle2'], 'smoke_bundles': ['bundle2'], + 'dev_bundles': ['bundle3', 'bundle4'], 'configure': [ 'zaza.charm_tests.mycharm.setup.basic_setup' 'zaza.charm_tests.othercharm.setup.setup'], @@ -100,6 +106,32 @@ class TestCharmLifecycleFuncTestRunner(ut_utils.BaseTestCase): mock.call('./tests/bundles/bundle2.yaml', 'newmodel')] self.deploy.assert_has_calls(deploy_calls) + def test_func_test_runner_dev(self): + self.patch_object(lc_func_test_runner.utils, 'get_charm_config') + self.patch_object(lc_func_test_runner, 'generate_model_name') + self.patch_object(lc_func_test_runner.prepare, 'prepare') + self.patch_object(lc_func_test_runner.deploy, 'deploy') + self.patch_object(lc_func_test_runner.configure, 'configure') + self.patch_object(lc_func_test_runner.test, 'test') + self.patch_object(lc_func_test_runner.destroy, 'destroy') + self.generate_model_name.return_value = 'newmodel' + self.get_charm_config.return_value = { + 'charm_name': 'mycharm', + 'gate_bundles': ['bundle1', 'bundle2'], + 'smoke_bundles': ['bundle2'], + 'dev_bundles': ['bundle3', 'bundle4'], + 'configure': [ + 'zaza.charm_tests.mycharm.setup.basic_setup' + 'zaza.charm_tests.othercharm.setup.setup'], + 'tests': [ + 'zaza.charm_tests.mycharm.tests.SmokeTest', + 'zaza.charm_tests.mycharm.tests.ComplexTest']} + lc_func_test_runner.func_test_runner(dev=True) + deploy_calls = [ + mock.call('./tests/bundles/bundle3.yaml', 'newmodel'), + mock.call('./tests/bundles/bundle4.yaml', 'newmodel')] + self.deploy.assert_has_calls(deploy_calls) + def test_func_test_runner_specify_bundle(self): self.patch_object(lc_func_test_runner.utils, 'get_charm_config') self.patch_object(lc_func_test_runner, 'generate_model_name') @@ -113,6 +145,7 @@ class TestCharmLifecycleFuncTestRunner(ut_utils.BaseTestCase): 'charm_name': 'mycharm', 'gate_bundles': ['bundle1', 'bundle2'], 'smoke_bundles': ['bundle2'], + 'dev_bundles': ['bundle3', 'bundle4'], 'configure': [ 'zaza.charm_tests.mycharm.setup.basic_setup' 'zaza.charm_tests.othercharm.setup.setup'], @@ -131,6 +164,8 @@ class TestCharmLifecycleFuncTestRunner(ut_utils.BaseTestCase): self.patch_object(lc_func_test_runner, 'asyncio') _args = mock.Mock() _args.loglevel = 'DeBuG' + _args.dev = False + _args.smoke = False self.parse_args.return_value = _args self.logging.DEBUG = 10 lc_func_test_runner.main() @@ -150,3 +185,58 @@ class TestCharmLifecycleFuncTestRunner(ut_utils.BaseTestCase): 'Invalid log level: "invalid"', str(context.exception)) self.assertFalse(self.logging.basicConfig.called) + + def test_main_smoke_dev_ambiguous(self): + self.patch_object(lc_func_test_runner, 'parse_args') + self.patch_object(lc_func_test_runner, 'logging') + self.patch_object(lc_func_test_runner, 'func_test_runner') + self.patch_object(lc_func_test_runner, 'asyncio') + _args = mock.Mock() + _args.loglevel = 'DEBUG' + _args.dev = True + _args.smoke = True + self.parse_args.return_value = _args + self.logging.DEBUG = 10 + with self.assertRaises(ValueError) as context: + lc_func_test_runner.main() + self.assertEqual( + 'Ambiguous arguments: --smoke and --dev cannot be used together', + str(context.exception)) + + def test_main_bundle_dev_ambiguous(self): + self.patch_object(lc_func_test_runner, 'parse_args') + self.patch_object(lc_func_test_runner, 'logging') + self.patch_object(lc_func_test_runner, 'func_test_runner') + self.patch_object(lc_func_test_runner, 'asyncio') + _args = mock.Mock() + _args.loglevel = 'DEBUG' + _args.dev = True + _args.smoke = False + _args.bundle = 'foo.yaml' + self.parse_args.return_value = _args + self.logging.DEBUG = 10 + with self.assertRaises(ValueError) as context: + lc_func_test_runner.main() + self.assertEqual( + ('Ambiguous arguments: --bundle and --dev ' + 'cannot be used together'), + str(context.exception)) + + def test_main_bundle_smoke_ambiguous(self): + self.patch_object(lc_func_test_runner, 'parse_args') + self.patch_object(lc_func_test_runner, 'logging') + self.patch_object(lc_func_test_runner, 'func_test_runner') + self.patch_object(lc_func_test_runner, 'asyncio') + _args = mock.Mock() + _args.loglevel = 'DEBUG' + _args.dev = False + _args.smoke = True + _args.bundle = 'foo.yaml' + self.parse_args.return_value = _args + self.logging.DEBUG = 10 + with self.assertRaises(ValueError) as context: + lc_func_test_runner.main() + self.assertEqual( + ('Ambiguous arguments: --bundle and --smoke ' + 'cannot be used together'), + str(context.exception)) diff --git a/zaza/charm_lifecycle/func_test_runner.py b/zaza/charm_lifecycle/func_test_runner.py index 80abd82..8e742fc 100644 --- a/zaza/charm_lifecycle/func_test_runner.py +++ b/zaza/charm_lifecycle/func_test_runner.py @@ -23,13 +23,15 @@ def generate_model_name(): return 'zaza-{}'.format(str(uuid.uuid4())[-12:]) -def func_test_runner(keep_model=False, smoke=False, bundle=None): +def func_test_runner(keep_model=False, smoke=False, dev=False, bundle=None): """Deploy the bundles and run the tests as defined by the charms tests.yaml. :param keep_model: Whether to destroy model at end of run :type keep_model: boolean :param smoke: Whether to just run smoke test. + :param dev: Whether to just run dev test. :type smoke: boolean + :type dev: boolean """ test_config = utils.get_charm_config() if bundle: @@ -37,6 +39,8 @@ def func_test_runner(keep_model=False, smoke=False, bundle=None): else: if smoke: bundle_key = 'smoke_bundles' + elif dev: + bundle_key = 'dev_bundles' else: bundle_key = 'gate_bundles' bundles = test_config[bundle_key] @@ -76,14 +80,20 @@ def parse_args(args): help='Keep model at the end of the run', action='store_true') parser.add_argument('--smoke', dest='smoke', - help='Just run smoke test', + help='Just run smoke test(s)', action='store_true') - parser.add_argument('-b', '--bundle', + parser.add_argument('--dev', dest='dev', + help='Just run dev test(s)', + action='store_true') + parser.add_argument('-b', '--bundle', dest='bundle', help='Override the bundle to be run', required=False) parser.add_argument('--log', dest='loglevel', help='Loglevel [DEBUG|INFO|WARN|ERROR|CRITICAL]') - parser.set_defaults(keep_model=False, smoke=False, loglevel='INFO') + parser.set_defaults(keep_model=False, + smoke=False, + dev=False, + loglevel='INFO') return parser.parse_args(args) @@ -96,8 +106,21 @@ def main(): raise ValueError('Invalid log level: "{}"'.format(args.loglevel)) logging.basicConfig(level=level) + if args.dev and args.smoke: + raise ValueError('Ambiguous arguments: --smoke and ' + '--dev cannot be used together') + + if args.dev and args.bundle: + raise ValueError('Ambiguous arguments: --bundle and ' + '--dev cannot be used together') + + if args.smoke and args.bundle: + raise ValueError('Ambiguous arguments: --bundle and ' + '--smoke cannot be used together') + func_test_runner( keep_model=args.keep_model, smoke=args.smoke, + dev=args.dev, bundle=args.bundle) asyncio.get_event_loop().close()