648
656
[c[0][0] for c in jenkins.calls['get_build_info']],
649
657
['build-revision', 'build-revision', 'aws-deploy'])
659
def update_cloud_health_check(self, result, status):
660
foo = CloudHealthJob(name='foo', substrate='bar', last_completed=4)
661
jenkins = make_cloud_health_jenkins([foo])
662
jenkins.build_info['foo'] = {4: {
663
'result': result, 'timestamp': 123456789, 'duration': 987654321}}
664
director = CIDirector(jenkins, StateFile())
665
director.state_file.start_revision('baz', '1', 'qux', '1.27', 23)
666
director.update_cloud_health([foo])
669
director.state_file.get_cloud_health(23),
673
director.state_file.get_cloud_health(23),
674
{'substrates': {'bar': {'foo': {4: {
676
'timestamp': '1973-11-29T21:33:09Z',
677
'duration': 987654321,
680
def test_update_cloud_health_success(self):
681
self.update_cloud_health_check(SUCCESS, SUCCEEDED),
683
def test_update_cloud_health_failure(self):
684
self.update_cloud_health_check(FAILURE, FAILED),
686
def test_update_cloud_health_unstable(self):
687
self.update_cloud_health_check(UNSTABLE, FAILED),
689
def test_update_cloud_health_aborted(self):
690
self.update_cloud_health_check(ABORTED, None),
692
def test_update_cloud_health_not_built(self):
693
self.update_cloud_health_check(NOT_BUILT, None),
695
def test_update_cloud_health_already_set(self):
696
foo = CloudHealthJob(name='foo', substrate='bar', last_completed=4)
697
jenkins = make_cloud_health_jenkins([foo])
698
jenkins.build_info['foo'] = {4: {'result': SUCCESS}}
699
director = CIDirector(jenkins, StateFile())
700
director.state_file.start_revision('baz', '1', 'qux', '1.27', 23)
701
director.state_file.update_cloud_health(23, foo, FAILED, 4321, 1234)
702
director.update_cloud_health([foo])
704
director.state_file.get_cloud_health(23),
705
{'substrates': {'bar': {'foo': {4: {
707
'timestamp': '1970-01-01T01:12:01Z',
711
def test_update_cloud_health_other_build_set(self):
712
foo = CloudHealthJob(name='foo', substrate='bar', last_completed=4)
713
jenkins = make_cloud_health_jenkins([foo])
714
jenkins.build_info['foo'] = {
715
4: {'result': SUCCESS, 'timestamp': 5678, 'duration': 8765}}
716
director = CIDirector(jenkins, StateFile())
717
director.state_file.start_revision('baz', '1', 'qux', '1.27', 23)
718
director.state_file.update_cloud_health(
719
23, foo._replace(last_completed=5), FAILED, 1234, 4321)
720
director.update_cloud_health([foo])
722
director.state_file.get_cloud_health(23),
723
{'substrates': {'bar': {'foo': {
726
'timestamp': '1970-01-01T01:34:38Z',
731
'timestamp': '1970-01-01T00:20:34Z',
652
737
def finally_fail(test_case, sf, test_id):
653
738
sf.get_grouped_job(test_id).start_build(5)
2068
2157
self.assertEqual(logging.INFO, root_logger.level)
2069
2158
self.assertEqual(5, root_logger.handlers[0].backupCount)
2070
2159
self.assertEqual(log_path, root_logger.handlers[0].baseFilename)
2162
def make_description(tags=None, section='ci-director'):
2163
lines = ['[{}]\n'.format(section)]
2164
if tags is not None:
2165
tags = ' '.join('{}={}'.format(k, v) for k, v in tags.items())
2166
lines.append('tags: {}\n'.format(tags))
2167
return ''.join(lines)
2170
def make_cloud_health_jenkins(jobs, section=None):
2175
job_dict[job.name] = {
2176
'last_completed': {'number': job.last_completed},
2178
'description': make_description(
2179
tags={'substrate': job.substrate},
2180
section=section.get(job.name, 'cloud-health'))}
2181
return FakeJenkins(job_dict)
2184
class TestListCloudHealth(TestCase):
2186
def test_list_cloud_health(self):
2187
foo = CloudHealthJob(name='foo', substrate='bar', last_completed=4)
2188
baz = CloudHealthJob(name='baz', substrate='qux', last_completed=6)
2189
jenkins = make_cloud_health_jenkins([foo, baz])
2190
si = ServerInfo(jenkins.get_info())
2191
cloud_health = list(list_cloud_health(si, jenkins, None))
2192
self.assertEqual(cloud_health, [foo, baz])
2194
def test_list_cloud_health_requires_section(self):
2195
foo = CloudHealthJob(name='foo', substrate='bar', last_completed=4)
2196
baz = CloudHealthJob(name='baz', substrate='qux', last_completed=6)
2197
foo2 = CloudHealthJob(name='foo2', substrate='qux', last_completed=6)
2198
jenkins = make_cloud_health_jenkins(
2199
[foo, baz, foo2], section={'baz': 'cloud-wealth'})
2200
si = ServerInfo(jenkins.get_info())
2201
cloud_health = list(list_cloud_health(si, jenkins, None))
2202
self.assertEqual(cloud_health, [
2203
CloudHealthJob(name='foo', substrate='bar', last_completed=4),
2204
CloudHealthJob(name='foo2', substrate='qux', last_completed=6),
2208
class TestShouldUpdateHealth(TestCase):
2210
def test_should_update_health_build_revision(self):
2211
jobs = [BUILD_REVISION, PUBLISH_REVISION]
2212
self.assertEqual(False, should_update_health(None, jobs))
2214
def test_should_update_health_publish_revision(self):
2215
self.assertEqual(True, should_update_health(None, [PUBLISH_REVISION]))
2217
def test_should_update_health_revision_results(self):
2218
self.assertEqual(True, should_update_health(None, [REVISION_RESULTS]))
2220
def test_should_update_health_non_cid_job(self):
2221
jenkins = FakeJenkins({'foo': {'build_number': 2}})
2222
self.assertEqual(False, should_update_health(jenkins, ['foo']))
2224
def test_should_update_cid_job(self):
2225
jenkins = FakeJenkins({'foo': {
2226
'build_number': 2, 'description': make_description(tags={})}})
2227
self.assertEqual(True, should_update_health(jenkins, ['foo']))