Enable dev_bundles flag and add unit tests

This commit is contained in:
Ryan Beisner
2018-07-17 10:23:17 -04:00
parent 9a28fe055b
commit 814614c085
2 changed files with 117 additions and 4 deletions

View File

@@ -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))

View File

@@ -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()