5637
5676
self.assertEqual(status.status_text, text)
5638
5677
self.assertEqual(status.status, {
5639
5678
'machines': {'0': {'agent-state': 'pending'}},
5679
'applications': {'jenkins': {'units': {'jenkins/0': {
5680
'agent-state': 'horsefeathers'}}}}
5683
def test_iter_units(self):
5684
started_unit = {'agent-state': 'started'}
5685
unit_with_subordinates = {
5686
'agent-state': 'started',
5688
'ntp/0': started_unit,
5689
'nrpe/0': started_unit,
5694
'1': {'agent-state': 'started'},
5699
'jenkins/0': unit_with_subordinates,
5704
'application/0': started_unit,
5705
'application/1': started_unit,
5711
('application/0', started_unit),
5712
('application/1', started_unit),
5713
('jenkins/0', unit_with_subordinates),
5714
('nrpe/0', started_unit),
5715
('ntp/0', started_unit),
5717
gen = status.iter_units()
5718
self.assertIsInstance(gen, types.GeneratorType)
5719
self.assertEqual(expected, list(gen))
5722
class TestServiceStatus(FakeHomeTestCase):
5724
def test_iter_machines_no_containers(self):
5725
status = ServiceStatus({
5727
'1': {'foo': 'bar', 'containers': {'1/lxc/0': {'baz': 'qux'}}}
5729
'services': {}}, '')
5730
self.assertEqual(list(status.iter_machines()),
5731
[('1', status.status['machines']['1'])])
5733
def test_iter_machines_containers(self):
5734
status = ServiceStatus({
5736
'1': {'foo': 'bar', 'containers': {'1/lxc/0': {'baz': 'qux'}}}
5738
'services': {}}, '')
5739
self.assertEqual(list(status.iter_machines(containers=True)), [
5740
('1', status.status['machines']['1']),
5741
('1/lxc/0', {'baz': 'qux'}),
5744
def test_agent_items_empty(self):
5745
status = ServiceStatus({'machines': {}, 'services': {}}, '')
5746
self.assertItemsEqual([], status.agent_items())
5748
def test_agent_items(self):
5749
status = ServiceStatus({
5758
'sub': {'baz': 'qux'}
5766
('1', {'foo': 'bar'}),
5767
('jenkins/1', {'subordinates': {'sub': {'baz': 'qux'}}}),
5768
('sub', {'baz': 'qux'})]
5769
self.assertItemsEqual(expected, status.agent_items())
5771
def test_agent_items_containers(self):
5772
status = ServiceStatus({
5774
'1': {'foo': 'bar', 'containers': {
5775
'2': {'qux': 'baz'},
5781
('1', {'foo': 'bar', 'containers': {'2': {'qux': 'baz'}}}),
5782
('2', {'qux': 'baz'})
5784
self.assertItemsEqual(expected, status.agent_items())
5786
def test_get_service_count_zero(self):
5787
status = ServiceStatus({
5789
'1': {'agent-state': 'good'},
5793
self.assertEqual(0, status.get_service_count())
5795
def test_get_service_count(self):
5796
status = ServiceStatus({
5798
'1': {'agent-state': 'good'},
5804
'jenkins/1': {'agent-state': 'bad'},
5809
'dummy-sink/0': {'agent-state': 'started'},
5814
'juju-reports/0': {'agent-state': 'pending'},
5819
self.assertEqual(3, status.get_service_count())
5821
def test_get_service_unit_count_zero(self):
5822
status = ServiceStatus({
5824
'1': {'agent-state': 'good'},
5828
self.assertEqual(0, status.get_service_unit_count('jenkins'))
5830
def test_get_service_unit_count(self):
5831
status = ServiceStatus({
5833
'1': {'agent-state': 'good'},
5839
'jenkins/1': {'agent-state': 'bad'},
5840
'jenkins/2': {'agent-state': 'bad'},
5841
'jenkins/3': {'agent-state': 'bad'},
5846
self.assertEqual(3, status.get_service_unit_count('jenkins'))
5848
def test_get_unit(self):
5849
status = ServiceStatus({
5856
'jenkins/1': {'agent-state': 'bad'},
5861
'jenkins/2': {'agent-state': 'started'},
5867
status.get_unit('jenkins/1'), {'agent-state': 'bad'})
5869
status.get_unit('jenkins/2'), {'agent-state': 'started'})
5870
with self.assertRaisesRegexp(KeyError, 'jenkins/3'):
5871
status.get_unit('jenkins/3')
5873
def test_service_subordinate_units(self):
5874
status = ServiceStatus({
5884
'chaos-monkey/0': {'agent-state': 'started'},
5893
'chaos-monkey/1': {'agent-state': 'started'}
5898
'chaos-monkey/2': {'agent-state': 'started'}
5905
self.assertItemsEqual(
5906
status.service_subordinate_units('ubuntu'),
5908
self.assertItemsEqual(
5909
status.service_subordinate_units('jenkins'),
5910
[('chaos-monkey/0', {'agent-state': 'started'},)])
5911
self.assertItemsEqual(
5912
status.service_subordinate_units('dummy-sink'), [
5913
('chaos-monkey/1', {'agent-state': 'started'}),
5914
('chaos-monkey/2', {'agent-state': 'started'})]
5917
def test_get_open_ports(self):
5918
status = ServiceStatus({
5925
'jenkins/1': {'agent-state': 'bad'},
5930
'jenkins/2': {'open-ports': ['42/tcp']},
5935
self.assertEqual(status.get_open_ports('jenkins/1'), [])
5936
self.assertEqual(status.get_open_ports('jenkins/2'), ['42/tcp'])
5938
def test_agent_states_with_agent_state(self):
5939
status = ServiceStatus({
5941
'1': {'agent-state': 'good'},
5947
'jenkins/1': {'agent-state': 'bad'},
5948
'jenkins/2': {'agent-state': 'good'},
5954
'good': ['1', 'jenkins/2'],
5955
'bad': ['jenkins/1'],
5958
self.assertEqual(expected, status.agent_states())
5960
def test_agent_states_with_agent_status(self):
5961
status = ServiceStatus({
5963
'1': {'agent-state': 'good'},
5969
'jenkins/1': {'agent-status': {'current': 'bad'}},
5970
'jenkins/2': {'agent-status': {'current': 'good'}},
5977
'good': ['1', 'jenkins/2'],
5978
'bad': ['jenkins/1'],
5979
'no-agent': ['2', 'jenkins/3'],
5981
self.assertEqual(expected, status.agent_states())
5983
def test_agent_states_with_juju_status(self):
5984
status = ServiceStatus({
5986
'1': {'juju-status': {'current': 'good'}},
5992
'jenkins/1': {'juju-status': {'current': 'bad'}},
5993
'jenkins/2': {'juju-status': {'current': 'good'}},
6000
'good': ['1', 'jenkins/2'],
6001
'bad': ['jenkins/1'],
6002
'no-agent': ['2', 'jenkins/3'],
6004
self.assertEqual(expected, status.agent_states())
6006
def test_check_agents_started_not_started(self):
6007
status = ServiceStatus({
6009
'1': {'agent-state': 'good'},
6015
'jenkins/1': {'agent-state': 'bad'},
6016
'jenkins/2': {'agent-state': 'good'},
6021
self.assertEqual(status.agent_states(),
6022
status.check_agents_started('env1'))
6024
def test_check_agents_started_all_started_with_agent_state(self):
6025
status = ServiceStatus({
6027
'1': {'agent-state': 'started'},
6028
'2': {'agent-state': 'started'},
6034
'agent-state': 'started',
6037
'agent-state': 'started'
6041
'jenkins/2': {'agent-state': 'started'},
6046
self.assertIs(None, status.check_agents_started('env1'))
6048
def test_check_agents_started_all_started_with_agent_status(self):
6049
status = ServiceStatus({
6051
'1': {'agent-state': 'started'},
6052
'2': {'agent-state': 'started'},
6058
'agent-status': {'current': 'idle'},
6061
'agent-status': {'current': 'idle'}
6065
'jenkins/2': {'agent-status': {'current': 'idle'}},
6070
self.assertIs(None, status.check_agents_started('env1'))
6072
def test_check_agents_started_agent_error(self):
6073
status = ServiceStatus({
6075
'1': {'agent-state': 'any-error'},
6079
with self.assertRaisesRegexp(ErroredUnit,
6080
'1 is in state any-error'):
6081
status.check_agents_started('env1')
6083
def do_check_agents_started_failure(self, failure):
6084
status = ServiceStatus({
6086
'agent-state-info': failure}},
6089
with self.assertRaises(ErroredUnit) as e_cxt:
6090
status.check_agents_started()
6093
str(e), '0 is in state {}'.format(failure))
6094
self.assertEqual(e.unit_name, '0')
6095
self.assertEqual(e.state, failure)
6097
def test_check_agents_cannot_set_up_groups(self):
6098
self.do_check_agents_started_failure('cannot set up groups foobar')
6100
def test_check_agents_error(self):
6101
self.do_check_agents_started_failure('error executing "lxc-start"')
6103
def test_check_agents_cannot_run_instances(self):
6104
self.do_check_agents_started_failure('cannot run instances')
6106
def test_check_agents_cannot_run_instance(self):
6107
self.do_check_agents_started_failure('cannot run instance')
6109
def test_check_agents_started_agent_info_error(self):
6110
# Sometimes the error is indicated in a special 'agent-state-info'
6112
status = ServiceStatus({
6114
'1': {'agent-state-info': 'any-error'},
6118
with self.assertRaisesRegexp(ErroredUnit,
6119
'1 is in state any-error'):
6120
status.check_agents_started('env1')
6122
def test_get_agent_versions_1x(self):
6123
status = ServiceStatus({
6125
'1': {'agent-version': '1.6.2'},
6126
'2': {'agent-version': '1.6.1'},
6132
'agent-version': '1.6.1'},
6140
'1.6.1': {'jenkins/0', '2'},
6141
'unknown': {'jenkins/1'},
6142
}, status.get_agent_versions())
6144
def test_get_agent_versions_2x(self):
6145
status = ServiceStatus({
6147
'1': {'juju-status': {'version': '1.6.2'}},
6148
'2': {'juju-status': {'version': '1.6.1'}},
6154
'juju-status': {'version': '1.6.1'}},
6162
'1.6.1': {'jenkins/0', '2'},
6163
'unknown': {'jenkins/1'},
6164
}, status.get_agent_versions())
6166
def test_iter_new_machines(self):
6167
old_status = ServiceStatus({
6172
new_status = ServiceStatus({
6178
self.assertItemsEqual(new_status.iter_new_machines(old_status),
6179
[('foo', 'foo_info')])
6181
def test_get_instance_id(self):
6182
status = ServiceStatus({
6184
'0': {'instance-id': 'foo-bar'},
6188
self.assertEqual(status.get_instance_id('0'), 'foo-bar')
6189
with self.assertRaises(KeyError):
6190
status.get_instance_id('1')
6191
with self.assertRaises(KeyError):
6192
status.get_instance_id('2')
6194
def test_from_text(self):
6195
text = TestEnvJujuClient1X.make_status_yaml(
6196
'agent-state', 'pending', 'horsefeathers')
6197
status = ServiceStatus.from_text(text)
6198
self.assertEqual(status.status_text, text)
6199
self.assertEqual(status.status, {
6200
'machines': {'0': {'agent-state': 'pending'}},
5640
6201
'services': {'jenkins': {'units': {'jenkins/0': {
5641
6202
'agent-state': 'horsefeathers'}}}}