2
from __future__ import print_function
4
from argparse import ArgumentParser
5
from status import StatusTester
6
from deploy_stack import (
10
add_basic_testing_arguments,
18
def run_complete_status(client, status):
19
"""run the complete set of tests possible for any StatusParser.
21
:param client: python juju client.
22
:type client: jujupy.EnvJujuClient
23
:param status: a BaseStatusParser
24
:type status: BaseStatusParser
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)
40
status.s.assert_machine_member_status(name, "has-vote")
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",
47
"message": "called in "
48
"config-changed hook"})
49
status.s.assert_unit_workload_status("statusstresser/0",
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")
64
def run_reduced_status(client, status):
65
"""run a subset of the status asserts.
67
run a reduced set of tests for a StatusParser, this is useful for
68
status outputs such as Tabular that hold less information.
70
:param client: python juju client.
71
:type client: jujupy.EnvJujuClient
72
:param status: a BaseStatusParser
73
:type status: BaseStatusParser
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"))
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",
93
status.s.assert_unit_workload_status("statusstresser/0",
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")
102
def test_status_set_on_install(client):
103
"""Test the status after install.
105
Test that status set is proplerly called during install and
106
that all formats are returning proper information.
108
:param client: python juju client.
109
:type client: jujupy.EnvJujuClient
111
status = StatusTester.from_text(client.get_status(60, True, False,
114
run_complete_status(client, status)
115
status = StatusTester.from_text(client.get_status(60, True, False,
118
run_complete_status(client, status)
119
status = StatusTester.from_text(client.get_status(60, True, False,
122
run_reduced_status(client, status)
126
"""Parse all arguments."""
127
parser = ArgumentParser('Test status outputs')
128
add_basic_testing_arguments(parser)
129
return parser.parse_args()
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')
144
client.wait_for_started()
145
test_status_set_on_install(client)
148
if __name__ == '__main__':