1
from mock import MagicMock, patch
4
from tests import JenkinsJSONData
5
from settings import PUBLIC_JENKINS_URL
8
class JenkinsUtilsGetDownstreamProjects(unittest.TestCase):
10
self.jenkins = MagicMock()
11
self.jenkins.get_json_data = MagicMock(
12
return_value={'downstreamProjects':
13
[{'name': 'project1'},
15
{'name': 'project3'}]})
17
def test_get_downstream_projects(self):
18
ret = jenkinsutils.get_downstream_projects(self.jenkins,
20
expected = ['project1', 'project2', 'project3']
21
self.assertEqual(ret, expected)
24
def hide_jenkins_url(url):
25
return url.replace('10.0.0.1', 'jenkins')
28
class JenkinsUtilsGetDownstreamBuilds(unittest.TestCase):
31
self.jenkins = JenkinsJSONData()
33
def test_get_downstream_builds(self):
34
ret = jenkinsutils.get_downstream_builds(self.jenkins,
35
'http://ip:8080/job/',
39
{'project': 'job-multiconfig',
41
'url': 'http://ip:8080/job/job-multiconfig/3/',
42
'result': 'FAILURE', },
43
{'project': 'job-freestyle',
45
'url': 'http://ip:8080/job/job-freestyle/7/',
46
'result': 'SUCCESS', },
48
self.assertEqual(ret, expected)
51
class JenkinsUtilsIsMatrixJob(unittest.TestCase):
54
self.jenkins = JenkinsJSONData()
56
def test_matrix_job(self):
57
ret = jenkinsutils.is_matrix_job(self.jenkins,
58
'http://ip:8080/job/job-multiconfig/')
59
self.assertEqual(ret, True)
61
def test_matrix_job_with_build_number(self):
62
ret = jenkinsutils.is_matrix_job(self.jenkins,
63
'http://ip:8080/job/job-multiconfig/32')
64
self.assertEqual(ret, True)
66
def test_non_matrix_job(self):
67
ret = jenkinsutils.is_matrix_job(self.jenkins,
68
'http://ip:8080/job/job-freestyle/')
69
self.assertEqual(ret, False)
72
class JenkinsUtilsGetExecutedBuilds(unittest.TestCase):
74
self.jenkins = JenkinsJSONData()
75
self.build_url = self.jenkins.build_url
77
def test_get_executed_builds_wrong_url(self):
78
ret = jenkinsutils.get_executed_builds(self.jenkins,
81
self.assertEqual(ret, expected)
83
def test_get_executed_builds(self):
84
with patch('jenkinsutils.hide_jenkins_url', new=hide_jenkins_url):
85
ret = jenkinsutils.get_executed_builds(self.jenkins,
88
{'output': 'http://ip:8080/job/job-multiconfig/.' +
89
'/distribution=raring,flavor=amd64/3/console',
90
'result': 'FAILURE', },
91
{'output': 'http://ip:8080/job/job-multiconfig/.' +
92
'/distribution=raring,flavor=i386/3/console',
93
'result': 'FAILURE', },
94
{'output': 'http://ip:8080/job/job-freestyle/7//console',
95
'result': u'SUCCESS', },
97
self.assertEqual(ret, expected)
100
class JenkinsUtilsGetExecutedTestRuns(unittest.TestCase):
102
self.jenkins = JenkinsJSONData()
104
def test_get_coverity_artifacts(self):
105
with patch('jenkinsutils.hide_jenkins_url', new=hide_jenkins_url):
106
ret = jenkinsutils.get_coverity_artifacts(self.jenkins,
107
'http://ip:8080/job/job-multiconfig/' +
108
'./distribution=raring,flavor=amd64/3/')
109
expected = ['http://ip:8080/job/job-multiconfig/./distribution=' +
110
'raring,flavor=amd64/3//artifact/results/coverity/' +
112
'http://ip:8080/job/job-multiconfig/./distribution=' +
113
'raring,flavor=amd64/3//artifact/results/coverity/' +
116
self.assertEqual(ret, expected)
119
class JenkinsUtilsIsJobPublished(unittest.TestCase):
120
def test_is_job_published_with_private_job(self):
121
jenkins = MagicMock()
122
jenkins.get_job_config = MagicMock(return_value='<b></b>')
123
with patch('jenkinsutils.jenkins.Jenkins',
124
new=MagicMock(return_value=jenkins)):
125
self.assertFalse(jenkinsutils.is_job_published('my-job'))
127
def test_is_job_published_with_no_job(self):
128
jenkins = MagicMock()
129
jenkins.get_job_config = MagicMock(return_value='')
130
with patch('jenkinsutils.jenkins.Jenkins',
131
new=MagicMock(return_value=jenkins)):
132
self.assertFalse(jenkinsutils.is_job_published(None))
134
def test_is_job_published_with_public_job(self):
135
jenkins = MagicMock()
136
jenkins.get_job_config = MagicMock(
137
return_value='<hudson.plugins.build__publisher.BuildPublisher>' +
138
'</hudson.plugins.build__publisher.BuildPublisher>')
139
with patch('jenkinsutils.jenkins.Jenkins',
140
new=MagicMock(return_value=jenkins)):
141
self.assertTrue(jenkinsutils.is_job_published('my-job'))
143
def test_is_job_published_with_exception(self):
144
jenkins = MagicMock()
145
jenkins.get_job_config.side_effect = Exception(
146
'get_job_config exception')
147
with patch('jenkinsutils.jenkins.Jenkins',
148
new=MagicMock(return_value=jenkins)):
149
self.assertFalse(jenkinsutils.is_job_published('my-job'))
152
class JenkinsUtilsTestHideJenkinsUrl(unittest.TestCase):
154
def test_hide_jenkins_url_public_url(self):
156
('http://10.0.0.1:8080/job/android-audiosystem/31/',
157
PUBLIC_JENKINS_URL + '/job/android-audiosystem/31/'),
158
('http://10.0.0.1:8080/job/android-ubuntu-matrix/4/',
159
PUBLIC_JENKINS_URL + '/job/android-ubuntu-matrix/4/'),
160
('https://10.0.0.1:8080/job/unity-ci/32/',
161
PUBLIC_JENKINS_URL + '/job/unity-ci/32/')
164
is_job_published = lambda job: True
165
for url, expected in urls:
166
with patch('jenkinsutils.is_job_published',
167
new=is_job_published):
168
self.assertEqual(jenkinsutils.hide_jenkins_url(url),
171
def test_hide_jenkins_url_hidden_url(self):
173
'https://10.0.0.1:8080/job/android-audiosystem/31/',
174
'http://10.0.0.1:8080/job/android-ubuntu-matrix/4/',
175
'http://10.0.0.1:8080/job/unity-ci/32/',
178
is_job_published = lambda job: False
180
with patch('jenkinsutils.is_job_published',
181
new=is_job_published):
182
self.assertEqual(jenkinsutils.hide_jenkins_url(url),
183
url.replace('http://10.0.0.1:8080',
184
'http://jenkins:8080'))
186
def test_hide_jenkins_url_unknown_url(self):
188
'http://12.0.0.2:8080/job/android-audiosystem/31/',
189
'http://12.0.0.2:8080/job/android-ubuntu-matrix/4/',
190
'https://12.0.0.2:8080/job/unity-ci/32/',
191
'https://12.0.0.080/droid-audiosystem/31/',
192
'http://12.0.0.080/droid-ubuntu-matrix/4/',
193
'http://12.0.0.080/ity-ci/32/',
196
is_job_published = lambda job: False
198
with patch('jenkinsutils.is_job_published',
199
new=is_job_published):
200
self.assertEqual(jenkinsutils.hide_jenkins_url(url),