~abentley/juju-ci-tools/client-from-config-4

« back to all changes in this revision

Viewing changes to assess_min_version.py

  • Committer: Aaron Bentley
  • Date: 2014-02-24 17:18:29 UTC
  • mto: This revision was merged to the branch mainline in revision 252.
  • Revision ID: aaron.bentley@canonical.com-20140224171829-sz644yhoygu7m9dm
Use tags to identify and shut down instances.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
from __future__ import print_function
3
 
 
4
 
import argparse
5
 
import logging
6
 
import subprocess
7
 
import sys
8
 
 
9
 
from jujucharm import Charm
10
 
from deploy_stack import BootstrapManager
11
 
from utility import (
12
 
    add_basic_testing_arguments,
13
 
    configure_logging,
14
 
    JujuAssertionError,
15
 
    temp_dir,
16
 
)
17
 
 
18
 
 
19
 
__metaclass__ = type
20
 
 
21
 
 
22
 
log = logging.getLogger("assess_version")
23
 
 
24
 
 
25
 
def assert_fail(client, charm, ver, cur, name):
26
 
    try:
27
 
        client.deploy(charm, service=name)
28
 
    except subprocess.CalledProcessError:
29
 
        return
30
 
    raise JujuAssertionError(
31
 
        'assert_fail failed min: {} cur: {}'.format(ver, cur))
32
 
 
33
 
 
34
 
def assert_pass(client, charm, ver, cur, name):
35
 
    try:
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))
41
 
 
42
 
 
43
 
def get_current_version(client):
44
 
    current = client.version.split('-')[:-2]
45
 
    return '-'.join(current)
46
 
 
47
 
 
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)
53
 
 
54
 
 
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)
60
 
 
61
 
 
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)
73
 
 
74
 
 
75
 
def parse_args(argv):
76
 
    """Parse all arguments."""
77
 
    parser = argparse.ArgumentParser(description="Juju min version")
78
 
    add_basic_testing_arguments(parser)
79
 
    return parser.parse_args(argv)
80
 
 
81
 
 
82
 
def main(argv=None):
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)
88
 
    return 0
89
 
 
90
 
 
91
 
if __name__ == '__main__':
92
 
    sys.exit(main())