~andrewjbeach/juju-ci-tools/make-local-patcher

« back to all changes in this revision

Viewing changes to assess_update_mongo.py

  • Committer: Martin Packman
  • Date: 2015-12-16 03:59:38 UTC
  • mto: This revision was merged to the branch mainline in revision 1200.
  • Revision ID: martin.packman@canonical.com-20151216035938-881wbry7ezh8he5m
Add missing template test file

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
"""Test juju update-mongo command."""
3
 
 
4
 
from __future__ import print_function
5
 
 
6
 
import argparse
7
 
import logging
8
 
import sys
9
 
 
10
 
from deploy_stack import (
11
 
    BootstrapManager,
12
 
)
13
 
from jujucharm import (
14
 
    local_charm_path,
15
 
)
16
 
from remote import remote_from_address
17
 
from utility import (
18
 
    add_basic_testing_arguments,
19
 
    configure_logging,
20
 
)
21
 
 
22
 
 
23
 
__metaclass__ = type
24
 
 
25
 
 
26
 
log = logging.getLogger("assess_update_mongo")
27
 
 
28
 
DEP_SCRIPT = """\
29
 
export DEBIAN_FRONTEND=noninteractive
30
 
sudo apt-get update
31
 
sudo apt-get install -y software-properties-common
32
 
sudo apt-add-repository -y ppa:juju/experimental
33
 
sudo apt-get update
34
 
"""
35
 
 
36
 
VERIFY_SCRIPT = """\
37
 
ps ax | grep 'mongo3/bin/mongod --dbpath /var/lib/juju/db' | grep -v grep
38
 
"""
39
 
 
40
 
 
41
 
def assess_update_mongo(client, series, bootstrap_host):
42
 
    log.info('series={}, bootstrap_host={}'.format(series, bootstrap_host))
43
 
    return_code = 1
44
 
    charm = local_charm_path(
45
 
        charm='ubuntu', juju_ver=client.version, series=series)
46
 
    log.info("Setting up test.")
47
 
    client.deploy(charm, series=series)
48
 
    client.wait_for_started()
49
 
    log.info("Setup complete.")
50
 
    log.info("Test started.")
51
 
    # Instrument the case where Juju can install the new mongo packages from
52
 
    # Ubuntu.
53
 
    remote = remote_from_address(bootstrap_host, series=series)
54
 
    remote.run(DEP_SCRIPT)
55
 
    # upgrade-mongo returns 0 if all is well. status will work but not
56
 
    # explicitly show that mongo3 is running.
57
 
    client.upgrade_mongo()
58
 
    client.show_status()
59
 
    log.info("Checking bootstrap host for mongo3:")
60
 
    mongo_proc = remote.run(VERIFY_SCRIPT)
61
 
    log.info(mongo_proc)
62
 
    if '--port 37017' in mongo_proc and '--replSet juju' in mongo_proc:
63
 
        return_code = 0
64
 
    log.info("Controller upgraded to MongoDB 3.")
65
 
    log.info("Test complete.")
66
 
    return return_code
67
 
 
68
 
 
69
 
def parse_args(argv):
70
 
    """Parse all arguments."""
71
 
    parser = argparse.ArgumentParser(
72
 
        description="Test juju update-mongo command")
73
 
    add_basic_testing_arguments(parser)
74
 
    return parser.parse_args(argv)
75
 
 
76
 
 
77
 
def main(argv=None):
78
 
    return_code = 1
79
 
    args = parse_args(argv)
80
 
    configure_logging(args.verbose)
81
 
    bs_manager = BootstrapManager.from_args(args)
82
 
    with bs_manager.booted_context(args.upload_tools):
83
 
        return_code = assess_update_mongo(
84
 
            bs_manager.client, args.series, bs_manager.known_hosts['0'])
85
 
        log.info("Tearing down test.")
86
 
    log.info("Teardown complete.")
87
 
    if return_code == 0:
88
 
        log.info('TEST PASS')
89
 
    else:
90
 
        log.info('TEST FAIL')
91
 
    return return_code
92
 
 
93
 
 
94
 
if __name__ == '__main__':
95
 
    sys.exit(main())