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

« back to all changes in this revision

Viewing changes to assess_status_output.py

  • Committer: John George
  • Date: 2015-01-14 22:03:47 UTC
  • mto: This revision was merged to the branch mainline in revision 798.
  • Revision ID: john.george@canonical.com-20150114220347-e8q5wezs1qg9a00u
Added support for setting the juju path, series and agent_url.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
from __future__ import print_function
3
 
 
4
 
from argparse import ArgumentParser
5
 
from status import StatusTester
6
 
from deploy_stack import (
7
 
    BootstrapManager,
8
 
)
9
 
from utility import (
10
 
    add_basic_testing_arguments,
11
 
    local_charm_path,
12
 
)
13
 
 
14
 
 
15
 
__metaclass__ = type
16
 
 
17
 
 
18
 
def run_complete_status(client, status):
19
 
    """run the complete set of tests possible for any StatusParser.
20
 
 
21
 
    :param client: python juju client.
22
 
    :type client: jujupy.EnvJujuClient
23
 
    :param status: a BaseStatusParser
24
 
    :type status: BaseStatusParser
25
 
    """
26
 
    status.s.assert_machines_len(2)
27
 
    status.s.assert_machines_ids(("0", "1"))
28
 
    juju_status = client.get_status()
29
 
    for name, machine in juju_status.iter_machines(False):
30
 
        status.s.assert_machine_agent_state(name, "started")
31
 
        status.s.assert_machine_agent_version(name,
32
 
                                              machine.get("agent-version"))
33
 
        status.s.assert_machine_dns_name(name, machine.get("dns-name"))
34
 
        status.s.assert_machine_instance_id(name,
35
 
                                            machine.get("instance-id"))
36
 
        status.s.assert_machine_series(name, machine.get("series"))
37
 
        status.s.assert_machine_hardware(name, machine.get("hardware"))
38
 
        state_server = client.get_controller_member_status(machine)
39
 
        if state_server:
40
 
            status.s.assert_machine_member_status(name, "has-vote")
41
 
 
42
 
    status.s.assert_service_charm("statusstresser",
43
 
                                  "local:trusty/statusstresser-1")
44
 
    status.s.assert_service_exposed("statusstresser", False)
45
 
    status.s.assert_service_service_status("statusstresser",
46
 
                                           {"current": "active",
47
 
                                            "message": "called in "
48
 
                                            "config-changed hook"})
49
 
    status.s.assert_unit_workload_status("statusstresser/0",
50
 
                                         {"current": "active",
51
 
                                          "message": "called in "
52
 
                                          "config-changed hook"})
53
 
    status.s.assert_unit_agent_status("statusstresser/0",
54
 
                                      {"current": "idle", "message": ""})
55
 
    status.s.assert_unit_agent_state("statusstresser/0", "started")
56
 
    agent_versions = juju_status.get_agent_versions()
57
 
    for version in agent_versions:
58
 
        for item in agent_versions[version]:
59
 
            if not item.isdigit():
60
 
                status.s.assert_unit_agent_version(item, version)
61
 
    status.s.assert_unit_machine("statusstresser/0", "1")
62
 
 
63
 
 
64
 
def run_reduced_status(client, status):
65
 
    """run a subset of the status asserts.
66
 
 
67
 
    run a reduced set of tests for a StatusParser, this is useful for
68
 
    status outputs such as Tabular that hold less information.
69
 
 
70
 
    :param client: python juju client.
71
 
    :type client: jujupy.EnvJujuClient
72
 
    :param status: a BaseStatusParser
73
 
    :type status: BaseStatusParser
74
 
    """
75
 
    status.s.assert_machines_len(2)
76
 
    status.s.assert_machines_ids(("0", "1"))
77
 
    juju_status = client.get_status()
78
 
    for name, machine in juju_status.iter_machines(False):
79
 
        status.s.assert_machine_agent_state(name, "started")
80
 
        status.s.assert_machine_agent_version(name,
81
 
                                              machine.get("agent-version"))
82
 
        status.s.assert_machine_dns_name(name, machine.get("dns-name"))
83
 
        status.s.assert_machine_instance_id(name, machine.get("instance-id"))
84
 
        status.s.assert_machine_series(name, machine.get("series"))
85
 
        status.s.assert_machine_hardware(name, machine.get("hardware"))
86
 
 
87
 
    status.s.assert_service_charm("statusstresser",
88
 
                                  "local:trusty/statusstresser-1")
89
 
    status.s.assert_service_exposed("statusstresser", False)
90
 
    status.s.assert_service_service_status("statusstresser",
91
 
                                           {"current": "active",
92
 
                                            "message": ""})
93
 
    status.s.assert_unit_workload_status("statusstresser/0",
94
 
                                         {"current": "active",
95
 
                                          "message": "called in "
96
 
                                          "config-changed hook"})
97
 
    status.s.assert_unit_agent_status("statusstresser/0",
98
 
                                      {"current": "idle", "message": ""})
99
 
    status.s.assert_unit_machine("statusstresser/0", "1")
100
 
 
101
 
 
102
 
def test_status_set_on_install(client):
103
 
    """Test the status after install.
104
 
 
105
 
    Test that status set is proplerly called during install and
106
 
    that all formats are returning proper information.
107
 
 
108
 
    :param client: python juju client.
109
 
    :type client: jujupy.EnvJujuClient
110
 
    """
111
 
    status = StatusTester.from_text(client.get_status(60, True, False,
112
 
                                                      "--format=yaml"),
113
 
                                    "yaml")
114
 
    run_complete_status(client, status)
115
 
    status = StatusTester.from_text(client.get_status(60, True, False,
116
 
                                                      "--format=json"),
117
 
                                    "json")
118
 
    run_complete_status(client, status)
119
 
    status = StatusTester.from_text(client.get_status(60, True, False,
120
 
                                                      "--format=tabular"),
121
 
                                    "tabular")
122
 
    run_reduced_status(client, status)
123
 
 
124
 
 
125
 
def parse_args():
126
 
    """Parse all arguments."""
127
 
    parser = ArgumentParser('Test status outputs')
128
 
    add_basic_testing_arguments(parser)
129
 
    return parser.parse_args()
130
 
 
131
 
 
132
 
def main():
133
 
    args = parse_args()
134
 
    series = args.series
135
 
    if series is None:
136
 
        args.series = 'precise'
137
 
    bs_manager = BootstrapManager.from_args(args)
138
 
    client = bs_manager.client
139
 
    with bs_manager.booted_context(args.upload_tools):
140
 
        client.get_status(60)
141
 
        charm = local_charm_path(
142
 
            charm='statusstresser', juju_ver=client.version, series='trusty')
143
 
        client.deploy(charm)
144
 
        client.wait_for_started()
145
 
        test_status_set_on_install(client)
146
 
 
147
 
 
148
 
if __name__ == '__main__':
149
 
    main()