Use TestWithScenarios to add additional url tests

It's important to check that we correctly handle the server url for all
API calls, so ensure that the test code uses test scenarios to cover.

Fix get_info() api call creation of url.

Change-Id: Idb0becc4c0c56df81bc5545919e530b7a77dadc9
This commit is contained in:
Darragh Bailey 2015-10-05 17:36:58 +01:00 committed by Khai Do
parent 87a892a232
commit 2aa1a5f1b8
26 changed files with 215 additions and 205 deletions

View File

@ -453,7 +453,7 @@ class Jenkins(object):
u'name': u'my_job'}
"""
url = "/".join((item, INFO))
url = '/'.join((item, INFO)).lstrip('/')
if query:
url += query
try:

View File

@ -1,6 +1,7 @@
import sys
from six.moves.urllib.request import build_opener
from testscenarios import TestWithScenarios
import jenkins
@ -10,18 +11,26 @@ else:
import unittest
class JenkinsTestBase(unittest.TestCase):
class JenkinsTestBase(TestWithScenarios, unittest.TestCase):
crumb_data = {
"crumb": "dab177f483b3dd93483ef6716d8e792d",
"crumbRequestField": ".crumb",
}
scenarios = [
('base_url1', dict(base_url='http://example.com')),
('base_url2', dict(base_url='http://example.com/jenkins'))
]
def setUp(self):
super(JenkinsTestBase, self).setUp()
self.opener = build_opener()
self.j = jenkins.Jenkins('http://example.com/', 'test', 'test')
self.j = jenkins.Jenkins(self.base_url, 'test', 'test')
def make_url(self, path):
return u'{0}/{1}'.format(self.base_url, path)
def _check_requests(self, requests):

View File

@ -15,7 +15,7 @@ class JenkinsBuildJobTest(JenkinsJobsTestBase):
build_info = self.j.build_job(u'Test Job')
self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/build')
self.make_url('job/Test%20Job/build'))
self.assertEqual(build_info, {'foo': 'bar'})
self._check_requests(jenkins_mock.call_args_list)
@ -28,7 +28,7 @@ class JenkinsBuildJobTest(JenkinsJobsTestBase):
build_info = self.j.build_job(u'a Folder/Test Job')
self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/build')
self.make_url('job/a%20Folder/job/Test%20Job/build'))
self.assertEqual(build_info, {'foo': 'bar'})
self._check_requests(jenkins_mock.call_args_list)
@ -41,7 +41,7 @@ class JenkinsBuildJobTest(JenkinsJobsTestBase):
build_info = self.j.build_job(u'TestJob', token='some_token')
self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/build?token=some_token')
self.make_url('job/TestJob/build?token=some_token'))
self.assertEqual(build_info, {'foo': 'bar'})
self._check_requests(jenkins_mock.call_args_list)
@ -54,7 +54,7 @@ class JenkinsBuildJobTest(JenkinsJobsTestBase):
build_info = self.j.build_job(u'a Folder/TestJob', token='some_token')
self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/TestJob/build?token=some_token')
self.make_url('job/a%20Folder/job/TestJob/build?token=some_token'))
self.assertEqual(build_info, {'foo': 'bar'})
self._check_requests(jenkins_mock.call_args_list)

View File

@ -12,7 +12,7 @@ class JenkinsGetJobConfigTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/config.xml')
self.make_url('job/Test%20Job/config.xml'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -21,5 +21,5 @@ class JenkinsGetJobConfigTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20folder/job/Test%20Job/config.xml')
self.make_url('job/a%20folder/job/Test%20Job/config.xml'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -19,8 +19,7 @@ class JenkinsCopyJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/createItem'
'?name=Test%20Job_2&mode=copy&from=Test%20Job')
self.make_url('createItem?name=Test%20Job_2&mode=copy&from=Test%20Job'))
self.assertTrue(self.j.job_exists('Test Job_2'))
self._check_requests(jenkins_mock.call_args_list)
@ -36,8 +35,8 @@ class JenkinsCopyJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/createItem'
'?name=Test%20Job_2&mode=copy&from=Test%20Job')
self.make_url('job/a%20Folder/createItem?name=Test%20Job_2'
'&mode=copy&from=Test%20Job'))
self.assertTrue(self.j.job_exists('a Folder/Test Job_2'))
self._check_requests(jenkins_mock.call_args_list)
@ -52,8 +51,7 @@ class JenkinsCopyJobTest(JenkinsJobsTestBase):
self.j.copy_job(u'TestJob', u'TestJob_2')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/createItem'
'?name=TestJob_2&mode=copy&from=TestJob')
self.make_url('createItem?name=TestJob_2&mode=copy&from=TestJob'))
self.assertEqual(
str(context_manager.exception),
'create[TestJob_2] failed')
@ -70,8 +68,8 @@ class JenkinsCopyJobTest(JenkinsJobsTestBase):
self.j.copy_job(u'a Folder/TestJob', u'a Folder/TestJob_2')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/createItem'
'?name=TestJob_2&mode=copy&from=TestJob')
self.make_url('job/a%20Folder/createItem?name=TestJob_2&mode=copy'
'&from=TestJob'))
self.assertEqual(
str(context_manager.exception),
'create[a Folder/TestJob_2] failed')

View File

@ -19,7 +19,7 @@ class JenkinsCreateJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/createItem?name=Test%20Job')
self.make_url('createItem?name=Test%20Job'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -34,7 +34,7 @@ class JenkinsCreateJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/job/a%20Folder/createItem?name=Test%20Job')
self.make_url('job/a%20Folder/createItem?name=Test%20Job'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -48,7 +48,7 @@ class JenkinsCreateJobTest(JenkinsJobsTestBase):
self.j.create_job(u'TestJob', self.config_xml)
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/TestJob/api/json?tree=name')
self.make_url('job/TestJob/api/json?tree=name'))
self.assertEqual(
str(context_manager.exception),
'job[TestJob] already exists')
@ -65,7 +65,7 @@ class JenkinsCreateJobTest(JenkinsJobsTestBase):
self.j.create_job(u'a Folder/TestJob', self.config_xml)
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/TestJob/api/json?tree=name')
self.make_url('job/a%20Folder/job/TestJob/api/json?tree=name'))
self.assertEqual(
str(context_manager.exception),
'job[a Folder/TestJob] already exists')
@ -83,10 +83,10 @@ class JenkinsCreateJobTest(JenkinsJobsTestBase):
self.j.create_job(u'TestJob', self.config_xml)
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/TestJob/api/json?tree=name')
self.make_url('job/TestJob/api/json?tree=name'))
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/createItem?name=TestJob')
self.make_url('createItem?name=TestJob'))
self.assertEqual(
str(context_manager.exception),
'create[TestJob] failed')
@ -104,10 +104,10 @@ class JenkinsCreateJobTest(JenkinsJobsTestBase):
self.j.create_job(u'a Folder/TestJob', self.config_xml)
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/TestJob/api/json?tree=name')
self.make_url('job/a%20Folder/job/TestJob/api/json?tree=name'))
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/job/a%20Folder/createItem?name=TestJob')
self.make_url('job/a%20Folder/createItem?name=TestJob'))
self.assertEqual(
str(context_manager.exception),
'create[a Folder/TestJob] failed')

View File

@ -21,7 +21,7 @@ class JenkinsDebugJobInfoTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/api/json?depth=0')
self.make_url('job/Test%20Job/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -38,5 +38,5 @@ class JenkinsDebugJobInfoTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/api/json?depth=0')
self.make_url('job/a%20Folder/job/Test%20Job/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -18,7 +18,7 @@ class JenkinsDeleteJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/Test%20Job/doDelete')
self.make_url('job/Test%20Job/doDelete'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -32,7 +32,7 @@ class JenkinsDeleteJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/Test%20Job/doDelete')
self.make_url('job/a%20Folder/job/Test%20Job/doDelete'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -47,7 +47,7 @@ class JenkinsDeleteJobTest(JenkinsJobsTestBase):
self.j.delete_job(u'TestJob')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/TestJob/doDelete')
self.make_url('job/TestJob/doDelete'))
self.assertEqual(
str(context_manager.exception),
'delete[TestJob] failed')
@ -65,7 +65,7 @@ class JenkinsDeleteJobTest(JenkinsJobsTestBase):
self.j.delete_job(u'a Folder/TestJob')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/TestJob/doDelete')
self.make_url('job/a%20Folder/job/TestJob/doDelete'))
self.assertEqual(
str(context_manager.exception),
'delete[a Folder/TestJob] failed')

View File

@ -18,7 +18,7 @@ class JenkinsDisableJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/Test%20Job/disable')
self.make_url('job/Test%20Job/disable'))
self.assertTrue(self.j.job_exists('Test Job'))
self._check_requests(jenkins_mock.call_args_list)
@ -33,6 +33,6 @@ class JenkinsDisableJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/Test%20Job/disable')
self.make_url('job/a%20Folder/job/Test%20Job/disable'))
self.assertTrue(self.j.job_exists('a Folder/Test Job'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -18,7 +18,7 @@ class JenkinsEnableJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/TestJob/enable')
self.make_url('job/TestJob/enable'))
self.assertTrue(self.j.job_exists('TestJob'))
self._check_requests(jenkins_mock.call_args_list)
@ -33,6 +33,6 @@ class JenkinsEnableJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/TestJob/enable')
self.make_url('job/a%20Folder/job/TestJob/enable'))
self.assertTrue(self.j.job_exists('a Folder/TestJob'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -24,13 +24,13 @@ class JenkinsGetJobsTest(JenkinsGetJobsTestBase):
self.assertEqual(job_info, [jobs])
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/api/json?tree=jobs[url,color,name,jobs]')
self.make_url('api/json?tree=jobs[url,color,name,jobs]'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_folders_simple(self, jenkins_mock):
response = build_jobs_list_responses(
self.jobs_in_folder, 'http://example.com/')
self.jobs_in_folder, self.make_url(''))
jenkins_mock.side_effect = iter(response)
jobs_info = self.j.get_jobs()
@ -45,7 +45,7 @@ class JenkinsGetJobsTest(JenkinsGetJobsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_folders_additional_level(self, jenkins_mock):
response = build_jobs_list_responses(
self.jobs_in_folder, 'http://example.com/')
self.jobs_in_folder, self.make_url(''))
jenkins_mock.side_effect = iter(response)
jobs_info = self.j.get_jobs(folder_depth=1)

View File

@ -22,7 +22,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
self.assertEqual(job_info, job_info_to_return)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/api/json?depth=0')
self.make_url('job/Test%20Job/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -40,7 +40,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
self.assertEqual(job_info, job_info_to_return)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/api/json?depth=0')
self.make_url('job/a%20Folder/job/Test%20Job/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -71,7 +71,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
self.j.get_job_info(u'TestJob')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/api/json?depth=0')
self.make_url('job/TestJob/api/json?depth=0'))
self.assertEqual(
str(context_manager.exception),
'job[TestJob] does not exist')
@ -85,7 +85,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
self.j.get_job_info(u'TestJob')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/api/json?depth=0')
self.make_url('job/TestJob/api/json?depth=0'))
self.assertEqual(
str(context_manager.exception),
'Could not parse JSON info for job[TestJob]')
@ -94,7 +94,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob/api/json?depth=0',
self.make_url('job/TestJob/api/json?depth=0'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -104,7 +104,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
self.j.get_job_info(u'TestJob')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/api/json?depth=0')
self.make_url('job/TestJob/api/json?depth=0'))
self.assertEqual(
str(context_manager.exception),
'job[TestJob] does not exist')
@ -113,7 +113,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_in_folder_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/a%20Folder/job/TestJob/api/json?depth=0',
self.make_url('job/a%20Folder/job/TestJob/api/json?depth=0'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -123,7 +123,7 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
self.j.get_job_info(u'a Folder/TestJob')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/TestJob/api/json?depth=0')
self.make_url('job/a%20Folder/job/TestJob/api/json?depth=0'))
self.assertEqual(
str(context_manager.exception),
'job[a Folder/TestJob] does not exist')

View File

@ -17,7 +17,7 @@ class JenkinsGetJobNameTest(JenkinsJobsTestBase):
self.assertEqual(job_name, 'Test Job')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/api/json?tree=name')
self.make_url('job/Test%20Job/api/json?tree=name'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -30,7 +30,7 @@ class JenkinsGetJobNameTest(JenkinsJobsTestBase):
self.assertEqual(job_name, 'Test Job')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/api/json?tree=name')
self.make_url('job/a%20Folder/job/Test%20Job/api/json?tree=name'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -42,7 +42,7 @@ class JenkinsGetJobNameTest(JenkinsJobsTestBase):
self.assertEqual(job_name, None)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/api/json?tree=name')
self.make_url('job/TestJob/api/json?tree=name'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -54,7 +54,7 @@ class JenkinsGetJobNameTest(JenkinsJobsTestBase):
self.assertEqual(job_name, None)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/TestJob/api/json?tree=name')
self.make_url('job/a%20Folder/job/TestJob/api/json?tree=name'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -66,7 +66,7 @@ class JenkinsGetJobNameTest(JenkinsJobsTestBase):
self.j.get_job_name(u'TestJob')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/TestJob/api/json?tree=name')
self.make_url('job/TestJob/api/json?tree=name'))
self.assertEqual(
str(context_manager.exception),
'Jenkins returned an unexpected job name {0} '
@ -82,7 +82,7 @@ class JenkinsGetJobNameTest(JenkinsJobsTestBase):
self.j.get_job_name(u'a Folder/TestJob')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/TestJob/api/json?tree=name')
self.make_url('job/a%20Folder/job/TestJob/api/json?tree=name'))
self.assertEqual(
str(context_manager.exception),
'Jenkins returned an unexpected job name {0} (expected: '

View File

@ -17,7 +17,7 @@ class JenkinsReconfigJobTest(JenkinsJobsTestBase):
self.j.reconfig_job(u'Test Job', self.config_xml)
self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/config.xml')
self.make_url('job/Test%20Job/config.xml'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -30,5 +30,5 @@ class JenkinsReconfigJobTest(JenkinsJobsTestBase):
self.j.reconfig_job(u'a Folder/Test Job', self.config_xml)
self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/config.xml')
self.make_url('job/a%20Folder/job/Test%20Job/config.xml'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -19,7 +19,7 @@ class JenkinsRenameJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/Test%20Job/doRename?newName=Test%20Job_2')
self.make_url('job/Test%20Job/doRename?newName=Test%20Job_2'))
self.assertTrue(self.j.job_exists('Test Job_2'))
self._check_requests(jenkins_mock.call_args_list)
@ -35,7 +35,7 @@ class JenkinsRenameJobTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/Test%20Job/doRename?newName=Test%20Job_2')
self.make_url('job/a%20Folder/job/Test%20Job/doRename?newName=Test%20Job_2'))
self.assertTrue(self.j.job_exists('Test Job_2'))
self._check_requests(jenkins_mock.call_args_list)
@ -50,7 +50,7 @@ class JenkinsRenameJobTest(JenkinsJobsTestBase):
self.j.rename_job(u'TestJob', u'TestJob_2')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/TestJob/doRename?newName=TestJob_2')
self.make_url('job/TestJob/doRename?newName=TestJob_2'))
self.assertEqual(
str(context_manager.exception),
'rename[TestJob_2] failed')
@ -67,7 +67,7 @@ class JenkinsRenameJobTest(JenkinsJobsTestBase):
self.j.rename_job(u'a Folder/TestJob', u'a Folder/TestJob_2')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/job/a%20Folder/job/TestJob/doRename?newName=TestJob_2')
self.make_url('job/a%20Folder/job/TestJob/doRename?newName=TestJob_2'))
self.assertEqual(
str(context_manager.exception),
'rename[a Folder/TestJob_2] failed')

View File

@ -12,7 +12,7 @@ class JenkinsSetNextBuildNumberTest(JenkinsJobsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/nextbuildnumber/submit')
self.make_url('job/TestJob/nextbuildnumber/submit'))
self.assertEqual(
jenkins_mock.call_args[0][0].data,
b'nextBuildNumber=1234')

View File

@ -16,7 +16,7 @@ class JenkinsBuildConsoleTest(JenkinsTestBase):
self.assertEqual(build_info, jenkins_mock.return_value)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/52/consoleText')
self.make_url('job/Test%20Job/52/consoleText'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -28,7 +28,7 @@ class JenkinsBuildConsoleTest(JenkinsTestBase):
self.assertEqual(build_info, jenkins_mock.return_value)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/52/consoleText')
self.make_url('job/a%20Folder/job/Test%20Job/52/consoleText'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -64,7 +64,7 @@ class JenkinsBuildConsoleTest(JenkinsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob/52/consoleText',
self.make_url('job/TestJob/52/consoleText'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -74,7 +74,7 @@ class JenkinsBuildConsoleTest(JenkinsTestBase):
self.j.get_build_console_output(u'TestJob', number=52)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/52/consoleText')
self.make_url('job/TestJob/52/consoleText'))
self.assertEqual(
str(context_manager.exception),
'job[TestJob] number[52] does not exist')
@ -83,7 +83,7 @@ class JenkinsBuildConsoleTest(JenkinsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_in_folder_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/a%20Folder/job/TestJob/52/consoleText',
self.make_url('job/a%20Folder/job/TestJob/52/consoleText'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -93,7 +93,7 @@ class JenkinsBuildConsoleTest(JenkinsTestBase):
self.j.get_build_console_output(u'a Folder/TestJob', number=52)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/TestJob/52/consoleText')
self.make_url('job/a%20Folder/job/TestJob/52/consoleText'))
self.assertEqual(
str(context_manager.exception),
'job[a Folder/TestJob] number[52] does not exist')
@ -117,7 +117,7 @@ class JenkinsBuildInfoTest(JenkinsTestBase):
self.assertEqual(build_info, build_info_to_return)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/52/api/json?depth=0')
self.make_url('job/Test%20Job/52/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -135,7 +135,7 @@ class JenkinsBuildInfoTest(JenkinsTestBase):
self.assertEqual(build_info, build_info_to_return)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/52/api/json?depth=0')
self.make_url('job/a%20Folder/job/Test%20Job/52/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -163,7 +163,7 @@ class JenkinsBuildInfoTest(JenkinsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob/api/json?depth=0',
self.make_url('job/TestJob/api/json?depth=0'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -179,7 +179,7 @@ class JenkinsBuildInfoTest(JenkinsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_in_folder_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/a%20Folder/job/TestJob/api/json?depth=0',
self.make_url('job/a%20Folder/job/TestJob/api/json?depth=0'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -201,7 +201,7 @@ class JenkinsStopBuildTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/Test%20Job/52/stop')
self.make_url('job/Test%20Job/52/stop'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -211,7 +211,7 @@ class JenkinsStopBuildTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/a%20Folder/job/Test%20Job/52/stop')
self.make_url('job/a%20Folder/job/Test%20Job/52/stop'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -23,13 +23,13 @@ class JenkinsInfoTest(JenkinsTestBase):
self.assertEqual(job_info, job_info_to_return)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob/api/json?depth=0',
self.make_url('job/TestJob/api/json?depth=0'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -39,10 +39,10 @@ class JenkinsInfoTest(JenkinsTestBase):
self.j.get_info()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -53,10 +53,10 @@ class JenkinsInfoTest(JenkinsTestBase):
self.j.get_info()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -67,25 +67,25 @@ class JenkinsInfoTest(JenkinsTestBase):
self.j.get_info()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self.assertEqual(
str(context_manager.exception),
'Could not parse JSON info for server[http://example.com/]')
'Could not parse JSON info for server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_return_empty_response(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.JenkinsException(
"Error communicating with server[http://example.com/]: "
"empty response")
"Error communicating with server[{0}/]: empty response".
format(self.base_url))
with self.assertRaises(jenkins.JenkinsException) as context_manager:
self.j.get_info()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]: '
'empty response')
'Error communicating with server[{0}/]: '
'empty response'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -18,27 +18,27 @@ def get_mock_urlopen_return_value(a_dict=None):
class JenkinsConstructorTest(JenkinsTestBase):
def test_url_with_trailing_slash(self):
self.assertEqual(self.j.server, 'http://example.com/')
self.assertEqual(self.j.server, self.make_url(''))
self.assertEqual(self.j.auth, b'Basic dGVzdDp0ZXN0')
self.assertEqual(self.j.crumb, None)
def test_url_without_trailing_slash(self):
j = jenkins.Jenkins('http://example.com', 'test', 'test')
self.assertEqual(j.server, 'http://example.com/')
j = jenkins.Jenkins(self.base_url, 'test', 'test')
self.assertEqual(j.server, self.make_url(''))
self.assertEqual(j.auth, b'Basic dGVzdDp0ZXN0')
self.assertEqual(j.crumb, None)
def test_without_user_or_password(self):
j = jenkins.Jenkins('http://example.com')
self.assertEqual(j.server, 'http://example.com/')
j = jenkins.Jenkins('{0}'.format(self.base_url))
self.assertEqual(j.server, self.make_url(''))
self.assertEqual(j.auth, None)
self.assertEqual(j.crumb, None)
def test_unicode_password(self):
j = jenkins.Jenkins('http://example.com',
j = jenkins.Jenkins('{0}'.format(self.base_url),
six.u('nonascii'),
six.u('\xe9\u20ac'))
self.assertEqual(j.server, 'http://example.com/')
self.assertEqual(j.server, self.make_url(''))
self.assertEqual(j.auth, b'Basic bm9uYXNjaWk6w6nigqw=')
self.assertEqual(j.crumb, None)
@ -46,18 +46,18 @@ class JenkinsConstructorTest(JenkinsTestBase):
long_str = 'a' * 60
long_str_b64 = 'YWFh' * 20
j = jenkins.Jenkins('http://example.com', long_str, long_str)
j = jenkins.Jenkins('{0}'.format(self.base_url), long_str, long_str)
self.assertNotIn(b"\n", j.auth)
self.assertEqual(j.auth.decode('utf-8'), 'Basic %s' % (
long_str_b64 + 'Om' + long_str_b64[2:] + 'YQ=='))
def test_default_timeout(self):
j = jenkins.Jenkins('http://example.com')
j = jenkins.Jenkins('{0}'.format(self.base_url))
self.assertEqual(j.timeout, socket._GLOBAL_DEFAULT_TIMEOUT)
def test_custom_timeout(self):
j = jenkins.Jenkins('http://example.com', timeout=300)
j = jenkins.Jenkins('{0}'.format(self.base_url), timeout=300)
self.assertEqual(j.timeout, 300)
@ -66,13 +66,13 @@ class JenkinsMaybeAddCrumbTest(JenkinsTestBase):
@patch('jenkins.urlopen')
def test_simple(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.NotFoundException()
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
self.j.maybe_add_crumb(request)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/crumbIssuer/api/json')
self.make_url('crumbIssuer/api/json'))
self.assertFalse(self.j.crumb)
self.assertFalse('.crumb' in request.headers)
self._check_requests(jenkins_mock.call_args_list)
@ -80,13 +80,13 @@ class JenkinsMaybeAddCrumbTest(JenkinsTestBase):
@patch('jenkins.urlopen')
def test_with_data(self, jenkins_mock):
jenkins_mock.return_value = get_mock_urlopen_return_value(self.crumb_data)
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
self.j.maybe_add_crumb(request)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/crumbIssuer/api/json')
self.make_url('crumbIssuer/api/json'))
self.assertEqual(self.j.crumb, self.crumb_data)
self.assertEqual(request.headers['.crumb'], self.crumb_data['crumb'])
self._check_requests(jenkins_mock.call_args_list)
@ -95,13 +95,13 @@ class JenkinsMaybeAddCrumbTest(JenkinsTestBase):
def test_return_empty_response(self, jenkins_mock):
"Don't try to create crumb header from an empty response"
jenkins_mock.side_effect = jenkins.EmptyResponseException("empty response")
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
self.j.maybe_add_crumb(request)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/crumbIssuer/api/json')
self.make_url('crumbIssuer/api/json'))
self.assertFalse(self.j.crumb)
self.assertFalse('.crumb' in request.headers)
self._check_requests(jenkins_mock.call_args_list)
@ -116,13 +116,13 @@ class JenkinsOpenTest(JenkinsTestBase):
get_mock_urlopen_return_value(self.crumb_data),
get_mock_urlopen_return_value(data),
]
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
response = self.j.jenkins_open(request)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/job/TestJob')
self.make_url('job/TestJob'))
self.assertEqual(response, json.dumps(data))
self.assertEqual(self.j.crumb, self.crumb_data)
self.assertEqual(request.headers['.crumb'], self.crumb_data['crumb'])
@ -131,12 +131,12 @@ class JenkinsOpenTest(JenkinsTestBase):
@patch('jenkins.urlopen')
def test_response_403(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob',
self.make_url('job/TestJob'),
code=401,
msg="basic auth failed",
hdrs=[],
fp=None)
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
with self.assertRaises(jenkins.JenkinsException) as context_manager:
self.j.jenkins_open(request, add_crumb=False)
@ -146,18 +146,18 @@ class JenkinsOpenTest(JenkinsTestBase):
'basic auth failed')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/job/TestJob')
self.make_url('job/TestJob'))
self._check_requests(jenkins_mock.call_args_list)
@patch('jenkins.urlopen')
def test_response_404(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob',
self.make_url('job/TestJob'),
code=404,
msg="basic auth failed",
hdrs=[],
fp=None)
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
with self.assertRaises(jenkins.NotFoundException) as context_manager:
self.j.jenkins_open(request, add_crumb=False)
@ -166,35 +166,35 @@ class JenkinsOpenTest(JenkinsTestBase):
'Requested item could not be found')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/job/TestJob')
self.make_url('job/TestJob'))
self._check_requests(jenkins_mock.call_args_list)
@patch('jenkins.urlopen')
def test_empty_response(self, jenkins_mock):
jenkins_mock.return_value = Mock(**{'read.return_value': None})
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
with self.assertRaises(jenkins.JenkinsException) as context_manager:
self.j.jenkins_open(request, False)
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]: '
'empty response')
'Error communicating with server[{0}/]: '
'empty response'.format(self.base_url))
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/job/TestJob')
self.make_url('job/TestJob'))
self._check_requests(jenkins_mock.call_args_list)
@patch('jenkins.urlopen')
def test_response_501(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob',
self.make_url('job/TestJob'),
code=501,
msg="Not implemented",
hdrs=[],
fp=None)
request = jenkins.Request('http://example.com/job/TestJob')
request = jenkins.Request(self.make_url('job/TestJob'))
with self.assertRaises(HTTPError) as context_manager:
self.j.jenkins_open(request, add_crumb=False)
@ -203,15 +203,15 @@ class JenkinsOpenTest(JenkinsTestBase):
'HTTP Error 501: Not implemented')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/job/TestJob')
self.make_url('job/TestJob'))
self._check_requests(jenkins_mock.call_args_list)
@patch('jenkins.urlopen')
def test_timeout(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.URLError(
reason="timed out")
j = jenkins.Jenkins('http://example.com/', 'test', 'test', timeout=1)
request = jenkins.Request('http://example.com/job/TestJob')
j = jenkins.Jenkins(self.make_url(''), 'test', 'test', timeout=1)
request = jenkins.Request(self.make_url('job/TestJob'))
with self.assertRaises(jenkins.JenkinsException) as context_manager:
j.jenkins_open(request, add_crumb=False)
@ -220,5 +220,5 @@ class JenkinsOpenTest(JenkinsTestBase):
'Error in request: timed out')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/job/TestJob')
self.make_url('job/TestJob'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -43,10 +43,10 @@ class JenkinsGetNodesTest(JenkinsNodesTestBase):
self.j.get_nodes()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/api/json')
self.make_url('computer/api/json'))
self.assertEqual(
str(context_manager.exception),
'Could not parse JSON info for server[http://example.com/]')
'Could not parse JSON info for server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch('jenkins.urlopen')
@ -56,13 +56,13 @@ class JenkinsGetNodesTest(JenkinsNodesTestBase):
self.j.get_nodes()
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(urlopen_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob',
self.make_url('job/TestJob'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -72,10 +72,10 @@ class JenkinsGetNodesTest(JenkinsNodesTestBase):
self.j.get_nodes()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/api/json')
self.make_url('computer/api/json'))
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@ -90,7 +90,7 @@ class JenkinsGetNodeInfoTest(JenkinsNodesTestBase):
self.assertEqual(self.j.get_node_info('test node'), self.node_info)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/test%20node/api/json?depth=0')
self.make_url('computer/test%20node/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -103,7 +103,7 @@ class JenkinsGetNodeInfoTest(JenkinsNodesTestBase):
self.j.get_node_info('test_node')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/test_node/api/json?depth=0')
self.make_url('computer/test_node/api/json?depth=0'))
self.assertEqual(
str(context_manager.exception),
'Could not parse JSON info for node[test_node]')
@ -112,7 +112,7 @@ class JenkinsGetNodeInfoTest(JenkinsNodesTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/TestJob',
self.make_url('job/TestJob'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -122,7 +122,7 @@ class JenkinsGetNodeInfoTest(JenkinsNodesTestBase):
self.j.get_node_info('test_node')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/test_node/api/json?depth=0')
self.make_url('computer/test_node/api/json?depth=0'))
self.assertEqual(
str(context_manager.exception),
'node[test_node] does not exist')
@ -166,7 +166,7 @@ class JenkinsDeleteNodeTest(JenkinsNodesTestBase):
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/computer/test%20node/doDelete')
self.make_url('computer/test%20node/doDelete'))
self.assertFalse(self.j.node_exists('test node'))
self._check_requests(jenkins_mock.call_args_list)
@ -182,7 +182,7 @@ class JenkinsDeleteNodeTest(JenkinsNodesTestBase):
self.j.delete_node('test_node')
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/computer/test_node/doDelete')
self.make_url('computer/test_node/doDelete'))
self.assertEqual(
str(context_manager.exception),
'delete[test_node] failed')
@ -204,7 +204,7 @@ class JenkinsCreateNodeTest(JenkinsNodesTestBase):
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url().split('?')[0],
'http://example.com/computer/doCreateItem')
self.make_url('computer/doCreateItem'))
self.assertTrue(self.j.node_exists('test node'))
self._check_requests(jenkins_mock.call_args_list)
@ -234,7 +234,7 @@ class JenkinsCreateNodeTest(JenkinsNodesTestBase):
self.j.create_node('test_node')
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url().split('?')[0],
'http://example.com/computer/doCreateItem')
self.make_url('computer/doCreateItem'))
self.assertEqual(
str(context_manager.exception),
'create[test_node] failed')
@ -254,8 +254,8 @@ class JenkinsEnableNodeTest(JenkinsNodesTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/test%20node/' +
'toggleOffline?offlineMessage=')
'{0}/computer/test%20node/'
'toggleOffline?offlineMessage='.format(self.base_url))
jenkins_mock.side_effect = [json.dumps(self.online_node_info)]
node_info = self.j.get_node_info('test node')
@ -275,7 +275,7 @@ class JenkinsEnableNodeTest(JenkinsNodesTestBase):
# Last call to jenkins was to check status
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/test_node/api/json?depth=0')
self.make_url('computer/test_node/api/json?depth=0'))
jenkins_mock.side_effect = [json.dumps(self.online_node_info)]
node_info = self.j.get_node_info('test_node')
@ -296,8 +296,8 @@ class JenkinsDisableNodeTest(JenkinsNodesTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/test%20node/' +
'toggleOffline?offlineMessage=')
'{0}/computer/test%20node/'
'toggleOffline?offlineMessage='.format(self.base_url))
jenkins_mock.side_effect = [json.dumps(self.offline_node_info)]
node_info = self.j.get_node_info('test node')
@ -317,7 +317,7 @@ class JenkinsDisableNodeTest(JenkinsNodesTestBase):
# Last call to jenkins was to check status
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
'http://example.com/computer/test_node/api/json?depth=0')
self.make_url('computer/test_node/api/json?depth=0'))
jenkins_mock.side_effect = [json.dumps(self.offline_node_info)]
node_info = self.j.get_node_info('test_node')

View File

@ -33,7 +33,7 @@
import json
from mock import patch
from testscenarios.testcase import TestWithScenarios
from testscenarios.scenarios import multiply_scenarios
import jenkins
from jenkins import plugins
@ -84,7 +84,7 @@ class JenkinsPluginsInfoTest(JenkinsPluginsBase):
self.assertEqual(plugins_info, self.plugin_info_json['plugins'])
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/pluginManager/api/json?depth=2')
self.make_url('pluginManager/api/json?depth=2'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -104,7 +104,7 @@ class JenkinsPluginsInfoTest(JenkinsPluginsBase):
self.j.get_plugins_info(depth=1)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/pluginManager/api/json?depth=1')
self.make_url('pluginManager/api/json?depth=1'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -115,10 +115,10 @@ class JenkinsPluginsInfoTest(JenkinsPluginsBase):
self.j.get_plugins_info()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/pluginManager/api/json?depth=2')
self.make_url('pluginManager/api/json?depth=2'))
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -129,16 +129,16 @@ class JenkinsPluginsInfoTest(JenkinsPluginsBase):
self.j.get_plugins_info()
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/pluginManager/api/json?depth=2')
self.make_url('pluginManager/api/json?depth=2'))
self.assertEqual(
str(context_manager.exception),
'Could not parse JSON info for server[http://example.com/]')
'Could not parse JSON info for server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/pluginManager/api/json?depth=2',
self.make_url('job/pluginManager/api/json?depth=2'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -148,7 +148,7 @@ class JenkinsPluginsInfoTest(JenkinsPluginsBase):
self.j.get_plugins_info(depth=52)
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@ -179,7 +179,7 @@ class JenkinsPluginInfoTest(JenkinsPluginsBase):
json.dumps(self.plugin_info_json),
json.dumps(self.updated_plugin_info_json)
]
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.make_url(''), 'test', 'test')
plugins_info = j.get_plugins()
self.assertEqual(plugins_info["mailer"]["version"],
@ -210,7 +210,7 @@ class JenkinsPluginInfoTest(JenkinsPluginsBase):
self.j.get_plugin_info('test', depth=1)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/pluginManager/api/json?depth=1')
self.make_url('pluginManager/api/json?depth=1'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -221,10 +221,10 @@ class JenkinsPluginInfoTest(JenkinsPluginsBase):
self.j.get_plugin_info('test')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/pluginManager/api/json?depth=2')
self.make_url('pluginManager/api/json?depth=2'))
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -235,16 +235,16 @@ class JenkinsPluginInfoTest(JenkinsPluginsBase):
self.j.get_plugin_info('test')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/pluginManager/api/json?depth=2')
self.make_url('pluginManager/api/json?depth=2'))
self.assertEqual(
str(context_manager.exception),
'Could not parse JSON info for server[http://example.com/]')
'Could not parse JSON info for server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_raise_HTTPError(self, jenkins_mock):
jenkins_mock.side_effect = jenkins.HTTPError(
'http://example.com/job/pluginManager/api/json?depth=2',
self.make_url('job/pluginManager/api/json?depth=2'),
code=401,
msg="basic auth failed",
hdrs=[],
@ -254,26 +254,29 @@ class JenkinsPluginInfoTest(JenkinsPluginsBase):
self.j.get_plugin_info(u'TestPlugin', depth=52)
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(jenkins_mock.call_args_list)
class PluginsTestScenarios(TestWithScenarios, JenkinsPluginsBase):
scenarios = [
('s1', dict(v1='1.0.0', op='__gt__', v2='0.8.0')),
('s2', dict(v1='1.0.1alpha', op='__gt__', v2='1.0.0')),
('s3', dict(v1='1.0', op='__eq__', v2='1.0.0')),
('s4', dict(v1='1.0', op='__eq__', v2='1.0')),
('s5', dict(v1='1.0', op='__lt__', v2='1.8.0')),
('s6', dict(v1='1.0.1alpha', op='__lt__', v2='1.0.1')),
('s7', dict(v1='1.0alpha', op='__lt__', v2='1.0.0')),
('s8', dict(v1='1.0-alpha', op='__lt__', v2='1.0.0')),
('s9', dict(v1='1.1-alpha', op='__gt__', v2='1.0')),
('s10', dict(v1='1.0-SNAPSHOT', op='__lt__', v2='1.0')),
('s11', dict(v1='1.0.preview', op='__lt__', v2='1.0')),
('s12', dict(v1='1.1-SNAPSHOT', op='__gt__', v2='1.0')),
('s13', dict(v1='1.0a-SNAPSHOT', op='__lt__', v2='1.0a')),
]
class PluginsTestScenarios(JenkinsPluginsBase):
scenarios = multiply_scenarios(
JenkinsPluginsBase.scenarios,
[
('s1', dict(v1='1.0.0', op='__gt__', v2='0.8.0')),
('s2', dict(v1='1.0.1alpha', op='__gt__', v2='1.0.0')),
('s3', dict(v1='1.0', op='__eq__', v2='1.0.0')),
('s4', dict(v1='1.0', op='__eq__', v2='1.0')),
('s5', dict(v1='1.0', op='__lt__', v2='1.8.0')),
('s6', dict(v1='1.0.1alpha', op='__lt__', v2='1.0.1')),
('s7', dict(v1='1.0alpha', op='__lt__', v2='1.0.0')),
('s8', dict(v1='1.0-alpha', op='__lt__', v2='1.0.0')),
('s9', dict(v1='1.1-alpha', op='__gt__', v2='1.0')),
('s10', dict(v1='1.0-SNAPSHOT', op='__lt__', v2='1.0')),
('s11', dict(v1='1.0.preview', op='__lt__', v2='1.0')),
('s12', dict(v1='1.1-SNAPSHOT', op='__gt__', v2='1.0')),
('s13', dict(v1='1.0a-SNAPSHOT', op='__lt__', v2='1.0a')),
])
def setUp(self):
super(PluginsTestScenarios, self).setUp()
@ -293,7 +296,7 @@ class PluginsTestScenarios(TestWithScenarios, JenkinsPluginsBase):
equality operator defined for the scenario.
"""
plugin_name = "Jenkins Mailer Plugin"
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.base_url, 'test', 'test')
plugin_info = j.get_plugins()[plugin_name]
v1 = plugin_info.get("version")
@ -311,7 +314,7 @@ class PluginsTestScenarios(TestWithScenarios, JenkinsPluginsBase):
type of PluginVersion before comparing provides the same result.
"""
plugin_name = "Jenkins Mailer Plugin"
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.base_url, 'test', 'test')
plugin_info = j.get_plugins()[plugin_name]
v1 = plugin_info.get("version")

View File

@ -16,7 +16,7 @@ class JenkinsCancelQueueTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/queue/cancelItem?id=52')
self.make_url('queue/cancelItem?id=52'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open',
@ -29,7 +29,7 @@ class JenkinsCancelQueueTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/queue/cancelItem?id=52')
self.make_url('queue/cancelItem?id=52'))
self._check_requests(jenkins_mock.call_args_list)
@ -68,5 +68,5 @@ class JenkinsQueueInfoTest(JenkinsTestBase):
self.assertEqual(queue_info, queue_info_to_return['items'])
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/queue/api/json?depth=0')
self.make_url('queue/api/json?depth=0'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -17,10 +17,10 @@ class JenkinsQuietDownTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
u'http://example.com/quietDown')
self.make_url('quietDown'))
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -35,10 +35,10 @@ class JenkinsQuietDownTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
u'http://example.com/quietDown')
self.make_url('quietDown'))
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self.assertEqual(
str(context_manager.exception),
'quiet down failed')
@ -55,5 +55,5 @@ class JenkinsQuietDownTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/quietDown')
self.make_url('quietDown'))
self._check_requests(jenkins_mock.call_args_list)

View File

@ -12,18 +12,18 @@ class JenkinsScriptTest(JenkinsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/scriptText')
self.make_url('scriptText'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_install_plugin(self, jenkins_mock):
'''Installation of plugins is done with the run_script method
'''
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.make_url(''), 'test', 'test')
j.install_plugin("jabber")
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/scriptText')
self.make_url('scriptText'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -31,7 +31,7 @@ class JenkinsScriptTest(JenkinsTestBase):
def test_install_plugin_with_dependencies(self, run_script_mock, jenkins_mock):
'''Verify install plugins with dependencies
'''
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.make_url(''), 'test', 'test')
j.install_plugin("jabber")
self.assertEqual(len(run_script_mock.call_args_list), 2)
self.assertEqual(run_script_mock.call_args_list[0][0][0],
@ -47,7 +47,7 @@ class JenkinsScriptTest(JenkinsTestBase):
def test_install_plugin_without_dependencies(self, run_script_mock, jenkins_mock):
'''Verify install plugins without dependencies
'''
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.make_url(''), 'test', 'test')
j.install_plugin("jabber", include_dependencies=False)
self.assertEqual(len(run_script_mock.call_args_list), 2)
self.assertEqual(run_script_mock.call_args_list[0][0][0],
@ -63,7 +63,7 @@ class JenkinsScriptTest(JenkinsTestBase):
'''Verify install plugin does not need a restart
'''
run_script_mock.return_value = u'Result: false\n'
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.make_url(''), 'test', 'test')
self.assertFalse(j.install_plugin("jabber"))
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -72,5 +72,5 @@ class JenkinsScriptTest(JenkinsTestBase):
'''Verify install plugin needs a restart
'''
run_script_mock.return_value = u'Result: true\n'
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
j = jenkins.Jenkins(self.make_url(''), 'test', 'test')
self.assertTrue(j.install_plugin("jabber"))

View File

@ -24,7 +24,7 @@ class JenkinsVersionTest(JenkinsTestBase):
@patch('jenkins.urlopen')
def test_raise_HTTPError(self, urlopen_mock):
urlopen_mock.side_effect = jenkins.HTTPError(
'http://example.com/',
self.make_url(''),
code=503,
msg="internal server error",
hdrs=[],
@ -33,7 +33,7 @@ class JenkinsVersionTest(JenkinsTestBase):
self.j.get_version()
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(urlopen_mock.call_args_list)
@patch('jenkins.urlopen')
@ -43,7 +43,7 @@ class JenkinsVersionTest(JenkinsTestBase):
self.j.get_version()
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
'Error communicating with server[{0}/]'.format(self.base_url))
self._check_requests(urlopen_mock.call_args_list)
@patch('jenkins.urlopen', return_value=None)
@ -52,6 +52,6 @@ class JenkinsVersionTest(JenkinsTestBase):
self.j.get_version()
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]:'
' empty response')
'Error communicating with server[{0}/]:'
' empty response'.format(self.base_url))
self._check_requests(urlopen_mock.call_args_list)

View File

@ -25,7 +25,7 @@ class JenkinsGetViewNameTest(JenkinsViewsTestBase):
self.assertEqual(view_name, 'Test View')
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/view/Test%20View/api/json?tree=name')
self.make_url('view/Test%20View/api/json?tree=name'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -37,7 +37,7 @@ class JenkinsGetViewNameTest(JenkinsViewsTestBase):
self.assertEqual(view_name, None)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/view/TestView/api/json?tree=name')
self.make_url('view/TestView/api/json?tree=name'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -49,7 +49,7 @@ class JenkinsGetViewNameTest(JenkinsViewsTestBase):
self.j.get_view_name(u'TestView')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/view/TestView/api/json?tree=name')
self.make_url('view/TestView/api/json?tree=name'))
self.assertEqual(
str(context_manager.exception),
'Jenkins returned an unexpected view name {0} '
@ -95,7 +95,7 @@ class JenkinsGetViewsTest(JenkinsViewsTestBase):
self.assertEqual(view_info, views)
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/api/json')
self.make_url('api/json'))
self._check_requests(jenkins_mock.call_args_list)
@ -112,7 +112,7 @@ class JenkinsDeleteViewTest(JenkinsViewsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/view/Test%20View/doDelete')
self.make_url('view/Test%20View/doDelete'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -127,7 +127,7 @@ class JenkinsDeleteViewTest(JenkinsViewsTestBase):
self.j.delete_view(u'TestView')
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/view/TestView/doDelete')
self.make_url('view/TestView/doDelete'))
self.assertEqual(
str(context_manager.exception),
'delete[TestView] failed')
@ -148,7 +148,7 @@ class JenkinsCreateViewTest(JenkinsViewsTestBase):
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/createView?name=Test%20View')
self.make_url('createView?name=Test%20View'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
@ -162,7 +162,7 @@ class JenkinsCreateViewTest(JenkinsViewsTestBase):
self.j.create_view(u'TestView', self.config_xml)
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/view/TestView/api/json?tree=name')
self.make_url('view/TestView/api/json?tree=name'))
self.assertEqual(
str(context_manager.exception),
'view[TestView] already exists')
@ -180,10 +180,10 @@ class JenkinsCreateViewTest(JenkinsViewsTestBase):
self.j.create_view(u'TestView', self.config_xml)
self.assertEqual(
jenkins_mock.call_args_list[0][0][0].get_full_url(),
'http://example.com/view/TestView/api/json?tree=name')
self.make_url('view/TestView/api/json?tree=name'))
self.assertEqual(
jenkins_mock.call_args_list[1][0][0].get_full_url(),
'http://example.com/createView?name=TestView')
self.make_url('createView?name=TestView'))
self.assertEqual(
str(context_manager.exception),
'create[TestView] failed')
@ -202,7 +202,7 @@ class JenkinsReconfigViewTest(JenkinsViewsTestBase):
self.j.reconfig_view(u'Test View', self.config_xml)
self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/view/Test%20View/config.xml')
self.make_url('view/Test%20View/config.xml'))
self._check_requests(jenkins_mock.call_args_list)
@ -214,5 +214,5 @@ class JenkinsGetViewConfigTest(JenkinsViewsTestBase):
self.assertEqual(
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/view/Test%20View/config.xml')
self.make_url('view/Test%20View/config.xml'))
self._check_requests(jenkins_mock.call_args_list)