2
from __future__ import print_function
9
from jujucharm import Charm
10
from deploy_stack import BootstrapManager
12
add_basic_testing_arguments,
22
log = logging.getLogger("assess_version")
25
def assert_fail(client, charm, ver, cur, name):
27
client.deploy(charm, service=name)
28
except subprocess.CalledProcessError:
30
raise JujuAssertionError(
31
'assert_fail failed min: {} cur: {}'.format(ver, cur))
34
def assert_pass(client, charm, ver, cur, name):
36
client.deploy(charm, service=name)
37
client.wait_for_started()
38
except subprocess.CalledProcessError:
39
raise JujuAssertionError(
40
'assert_pass failed min: {} cur: {}'.format(ver, cur))
43
def get_current_version(client):
44
current = client.version.split('-')[:-2]
45
return '-'.join(current)
48
def make_minver_charm(charm_dir, min_ver):
49
charm = Charm('minver',
50
'Test charm for min-juju-version {}'.format(min_ver))
51
charm.metadata['min-juju-version'] = min_ver
52
charm.to_dir(charm_dir)
55
def assess_deploy(client, assertion, ver, current, name):
56
with temp_dir() as charm_dir:
57
log.info("Testing min version {}".format(ver))
58
make_minver_charm(charm_dir, ver)
59
assertion(client, charm_dir, ver, current, name)
62
def assess_min_version(client):
63
current = get_current_version(client)
64
tests = [['1.25.0', 'name1250', assert_pass],
65
['99.9.9', 'name9999', assert_fail],
66
['99.9-alpha1', 'name999alpha1', assert_fail],
67
['1.2-beta1', 'name12beta1', assert_pass],
68
['1.25.5.1', 'name12551', assert_pass],
69
['2.0-alpha1', 'name20alpha1', assert_pass],
70
[current, 'current', assert_pass]]
71
for ver, name, assertion in tests:
72
assess_deploy(client, assertion, ver, current, name)
76
"""Parse all arguments."""
77
parser = argparse.ArgumentParser(description="Juju min version")
78
add_basic_testing_arguments(parser)
79
return parser.parse_args(argv)
83
args = parse_args(argv)
84
configure_logging(args.verbose)
85
bs_manager = BootstrapManager.from_args(args)
86
with bs_manager.booted_context(args.upload_tools):
87
assess_min_version(bs_manager.client)
91
if __name__ == '__main__':