From 6bc3a0f194fe7aab361dc10a6f37f4d47812d477 Mon Sep 17 00:00:00 2001 From: Hugh Brown Date: Thu, 10 Oct 2013 23:35:33 -0400 Subject: [PATCH] pylint fixes for jenkinsapi_tests/ --- .../systests/test_jenkins_artifacts.py | 5 +- .../unittests/test_build_scm_git.py | 129 ++++--- jenkinsapi_tests/unittests/test_jenkins.py | 216 ++++++------ jenkinsapi_tests/unittests/test_job.py | 65 ++-- .../unittests/test_job_get_all_builds.py | 157 +++++---- jenkinsapi_tests/unittests/test_nodes.py | 314 ++++++++++-------- jenkinsapi_tests/unittests/test_plugins.py | 101 ++++-- jenkinsapi_tests/unittests/test_queue.py | 147 +++++--- jenkinsapi_tests/unittests/test_requester.py | 124 ++++--- jenkinsapi_tests/unittests/test_view.py | 69 ++-- jenkinsapi_tests/unittests/test_views.py | 18 +- 11 files changed, 770 insertions(+), 575 deletions(-) diff --git a/jenkinsapi_tests/systests/test_jenkins_artifacts.py b/jenkinsapi_tests/systests/test_jenkins_artifacts.py index 2e5e680..693f4f1 100644 --- a/jenkinsapi_tests/systests/test_jenkins_artifacts.py +++ b/jenkinsapi_tests/systests/test_jenkins_artifacts.py @@ -44,10 +44,7 @@ class TestPingerJob(BaseSystemTest): # Verify that we can hande binary artifacts binary_artifact.save_to_dir(tempDir) - readBackText = gzip.open(os.path.join( - tempDir, - binary_artifact.filename, - ), 'rb').read().strip() + readBackText = gzip.open(os.path.join(tempDir, binary_artifact.filename,), 'rb').read().strip() self.assertTrue(re.match(r'^PING \S+ \(127.0.0.1\)', readBackText)) self.assertTrue(readBackText.endswith('ms')) finally: diff --git a/jenkinsapi_tests/unittests/test_build_scm_git.py b/jenkinsapi_tests/unittests/test_build_scm_git.py index b7e108d..7a339fe 100644 --- a/jenkinsapi_tests/unittests/test_build_scm_git.py +++ b/jenkinsapi_tests/unittests/test_build_scm_git.py @@ -5,55 +5,86 @@ from jenkinsapi.build import Build class test_build(unittest.TestCase): - DATA = {'actions': [{'causes': [{'shortDescription': 'Started by an SCM change'}]}, - {}, - {'buildsByBranchName': {'origin/HEAD': {'buildNumber': 2, - 'buildResult': None, - 'revision': {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', - 'branch': [{'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', - 'name': 'origin/HEAD'}, - {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', - 'name': 'origin/master'}]}}, - 'origin/master': {'buildNumber': 2, - 'buildResult': None, - 'revision': {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', - 'branch': [{'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', - 'name': 'origin/HEAD'}, - {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', - 'name': 'origin/master'}]}}, - 'origin/python_3_compatibility': {'buildNumber': 1, - 'buildResult': None, - 'revision': {'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', - 'branch': [{'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', - 'name': 'origin/python_3_compatibility'}]}}, - 'origin/unstable': {'buildNumber': 3, - 'buildResult': None, - 'revision': {'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', - 'branch': [{'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', - 'name': 'origin/unstable'}]}}}, - 'lastBuiltRevision': {'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', - 'branch': [{'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', - 'name': 'origin/unstable'}]}, - 'remoteUrls': ['https://github.com/salimfadhley/jenkinsapi.git'], - 'scmName': ''}, - {}, - {}], - 'artifacts': [], - 'building': False, - 'builtOn': '', - 'changeSet': {'items': [], 'kind': 'git'}, - 'culprits': [], - 'description': None, - 'duration': 1051, - 'estimatedDuration': 2260, - 'executor': None, - 'fullDisplayName': 'git_yssrtigfds #3', - 'id': '2013-06-30_01-54-35', - 'keepLog': False, - 'number': 3, - 'result': 'SUCCESS', - 'timestamp': 1372553675652, - 'url': 'http://localhost:8080/job/git_yssrtigfds/3/'} + DATA = { + 'actions': [ + { + 'causes': [{'shortDescription': 'Started by an SCM change'}] + }, + {}, + { + 'buildsByBranchName': { + 'origin/HEAD': { + 'buildNumber': 2, + 'buildResult': None, + 'revision': { + 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', + 'branch': [ + {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/HEAD'}, + {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/master'} + ] + } + }, + 'origin/master': { + 'buildNumber': 2, + 'buildResult': None, + 'revision': { + 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', + 'branch': [ + {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/HEAD'}, + {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/master'} + ] + } + }, + 'origin/python_3_compatibility': { + 'buildNumber': 1, + 'buildResult': None, + 'revision': { + 'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', + 'branch': [ + {'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', 'name': 'origin/python_3_compatibility'} + ] + } + }, + 'origin/unstable': { + 'buildNumber': 3, + 'buildResult': None, + 'revision': { + 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', + 'branch': [ + {'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'name': 'origin/unstable'} + ] + } + } + }, + 'lastBuiltRevision': { + 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', + 'branch': [ + {'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'name': 'origin/unstable'} + ] + }, + 'remoteUrls': ['https://github.com/salimfadhley/jenkinsapi.git'], + 'scmName': '' + }, + {}, + {} + ], + 'artifacts': [], + 'building': False, + 'builtOn': '', + 'changeSet': {'items': [], 'kind': 'git'}, + 'culprits': [], + 'description': None, + 'duration': 1051, + 'estimatedDuration': 2260, + 'executor': None, + 'fullDisplayName': 'git_yssrtigfds #3', + 'id': '2013-06-30_01-54-35', + 'keepLog': False, + 'number': 3, + 'result': 'SUCCESS', + 'timestamp': 1372553675652, + 'url': 'http://localhost:8080/job/git_yssrtigfds/3/' + } @mock.patch.object(Build, '_poll') def setUp(self, _poll): diff --git a/jenkinsapi_tests/unittests/test_jenkins.py b/jenkinsapi_tests/unittests/test_jenkins.py index 3282182..6bf70bb 100644 --- a/jenkinsapi_tests/unittests/test_jenkins.py +++ b/jenkinsapi_tests/unittests/test_jenkins.py @@ -80,94 +80,86 @@ class TestJenkins(unittest.TestCase): @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Job, '_poll') def test_get_jobs(self, _base_poll, _poll, _job_poll): - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + ] + } _base_poll.return_value = _poll.return_value _job_poll.return_value = {} J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword') for idx, (job_name, job) in enumerate(J.get_jobs()): - self.assertEquals( - job_name, _poll.return_value['jobs'][idx]['name']) + self.assertEquals(job_name, _poll.return_value['jobs'][idx]['name']) self.assertTrue(isinstance(job, Job)) - self.assertEquals( - job.name, _poll.return_value['jobs'][idx]['name']) - self.assertEquals( - job.baseurl, _poll.return_value['jobs'][idx]['url']) + self.assertEquals(job.name, _poll.return_value['jobs'][idx]['name']) + self.assertEquals(job.baseurl, _poll.return_value['jobs'][idx]['url']) @mock.patch.object(JenkinsBase, '_poll') @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Job, '_poll') def test_get_jobs_info(self, _base_poll, _poll, _job_poll): - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + ] + } _base_poll.return_value = _poll.return_value _job_poll.return_value = {} J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword') for idx, (url, job_name) in enumerate(J.get_jobs_info()): - self.assertEquals( - job_name, _poll.return_value['jobs'][idx]['name']) - self.assertEquals( - url, _poll.return_value['jobs'][idx]['url']) + self.assertEquals(job_name, _poll.return_value['jobs'][idx]['name']) + self.assertEquals(url, _poll.return_value['jobs'][idx]['url']) @mock.patch.object(JenkinsBase, '_poll') @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Job, '_poll') def test_get_jobs_list(self, _base_poll, _poll, _job_poll): - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + ] + } _base_poll.return_value = _poll.return_value _job_poll.return_value = {} J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword') for idx, job_name in enumerate(J.get_jobs_list()): - self.assertEquals( - job_name, _poll.return_value['jobs'][idx]['name']) + self.assertEquals(job_name, _poll.return_value['jobs'][idx]['name']) @mock.patch.object(JenkinsBase, '_poll') @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Job, '_poll') def test_get_job(self, _base_poll, _poll, _job_poll): - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + ] + } _base_poll.return_value = _poll.return_value _job_poll.return_value = {} J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword') job = J.get_job('job_one') self.assertTrue(isinstance(job, Job)) - self.assertEquals( - job.name, _poll.return_value['jobs'][0]['name']) - self.assertEquals( - job.baseurl, _poll.return_value['jobs'][0]['url']) + self.assertEquals(job.name, _poll.return_value['jobs'][0]['name']) + self.assertEquals(job.baseurl, _poll.return_value['jobs'][0]['url']) @mock.patch.object(JenkinsBase, '_poll') @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Job, '_poll') def test_has_job(self, _base_poll, _poll, _job_poll): - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + ] + } _base_poll.return_value = _poll.return_value _job_poll.return_value = {} J = Jenkins('http://localhost:8080/', @@ -179,12 +171,12 @@ class TestJenkins(unittest.TestCase): @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Job, '_poll') def test_has_no_job(self, _base_poll, _poll, _job_poll): - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + ] + } _base_poll.return_value = _poll.return_value _job_poll.return_value = {} J = Jenkins('http://localhost:8080/', @@ -196,12 +188,12 @@ class TestJenkins(unittest.TestCase): @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Job, '_poll') def test_create_dup_job(self, _base_poll, _poll, _job_poll): - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + ] + } _base_poll.return_value = _poll.return_value _job_poll.return_value = {} J = Jenkins('http://localhost:8080/', @@ -219,23 +211,22 @@ class TestJenkins(unittest.TestCase): # Define what we will return create_job_returns = [ - # This will be returned when job is not yet created - {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - ]}, - # This to simulate that the job has been created - {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_two', - 'url': 'http://localhost:8080/job_two'}, - {'name': 'job_new', - 'url': 'http://localhost:8080/job_new'}, - ]} - ] + # This will be returned when job is not yet created + { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8081/job_one'}, + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + ] + }, + # This to simulate that the job has been created + { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_two', 'url': 'http://localhost:8080/job_two'}, + {'name': 'job_new', 'url': 'http://localhost:8080/job_new'}, + ] + } + ] # Mock function def second_call_poll(): @@ -248,8 +239,7 @@ class TestJenkins(unittest.TestCase): _job_poll.return_value = {} mock_requester = Requester(username='foouser', password='foopassword') - mock_requester.post_xml_and_confirm_status = mock.MagicMock( - return_value='') + mock_requester.post_xml_and_confirm_status = mock.MagicMock(return_value='') J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword', @@ -265,17 +255,16 @@ class TestJenkins(unittest.TestCase): @mock.patch.object(Job, '_poll') def test_create_new_job_fail(self, _base_poll, _poll, _job_poll): _job_poll.return_value = {} - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + ] + } _base_poll.return_value = _poll.return_value mock_requester = Requester(username='foouser', password='foopassword') - mock_requester.post_xml_and_confirm_status = mock.MagicMock( - return_value='') + mock_requester.post_xml_and_confirm_status = mock.MagicMock(return_value='') J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword', @@ -291,17 +280,16 @@ class TestJenkins(unittest.TestCase): @mock.patch.object(Job, '_poll') def test_get_jenkins_obj_from_url(self, _base_poll, _poll, _job_poll): _job_poll.return_value = {} - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + ] + } _base_poll.return_value = _poll.return_value mock_requester = Requester(username='foouser', password='foopassword') - mock_requester.post_xml_and_confirm_status = mock.MagicMock( - return_value='') + mock_requester.post_xml_and_confirm_status = mock.MagicMock(return_value='') J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword', @@ -318,17 +306,16 @@ class TestJenkins(unittest.TestCase): @mock.patch.object(Job, '_poll') def test_get_jenkins_obj(self, _base_poll, _poll, _job_poll): _job_poll.return_value = {} - _poll.return_value = {'jobs': [ - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - {'name': 'job_one', - 'url': 'http://localhost:8080/job_one'}, - ]} + _poll.return_value = { + 'jobs': [ + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + {'name': 'job_one', 'url': 'http://localhost:8080/job_one'}, + ] + } _base_poll.return_value = _poll.return_value mock_requester = Requester(username='foouser', password='foopassword') - mock_requester.post_xml_and_confirm_status = mock.MagicMock( - return_value='') + mock_requester.post_xml_and_confirm_status = mock.MagicMock(return_value='') J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword', @@ -345,29 +332,32 @@ class TestJenkinsURLs(unittest.TestCase): _poll.return_value = {} J = Jenkins('http://localhost:8080', username='foouser', password='foopassword') - self.assertEquals( - J.get_create_url(), 'http://localhost:8080/createItem') + self.assertEquals(J.get_create_url(), 'http://localhost:8080/createItem') @mock.patch.object(Jenkins, '_poll') def testWithSlash(self, _poll): _poll.return_value = {} J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword') - self.assertEquals( - J.get_create_url(), 'http://localhost:8080/createItem') + self.assertEquals(J.get_create_url(), 'http://localhost:8080/createItem') @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Plugins, '_poll') def test_has_plugin(self, _p_poll, _poll): _poll.return_value = {} - _p_poll.return_value = {'plugins': [ - {'deleted': False, 'hasUpdate': True, 'downgradable': False, - 'dependencies': [{}, {}, {}, {}], - 'longName': 'Jenkins Subversion Plug-in', 'active': True, - 'shortName': 'subversion', 'backupVersion': None, - 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', - 'enabled': True, 'pinned': False, 'version': '1.45', - 'supportsDynamicLoad': 'MAYBE', 'bundled': True}]} + _p_poll.return_value = { + 'plugins': [ + { + 'deleted': False, 'hasUpdate': True, 'downgradable': False, + 'dependencies': [{}, {}, {}, {}], + 'longName': 'Jenkins Subversion Plug-in', 'active': True, + 'shortName': 'subversion', 'backupVersion': None, + 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', + 'enabled': True, 'pinned': False, 'version': '1.45', + 'supportsDynamicLoad': 'MAYBE', 'bundled': True + } + ] + } J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword') diff --git a/jenkinsapi_tests/unittests/test_job.py b/jenkinsapi_tests/unittests/test_job.py index da8cec0..5b9ca87 100644 --- a/jenkinsapi_tests/unittests/test_job.py +++ b/jenkinsapi_tests/unittests/test_job.py @@ -8,36 +8,41 @@ from jenkinsapi.custom_exceptions import NoBuildData class TestJob(unittest.TestCase): - JOB_DATA = {"actions": [], - "description": "test job", - "displayName": "foo", - "displayNameOrNull": None, - "name": "foo", - "url": "http://halob:8080/job/foo/", - "buildable": True, - "builds": [{"number": 3, "url": "http://halob:8080/job/foo/3/"}, - {"number": 2, "url": "http://halob:8080/job/foo/2/"}, - {"number": 1, "url": "http://halob:8080/job/foo/1/"}], - "color": "blue", - "firstBuild": {"number": 1, "url": "http://halob:8080/job/foo/1/"}, - "healthReport": [{"description": "Build stability: No recent builds failed.", - "iconUrl": "health-80plus.png", "score": 100}], - "inQueue": False, - "keepDependencies": False, - "lastBuild": {"number": 4, "url": "http://halob:8080/job/foo/4/"}, # build running - "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastFailedBuild": None, - "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastUnstableBuild": None, - "lastUnsuccessfulBuild": None, - "nextBuildNumber": 4, - "property": [], - "queueItem": None, - "concurrentBuild": False, - "downstreamProjects": [], - "scm": {}, - "upstreamProjects": []} + JOB_DATA = { + "actions": [], + "description": "test job", + "displayName": "foo", + "displayNameOrNull": None, + "name": "foo", + "url": "http://halob:8080/job/foo/", + "buildable": True, + "builds": [ + {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + {"number": 2, "url": "http://halob:8080/job/foo/2/"}, + {"number": 1, "url": "http://halob:8080/job/foo/1/"} + ], + "color": "blue", + "firstBuild": {"number": 1, "url": "http://halob:8080/job/foo/1/"}, + "healthReport": [ + {"description": "Build stability: No recent builds failed.", "iconUrl": "health-80plus.png", "score": 100} + ], + "inQueue": False, + "keepDependencies": False, + "lastBuild": {"number": 4, "url": "http://halob:8080/job/foo/4/"}, # build running + "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastFailedBuild": None, + "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastUnstableBuild": None, + "lastUnsuccessfulBuild": None, + "nextBuildNumber": 4, + "property": [], + "queueItem": None, + "concurrentBuild": False, + "downstreamProjects": [], + "scm": {}, + "upstreamProjects": [] + } URL_DATA = {'http://halob:8080/job/foo/%s' % config.JENKINS_API: JOB_DATA} diff --git a/jenkinsapi_tests/unittests/test_job_get_all_builds.py b/jenkinsapi_tests/unittests/test_job_get_all_builds.py index 68c2bab..bae7503 100644 --- a/jenkinsapi_tests/unittests/test_job_get_all_builds.py +++ b/jenkinsapi_tests/unittests/test_job_get_all_builds.py @@ -4,48 +4,53 @@ import unittest from jenkinsapi import config from jenkinsapi.job import Job from jenkinsapi.jenkinsbase import JenkinsBase -from jenkinsapi.custom_exceptions import NoBuildData class TestJobGetAllBuilds(unittest.TestCase): # this job has builds - JOB1_DATA = {"actions": [], - "description": "test job", - "displayName": "foo", - "displayNameOrNull": None, - "name": "foo", - "url": "http://halob:8080/job/foo/", - "buildable": True, - # do as if build 1 & 2 are not returned by jenkins - "builds": [{"number": 3, "url": "http://halob:8080/job/foo/3/"}], - "color": "blue", - "firstBuild": {"number": 1, "url": "http://halob:8080/job/foo/1/"}, - "healthReport": [{"description": "Build stability: No recent builds failed.", - "iconUrl": "health-80plus.png", "score": 100}], - "inQueue": False, - "keepDependencies": False, - "lastBuild": {"number": 4, "url": "http://halob:8080/job/foo/4/"}, # build running - "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastFailedBuild": None, - "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastUnstableBuild": None, - "lastUnsuccessfulBuild": None, - "nextBuildNumber": 4, - "property": [], - "queueItem": None, - "concurrentBuild": False, - "downstreamProjects": [], - "scm": {}, - "upstreamProjects": []} - JOB1_ALL_BUILDS_DATA = {"allBuilds": [ - {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - {"number": 2, "url": "http://halob:8080/job/foo/2/"}, - {"number": 1, "url": "http://halob:8080/job/foo/1/"}], + JOB1_DATA = { + "actions": [], + "description": "test job", + "displayName": "foo", + "displayNameOrNull": None, + "name": "foo", + "url": "http://halob:8080/job/foo/", + "buildable": True, + # do as if build 1 & 2 are not returned by jenkins + "builds": [{"number": 3, "url": "http://halob:8080/job/foo/3/"}], + "color": "blue", + "firstBuild": {"number": 1, "url": "http://halob:8080/job/foo/1/"}, + "healthReport": [ + {"description": "Build stability: No recent builds failed.", "iconUrl": "health-80plus.png", "score": 100} + ], + "inQueue": False, + "keepDependencies": False, + "lastBuild": {"number": 4, "url": "http://halob:8080/job/foo/4/"}, # build running + "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastFailedBuild": None, + "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastUnstableBuild": None, + "lastUnsuccessfulBuild": None, + "nextBuildNumber": 4, + "property": [], + "queueItem": None, + "concurrentBuild": False, + "downstreamProjects": [], + "scm": {}, + "upstreamProjects": [] + } + JOB1_ALL_BUILDS_DATA = { + "allBuilds": [ + {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + {"number": 2, "url": "http://halob:8080/job/foo/2/"}, + {"number": 1, "url": "http://halob:8080/job/foo/1/"} + ], } JOB1_API_URL = 'http://halob:8080/job/foo/%s' % config.JENKINS_API - JOB2_DATA = {'actions': [], + JOB2_DATA = { + 'actions': [], 'buildable': True, 'builds': [], 'color': 'notbuilt', @@ -71,41 +76,47 @@ class TestJobGetAllBuilds(unittest.TestCase): 'queueItem': None, 'scm': {}, 'upstreamProjects': [], - 'url': 'http://halob:8080/job/look_ma_no_builds/'} + 'url': 'http://halob:8080/job/look_ma_no_builds/' + } JOB2_API_URL = 'http://halob:8080/job/look_ma_no_builds/%s' % config.JENKINS_API # Full list available immediatly - JOB3_DATA = {"actions": [], - "description": "test job", - "displayName": "fullfoo", - "displayNameOrNull": None, - "name": "fullfoo", - "url": "http://halob:8080/job/fullfoo/", - "buildable": True, - # all builds have been returned by Jenkins - "builds": [{"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, - {"number": 2, "url": "http://halob:8080/job/fullfoo/2/"}, - {"number": 1, "url": "http://halob:8080/job/fullfoo/1/"}], - "color": "blue", - "firstBuild": {"number": 1, "url": "http://halob:8080/job/fullfoo/1/"}, - "healthReport": [{"description": "Build stability: No recent builds failed.", - "iconUrl": "health-80plus.png", "score": 100}], - "inQueue": False, - "keepDependencies": False, - "lastBuild": {"number": 4, "url": "http://halob:8080/job/fullfoo/4/"}, # build running - "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, - "lastFailedBuild": None, - "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, - "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, - "lastUnstableBuild": None, - "lastUnsuccessfulBuild": None, - "nextBuildNumber": 4, - "property": [], - "queueItem": None, - "concurrentBuild": False, - "downstreamProjects": [], - "scm": {}, - "upstreamProjects": []} + JOB3_DATA = { + "actions": [], + "description": "test job", + "displayName": "fullfoo", + "displayNameOrNull": None, + "name": "fullfoo", + "url": "http://halob:8080/job/fullfoo/", + "buildable": True, + # all builds have been returned by Jenkins + "builds": [ + {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, + {"number": 2, "url": "http://halob:8080/job/fullfoo/2/"}, + {"number": 1, "url": "http://halob:8080/job/fullfoo/1/"} + ], + "color": "blue", + "firstBuild": {"number": 1, "url": "http://halob:8080/job/fullfoo/1/"}, + "healthReport": [ + {"description": "Build stability: No recent builds failed.", "iconUrl": "health-80plus.png", "score": 100} + ], + "inQueue": False, + "keepDependencies": False, + "lastBuild": {"number": 4, "url": "http://halob:8080/job/fullfoo/4/"}, # build running + "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, + "lastFailedBuild": None, + "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, + "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, + "lastUnstableBuild": None, + "lastUnsuccessfulBuild": None, + "nextBuildNumber": 4, + "property": [], + "queueItem": None, + "concurrentBuild": False, + "downstreamProjects": [], + "scm": {}, + "upstreamProjects": [] + } JOB3_ALL_BUILDS_DATA = {"allBuilds": [ {"number": 3, "url": "http://halob:8080/job/fullfoo/3/"}, {"number": 2, "url": "http://halob:8080/job/fullfoo/2/"}, @@ -114,12 +125,12 @@ class TestJobGetAllBuilds(unittest.TestCase): JOB3_API_URL = 'http://halob:8080/job/fullfoo/%s' % config.JENKINS_API URL_DATA = { - JOB1_API_URL: JOB1_DATA, - (JOB1_API_URL, str({'tree': 'allBuilds[number,url]'})): JOB1_ALL_BUILDS_DATA, - JOB2_API_URL: JOB2_DATA, - JOB3_API_URL: JOB3_DATA, - # this one below should never be used - (JOB3_API_URL, str({'tree': 'allBuilds[number,url]'})): JOB3_ALL_BUILDS_DATA, + JOB1_API_URL: JOB1_DATA, + (JOB1_API_URL, str({'tree': 'allBuilds[number,url]'})): JOB1_ALL_BUILDS_DATA, + JOB2_API_URL: JOB2_DATA, + JOB3_API_URL: JOB3_DATA, + # this one below should never be used + (JOB3_API_URL, str({'tree': 'allBuilds[number,url]'})): JOB3_ALL_BUILDS_DATA, } def fakeGetData(self, url, params=None): diff --git a/jenkinsapi_tests/unittests/test_nodes.py b/jenkinsapi_tests/unittests/test_nodes.py index 9e4eae2..7a13df5 100644 --- a/jenkinsapi_tests/unittests/test_nodes.py +++ b/jenkinsapi_tests/unittests/test_nodes.py @@ -1,6 +1,5 @@ import mock import unittest -import datetime from jenkinsapi.jenkins import Jenkins from jenkinsapi.nodes import Nodes @@ -9,143 +8,188 @@ from jenkinsapi.node import Node class TestNode(unittest.TestCase): - DATA0 = {'assignedLabels': [{}], - 'description': None, - 'jobs': [], - 'mode': 'NORMAL', - 'nodeDescription': 'the master Jenkins node', - 'nodeName': '', - 'numExecutors': 2, - 'overallLoad': {}, - 'primaryView': {'name': 'All', 'url': 'http://halob:8080/'}, - 'quietingDown': False, - 'slaveAgentPort': 0, - 'unlabeledLoad': {}, - 'useCrumbs': False, - 'useSecurity': False, - 'views': [{'name': 'All', 'url': 'http://halob:8080/'}, - {'name': 'FodFanFo', 'url': 'http://halob:8080/view/FodFanFo/'}]} + DATA0 = { + 'assignedLabels': [{}], + 'description': None, + 'jobs': [], + 'mode': 'NORMAL', + 'nodeDescription': 'the master Jenkins node', + 'nodeName': '', + 'numExecutors': 2, + 'overallLoad': {}, + 'primaryView': {'name': 'All', 'url': 'http://halob:8080/'}, + 'quietingDown': False, + 'slaveAgentPort': 0, + 'unlabeledLoad': {}, + 'useCrumbs': False, + 'useSecurity': False, + 'views': [ + {'name': 'All', 'url': 'http://halob:8080/'}, + {'name': 'FodFanFo', 'url': 'http://halob:8080/view/FodFanFo/'} + ] + } - DATA1 = {'busyExecutors': 0, - 'computer': [{'actions': [], - 'displayName': 'master', - 'executors': [{}, {}], - 'icon': 'computer.png', - 'idle': True, - 'jnlpAgent': False, - 'launchSupported': True, - 'loadStatistics': {}, - 'manualLaunchAllowed': True, - 'monitorData': {'hudson.node_monitors.ArchitectureMonitor': 'Linux (amd64)', - 'hudson.node_monitors.ClockMonitor': {'diff': 0}, - 'hudson.node_monitors.DiskSpaceMonitor': {'path': '/var/lib/jenkins', - 'size': 671924924416}, - 'hudson.node_monitors.ResponseTimeMonitor': {'average': 0}, - 'hudson.node_monitors.SwapSpaceMonitor': {'availablePhysicalMemory': 3174686720, - 'availableSwapSpace': 17163087872, - 'totalPhysicalMemory': 16810180608, - 'totalSwapSpace': 17163087872}, - 'hudson.node_monitors.TemporarySpaceMonitor': {'path': '/tmp', - 'size': 671924924416}}, - 'numExecutors': 2, - 'offline': False, - 'offlineCause': None, - 'oneOffExecutors': [], - 'temporarilyOffline': False}, - {'actions': [], - 'displayName': 'bobnit', - 'executors': [{}], - 'icon': 'computer-x.png', - 'idle': True, - 'jnlpAgent': False, - 'launchSupported': True, - 'loadStatistics': {}, - 'manualLaunchAllowed': True, - 'monitorData': {'hudson.node_monitors.ArchitectureMonitor': 'Linux (amd64)', - 'hudson.node_monitors.ClockMonitor': {'diff': 4261}, - 'hudson.node_monitors.DiskSpaceMonitor': {'path': '/home/sal/jenkins', - 'size': 169784860672}, - 'hudson.node_monitors.ResponseTimeMonitor': {'average': 29}, - 'hudson.node_monitors.SwapSpaceMonitor': {'availablePhysicalMemory': 4570710016, - 'availableSwapSpace': 12195983360, - 'totalPhysicalMemory': 8374497280, - 'totalSwapSpace': 12195983360}, - 'hudson.node_monitors.TemporarySpaceMonitor': {'path': '/tmp', - 'size': 249737277440}}, - 'numExecutors': 1, - 'offline': True, - 'offlineCause': {}, - 'oneOffExecutors': [], - 'temporarilyOffline': False}, - {'actions': [], - 'displayName': 'halob', - 'executors': [{}], - 'icon': 'computer-x.png', - 'idle': True, - 'jnlpAgent': True, - 'launchSupported': False, - 'loadStatistics': {}, - 'manualLaunchAllowed': True, - 'monitorData': {'hudson.node_monitors.ArchitectureMonitor': None, - 'hudson.node_monitors.ClockMonitor': None, - 'hudson.node_monitors.DiskSpaceMonitor': None, - 'hudson.node_monitors.ResponseTimeMonitor': None, - 'hudson.node_monitors.SwapSpaceMonitor': None, - 'hudson.node_monitors.TemporarySpaceMonitor': None}, - 'numExecutors': 1, - 'offline': True, - 'offlineCause': None, - 'oneOffExecutors': [], - 'temporarilyOffline': False}], - 'displayName': 'nodes', - 'totalExecutors': 2} + DATA1 = { + 'busyExecutors': 0, + 'computer': [ + { + 'actions': [], + 'displayName': 'master', + 'executors': [{}, {}], + 'icon': 'computer.png', + 'idle': True, + 'jnlpAgent': False, + 'launchSupported': True, + 'loadStatistics': {}, + 'manualLaunchAllowed': True, + 'monitorData': { + 'hudson.node_monitors.ArchitectureMonitor': 'Linux (amd64)', + 'hudson.node_monitors.ClockMonitor': {'diff': 0}, + 'hudson.node_monitors.DiskSpaceMonitor': { + 'path': '/var/lib/jenkins', + 'size': 671924924416 + }, + 'hudson.node_monitors.ResponseTimeMonitor': {'average': 0}, + 'hudson.node_monitors.SwapSpaceMonitor': { + 'availablePhysicalMemory': 3174686720, + 'availableSwapSpace': 17163087872, + 'totalPhysicalMemory': 16810180608, + 'totalSwapSpace': 17163087872 + }, + 'hudson.node_monitors.TemporarySpaceMonitor': { + 'path': '/tmp', + 'size': 671924924416 + } + }, + 'numExecutors': 2, + 'offline': False, + 'offlineCause': None, + 'oneOffExecutors': [], + 'temporarilyOffline': False + }, + { + 'actions': [], + 'displayName': 'bobnit', + 'executors': [{}], + 'icon': 'computer-x.png', + 'idle': True, + 'jnlpAgent': False, + 'launchSupported': True, + 'loadStatistics': {}, + 'manualLaunchAllowed': True, + 'monitorData': { + 'hudson.node_monitors.ArchitectureMonitor': 'Linux (amd64)', + 'hudson.node_monitors.ClockMonitor': {'diff': 4261}, + 'hudson.node_monitors.DiskSpaceMonitor': { + 'path': '/home/sal/jenkins', + 'size': 169784860672 + }, + 'hudson.node_monitors.ResponseTimeMonitor': {'average': 29}, + 'hudson.node_monitors.SwapSpaceMonitor': { + 'availablePhysicalMemory': 4570710016, + 'availableSwapSpace': 12195983360, + 'totalPhysicalMemory': 8374497280, + 'totalSwapSpace': 12195983360 + }, + 'hudson.node_monitors.TemporarySpaceMonitor': { + 'path': '/tmp', + 'size': 249737277440 + } + }, + 'numExecutors': 1, + 'offline': True, + 'offlineCause': {}, + 'oneOffExecutors': [], + 'temporarilyOffline': False + }, + { + 'actions': [], + 'displayName': 'halob', + 'executors': [{}], + 'icon': 'computer-x.png', + 'idle': True, + 'jnlpAgent': True, + 'launchSupported': False, + 'loadStatistics': {}, + 'manualLaunchAllowed': True, + 'monitorData': { + 'hudson.node_monitors.ArchitectureMonitor': None, + 'hudson.node_monitors.ClockMonitor': None, + 'hudson.node_monitors.DiskSpaceMonitor': None, + 'hudson.node_monitors.ResponseTimeMonitor': None, + 'hudson.node_monitors.SwapSpaceMonitor': None, + 'hudson.node_monitors.TemporarySpaceMonitor': None + }, + 'numExecutors': 1, + 'offline': True, + 'offlineCause': None, + 'oneOffExecutors': [], + 'temporarilyOffline': False + } + ], + 'displayName': 'nodes', + 'totalExecutors': 2 + } - DATA2 = {'actions': [], - 'displayName': 'master', - 'executors': [{}, {}], - 'icon': 'computer.png', - 'idle': True, - 'jnlpAgent': False, - 'launchSupported': True, - 'loadStatistics': {}, - 'manualLaunchAllowed': True, - 'monitorData': {'hudson.node_monitors.ArchitectureMonitor': 'Linux (amd64)', - 'hudson.node_monitors.ClockMonitor': {'diff': 0}, - 'hudson.node_monitors.DiskSpaceMonitor': {'path': '/var/lib/jenkins', - 'size': 671942561792}, - 'hudson.node_monitors.ResponseTimeMonitor': {'average': 0}, - 'hudson.node_monitors.SwapSpaceMonitor': {'availablePhysicalMemory': 2989916160, - 'availableSwapSpace': 17163087872, - 'totalPhysicalMemory': 16810180608, - 'totalSwapSpace': 17163087872}, - 'hudson.node_monitors.TemporarySpaceMonitor': {'path': '/tmp', - 'size': 671942561792}}, - 'numExecutors': 2, - 'offline': False, - 'offlineCause': None, - 'oneOffExecutors': [], - 'temporarilyOffline': False} + DATA2 = { + 'actions': [], + 'displayName': 'master', + 'executors': [{}, {}], + 'icon': 'computer.png', + 'idle': True, + 'jnlpAgent': False, + 'launchSupported': True, + 'loadStatistics': {}, + 'manualLaunchAllowed': True, + 'monitorData': { + 'hudson.node_monitors.ArchitectureMonitor': 'Linux (amd64)', + 'hudson.node_monitors.ClockMonitor': {'diff': 0}, + 'hudson.node_monitors.DiskSpaceMonitor': { + 'path': '/var/lib/jenkins', + 'size': 671942561792 + }, + 'hudson.node_monitors.ResponseTimeMonitor': {'average': 0}, + 'hudson.node_monitors.SwapSpaceMonitor': { + 'availablePhysicalMemory': 2989916160, + 'availableSwapSpace': 17163087872, + 'totalPhysicalMemory': 16810180608, + 'totalSwapSpace': 17163087872 + }, + 'hudson.node_monitors.TemporarySpaceMonitor': { + 'path': '/tmp', + 'size': 671942561792 + } + }, + 'numExecutors': 2, + 'offline': False, + 'offlineCause': None, + 'oneOffExecutors': [], + 'temporarilyOffline': False + } - DATA3 = {'actions': [], - 'displayName': 'halob', - 'executors': [{}], - 'icon': 'computer-x.png', - 'idle': True, - 'jnlpAgent': True, - 'launchSupported': False, - 'loadStatistics': {}, - 'manualLaunchAllowed': True, - 'monitorData': {'hudson.node_monitors.ArchitectureMonitor': None, - 'hudson.node_monitors.ClockMonitor': None, - 'hudson.node_monitors.DiskSpaceMonitor': None, - 'hudson.node_monitors.ResponseTimeMonitor': None, - 'hudson.node_monitors.SwapSpaceMonitor': None, - 'hudson.node_monitors.TemporarySpaceMonitor': None}, - 'numExecutors': 1, - 'offline': True, - 'offlineCause': None, - 'oneOffExecutors': [], - 'temporarilyOffline': False} + DATA3 = { + 'actions': [], + 'displayName': 'halob', + 'executors': [{}], + 'icon': 'computer-x.png', + 'idle': True, + 'jnlpAgent': True, + 'launchSupported': False, + 'loadStatistics': {}, + 'manualLaunchAllowed': True, + 'monitorData': { + 'hudson.node_monitors.ArchitectureMonitor': None, + 'hudson.node_monitors.ClockMonitor': None, + 'hudson.node_monitors.DiskSpaceMonitor': None, + 'hudson.node_monitors.ResponseTimeMonitor': None, + 'hudson.node_monitors.SwapSpaceMonitor': None, + 'hudson.node_monitors.TemporarySpaceMonitor': None}, + 'numExecutors': 1, + 'offline': True, + 'offlineCause': None, + 'oneOffExecutors': [], + 'temporarilyOffline': False + } @mock.patch.object(Jenkins, '_poll') @mock.patch.object(Nodes, '_poll') diff --git a/jenkinsapi_tests/unittests/test_plugins.py b/jenkinsapi_tests/unittests/test_plugins.py index 3194be0..62b0e12 100644 --- a/jenkinsapi_tests/unittests/test_plugins.py +++ b/jenkinsapi_tests/unittests/test_plugins.py @@ -7,21 +7,42 @@ from jenkinsapi.plugin import Plugin class TestPlugins(unittest.TestCase): - DATA = {'plugins': [ - {'deleted': False, 'hasUpdate': True, 'downgradable': False, - 'dependencies': [{}, {}, {}, {}], - 'longName': 'Jenkins Subversion Plug-in', 'active': True, - 'shortName': 'subversion', 'backupVersion': None, - 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', - 'enabled': True, 'pinned': False, 'version': '1.45', - 'supportsDynamicLoad': 'MAYBE', 'bundled': True}, - {'deleted': False, 'hasUpdate': True, 'downgradable': False, - 'dependencies': [{}, {}], 'longName': 'Maven Integration plugin', - 'active': True, 'shortName': 'maven-plugin', 'backupVersion': None, - 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Maven+Project+Plugin', - 'enabled': True, 'pinned': False, 'version': '1.521', - 'supportsDynamicLoad': 'MAYBE', 'bundled': True} - ]} + DATA = { + 'plugins': [ + { + 'deleted': False, + 'hasUpdate': True, + 'downgradable': False, + 'dependencies': [{}, {}, {}, {}], + 'longName': 'Jenkins Subversion Plug-in', + 'active': True, + 'shortName': 'subversion', + 'backupVersion': None, + 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', + 'enabled': True, + 'pinned': False, + 'version': '1.45', + 'supportsDynamicLoad': 'MAYBE', + 'bundled': True + }, + { + 'deleted': False, + 'hasUpdate': True, + 'downgradable': False, + 'dependencies': [{}, {}], + 'longName': 'Maven Integration plugin', + 'active': True, + 'shortName': 'maven-plugin', + 'backupVersion': None, + 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Maven+Project+Plugin', + 'enabled': True, + 'pinned': False, + 'version': '1.521', + 'supportsDynamicLoad': 'MAYBE', + 'bundled': True + } + ] + } @mock.patch.object(Jenkins, '_poll') def setUp(self, _poll_jenkins): @@ -69,13 +90,24 @@ class TestPlugins(unittest.TestCase): def test_plugins_values(self, _poll_plugins): _poll_plugins.return_value = self.DATA - p = Plugin({'deleted': False, 'hasUpdate': True, 'downgradable': False, - 'dependencies': [{}, {}, {}, {}], - 'longName': 'Jenkins Subversion Plug-in', 'active': True, - 'shortName': 'subversion', 'backupVersion': None, - 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', - 'enabled': True, 'pinned': False, 'version': '1.45', - 'supportsDynamicLoad': 'MAYBE', 'bundled': True}) + p = Plugin( + { + 'deleted': False, + 'hasUpdate': True, + 'downgradable': False, + 'dependencies': [{}, {}, {}, {}], + 'longName': 'Jenkins Subversion Plug-in', + 'active': True, + 'shortName': 'subversion', + 'backupVersion': None, + 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', + 'enabled': True, + 'pinned': False, + 'version': '1.45', + 'supportsDynamicLoad': 'MAYBE', + 'bundled': True + } + ) plugins = self.J.get_plugins().values() self.assertIn(p, plugins) @@ -99,13 +131,24 @@ class TestPlugins(unittest.TestCase): def test_plugin_get_by_name(self, _poll_plugins): _poll_plugins.return_value = self.DATA - p = Plugin({'deleted': False, 'hasUpdate': True, 'downgradable': False, - 'dependencies': [{}, {}, {}, {}], - 'longName': 'Jenkins Subversion Plug-in', 'active': True, - 'shortName': 'subversion', 'backupVersion': None, - 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', - 'enabled': True, 'pinned': False, 'version': '1.45', - 'supportsDynamicLoad': 'MAYBE', 'bundled': True}) + p = Plugin( + { + 'deleted': False, + 'hasUpdate': True, + 'downgradable': False, + 'dependencies': [{}, {}, {}, {}], + 'longName': 'Jenkins Subversion Plug-in', + 'active': True, + 'shortName': 'subversion', + 'backupVersion': None, + 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin', + 'enabled': True, + 'pinned': False, + 'version': '1.45', + 'supportsDynamicLoad': 'MAYBE', + 'bundled': True + } + ) plugin = self.J.get_plugins()['subversion'] self.assertEquals(p, plugin) diff --git a/jenkinsapi_tests/unittests/test_queue.py b/jenkinsapi_tests/unittests/test_queue.py index 4a0a465..ad0da6c 100644 --- a/jenkinsapi_tests/unittests/test_queue.py +++ b/jenkinsapi_tests/unittests/test_queue.py @@ -1,7 +1,6 @@ import mock import unittest -from collections import defaultdict from jenkinsapi import config from jenkinsapi.jenkins import Jenkins from jenkinsapi.queue import Queue, QueueItem @@ -26,59 +25,99 @@ class TestQueue(unittest.TestCase): URL_DATA = {} - URL_DATA['http://localhost:8080/%s' % config.JENKINS_API] = \ - {'jobs': [ - {'name': 'utmebvpxrw', - 'url': 'http://localhost/job/utmebvpxrw'} - ] - } - - URL_DATA['http://localhost/job/utmebvpxrw/%s' % config.JENKINS_API] = \ - {} - - URL_DATA['http://localhost:8080/queue/%s' % config.JENKINS_API] = \ - {'items': [{'actions': [{'causes': [{'shortDescription': 'Started by user anonymous', - 'userId': None, - 'userName': 'anonymous'}]}], - 'blocked': False, - 'buildable': True, - 'buildableStartMilliseconds': 1371419916747, - 'id': 42, - 'inQueueSince': 1371419909428, - 'params': '', - 'stuck': False, - 'task': {'color': 'grey', - 'name': 'klscuimkqo', - 'url': 'http://localhost:8080/job/klscuimkqo/'}, - 'why': 'Waiting for next available executor'}, - {'actions': [{'causes': [{'shortDescription': 'Started by user anonymous', - 'userId': None, - 'userName': 'anonymous'}]}], - 'blocked': False, - 'buildable': True, - 'buildableStartMilliseconds': 1371419911747, - 'id': 41, - 'inQueueSince': 1371419906327, - 'params': '', - 'stuck': False, - 'task': {'color': 'grey', - 'name': 'vluyhzzepl', - 'url': 'http://localhost:8080/job/vluyhzzepl/'}, - 'why': 'Waiting for next available executor'}, - {'actions': [{'causes': [{'shortDescription': 'Started by user anonymous', - 'userId': None, - 'userName': 'anonymous'}]}], - 'blocked': False, - 'buildable': True, - 'buildableStartMilliseconds': 1371419911747, - 'id': 40, - 'inQueueSince': 1371419903212, - 'params': '', - 'stuck': False, - 'task': {'color': 'grey', - 'name': 'utmebvpxrw', - 'url': 'http://localhost:8080/job/utmebvpxrw/'}, - 'why': 'Waiting for next available executor'}]} + URL_DATA['http://localhost:8080/%s' % config.JENKINS_API] = { + 'jobs': [ + { + 'name': 'utmebvpxrw', + 'url': 'http://localhost/job/utmebvpxrw' + } + ] + } + + URL_DATA['http://localhost/job/utmebvpxrw/%s' % config.JENKINS_API] = {} + + URL_DATA['http://localhost:8080/queue/%s' % config.JENKINS_API] = { + 'items': [ + { + 'actions': [ + { + 'causes': [ + { + 'shortDescription': 'Started by user anonymous', + 'userId': None, + 'userName': 'anonymous' + } + ] + } + ], + 'blocked': False, + 'buildable': True, + 'buildableStartMilliseconds': 1371419916747, + 'id': 42, + 'inQueueSince': 1371419909428, + 'params': '', + 'stuck': False, + 'task': { + 'color': 'grey', + 'name': 'klscuimkqo', + 'url': 'http://localhost:8080/job/klscuimkqo/' + }, + 'why': 'Waiting for next available executor' + }, + { + 'actions': [ + { + 'causes': [ + { + 'shortDescription': 'Started by user anonymous', + 'userId': None, + 'userName': 'anonymous' + } + ] + } + ], + 'blocked': False, + 'buildable': True, + 'buildableStartMilliseconds': 1371419911747, + 'id': 41, + 'inQueueSince': 1371419906327, + 'params': '', + 'stuck': False, + 'task': { + 'color': 'grey', + 'name': 'vluyhzzepl', + 'url': 'http://localhost:8080/job/vluyhzzepl/' + }, + 'why': 'Waiting for next available executor' + }, + { + 'actions': [ + { + 'causes': [ + { + 'shortDescription': 'Started by user anonymous', + 'userId': None, + 'userName': 'anonymous' + } + ] + } + ], + 'blocked': False, + 'buildable': True, + 'buildableStartMilliseconds': 1371419911747, + 'id': 40, + 'inQueueSince': 1371419903212, + 'params': '', + 'stuck': False, + 'task': { + 'color': 'grey', + 'name': 'utmebvpxrw', + 'url': 'http://localhost:8080/job/utmebvpxrw/' + }, + 'why': 'Waiting for next available executor' + } + ] + } @mock.patch.object(JenkinsBase, 'get_data', mockGetData) def setUp(self): diff --git a/jenkinsapi_tests/unittests/test_requester.py b/jenkinsapi_tests/unittests/test_requester.py index 82bf655..f127927 100644 --- a/jenkinsapi_tests/unittests/test_requester.py +++ b/jenkinsapi_tests/unittests/test_requester.py @@ -2,7 +2,6 @@ import mock import unittest import requests -from collections import defaultdict from jenkinsapi.jenkins import Requester from jenkinsapi.custom_exceptions import JenkinsAPIException @@ -12,8 +11,12 @@ class TestQueue(unittest.TestCase): def test_get_request_dict_auth(self): req = Requester('foo', 'bar') - req_return = req.get_request_dict(url='http://', params={}, data=None, - headers=None) + req_return = req.get_request_dict( + url='http://', + params={}, + data=None, + headers=None + ) self.assertTrue(isinstance(req_return, dict)) self.assertTrue(req_return.get('auth')) self.assertTrue(req_return['auth'] == ('foo', 'bar')) @@ -22,17 +25,23 @@ class TestQueue(unittest.TestCase): req = Requester('foo', 'bar') with self.assertRaises(AssertionError) as na: - req_return = req.get_request_dict(url='http://', params='wrong', - data=None, headers=None) - self.assertTrue( - na.exception.message == "Params must be a dict, got 'wrong'") + req.get_request_dict( + url='http://', + params='wrong', + data=None, + headers=None + ) + self.assertTrue(na.exception.message == "Params must be a dict, got 'wrong'") def test_get_request_dict_correct_params(self): req = Requester('foo', 'bar') - req_return = req.get_request_dict(url='http://', + req_return = req.get_request_dict( + url='http://', params={'param': 'value'}, - data=None, headers=None) + data=None, + headers=None + ) self.assertTrue(isinstance(req_return, dict)) self.assertTrue(req_return.get('params')) @@ -42,17 +51,23 @@ class TestQueue(unittest.TestCase): req = Requester('foo', 'bar') with self.assertRaises(AssertionError) as na: - req_return = req.get_request_dict(url='http://', params={}, - data=None, headers='wrong') - self.assertTrue( - na.exception.message == "headers must be a dict, got 'wrong'") + req.get_request_dict( + url='http://', + params={}, + data=None, + headers='wrong' + ) + self.assertTrue(na.exception.message == "headers must be a dict, got 'wrong'") def test_get_request_dict_correct_headers(self): req = Requester('foo', 'bar') - req_return = req.get_request_dict(url='http://', + req_return = req.get_request_dict( + url='http://', params={'param': 'value'}, - data=None, headers={'header': 'value'}) + data=None, + headers={'header': 'value'} + ) self.assertTrue(isinstance(req_return, dict)) self.assertTrue(req_return.get('headers')) @@ -61,9 +76,12 @@ class TestQueue(unittest.TestCase): def test_get_request_dict_data_passed(self): req = Requester('foo', 'bar') - req_return = req.get_request_dict(url='http://', + req_return = req.get_request_dict( + url='http://', params={'param': 'value'}, - data='some data', headers={'header': 'value'}) + data='some data', + headers={'header': 'value'} + ) self.assertTrue(isinstance(req_return, dict)) print req_return.get('data') @@ -73,28 +91,35 @@ class TestQueue(unittest.TestCase): def test_get_request_dict_data_not_passed(self): req = Requester('foo', 'bar') - req_return = req.get_request_dict(url='http://', + req_return = req.get_request_dict( + url='http://', params={'param': 'value'}, - data=None, headers={'header': 'value'}) + data=None, + headers={'header': 'value'} + ) self.assertTrue(isinstance(req_return, dict)) self.assertFalse(req_return.get('data')) @mock.patch.object(requests, 'get') - def test_get_url(self, _get): + def test_get_url_get(self, _get): _get.return_value = 'SUCCESS' req = Requester('foo', 'bar') - self.assertTrue(req.get_url('http://dummy', - params={'param': 'value'}, - headers=None) == 'SUCCESS') + response = req.get_url( + 'http://dummy', + params={'param': 'value'}, + headers=None) + self.assertTrue(response == 'SUCCESS') @mock.patch.object(requests, 'post') - def test_get_url(self, _post): + def test_get_url_post(self, _post): _post.return_value = 'SUCCESS' req = Requester('foo', 'bar') - self.assertTrue(req.post_url('http://dummy', - params={'param': 'value'}, - headers=None) == 'SUCCESS') + response = req.post_url( + 'http://dummy', + params={'param': 'value'}, + headers=None) + self.assertTrue(response == 'SUCCESS') @mock.patch.object(requests, 'post') def test_post_xml_and_confirm_status_empty_xml(self, _post): @@ -102,9 +127,10 @@ class TestQueue(unittest.TestCase): req = Requester('foo', 'bar') with self.assertRaises(AssertionError) as ae: req.post_xml_and_confirm_status( - url='http://dummy', - params={'param': 'value'}, - data=None) + url='http://dummy', + params={'param': 'value'}, + data=None + ) self.assertTrue(ae.exception.message == "Unexpected type of parameter 'data': . Expected (str, dict)") @@ -115,9 +141,10 @@ class TestQueue(unittest.TestCase): _post.return_value = response req = Requester('foo', 'bar') ret = req.post_xml_and_confirm_status( - url='http://dummy', - params={'param': 'value'}, - data='') + url='http://dummy', + params={'param': 'value'}, + data='' + ) self.assertTrue(isinstance(ret, requests.Response)) @mock.patch.object(requests, 'post') @@ -126,9 +153,10 @@ class TestQueue(unittest.TestCase): req = Requester('foo', 'bar') with self.assertRaises(AssertionError) as ae: req.post_and_confirm_status( - url='http://dummy', - params={'param': 'value'}, - data=None) + url='http://dummy', + params={'param': 'value'}, + data=None + ) self.assertTrue(ae.exception.message == "Unexpected type of parameter 'data': . Expected (str, dict)") @@ -139,9 +167,10 @@ class TestQueue(unittest.TestCase): _post.return_value = response req = Requester('foo', 'bar') ret = req.post_and_confirm_status( - url='http://dummy', - params={'param': 'value'}, - data='some data') + url='http://dummy', + params={'param': 'value'}, + data='some data' + ) self.assertTrue(isinstance(ret, requests.Response)) @mock.patch.object(requests, 'post') @@ -153,9 +182,10 @@ class TestQueue(unittest.TestCase): req = Requester('foo', 'bar') with self.assertRaises(JenkinsAPIException) as ae: req.post_and_confirm_status( - url='http://dummy', - params={'param': 'value'}, - data='some data') + url='http://dummy', + params={'param': 'value'}, + data='some data' + ) print ae.exception.message self.assertTrue(ae.exception.message == "Operation failed. url=None, data=some data, headers={'Content-Type': 'application/x-www-form-urlencoded'}, status=500, text=") @@ -167,8 +197,9 @@ class TestQueue(unittest.TestCase): _get.return_value = response req = Requester('foo', 'bar') ret = req.get_and_confirm_status( - url='http://dummy', - params={'param': 'value'}) + url='http://dummy', + params={'param': 'value'} + ) self.assertTrue(isinstance(ret, requests.Response)) @mock.patch.object(requests, 'get') @@ -180,8 +211,9 @@ class TestQueue(unittest.TestCase): req = Requester('foo', 'bar') with self.assertRaises(JenkinsAPIException) as ae: req.get_and_confirm_status( - url='http://dummy', - params={'param': 'value'}) + url='http://dummy', + params={'param': 'value'} + ) print ae.exception.message self.assertTrue(ae.exception.message == "Operation failed. url=None, headers=None, status=500, text=") diff --git a/jenkinsapi_tests/unittests/test_view.py b/jenkinsapi_tests/unittests/test_view.py index 94bacff..4fdd433 100644 --- a/jenkinsapi_tests/unittests/test_view.py +++ b/jenkinsapi_tests/unittests/test_view.py @@ -22,36 +22,42 @@ class TestView(unittest.TestCase): 'property': [], 'url': 'http://halob:8080/view/FodFanFo/'} - JOB_DATA = {"actions": [], - "description": "test job", - "displayName": "foo", - "displayNameOrNull": None, - "name": "foo", - "url": "http://halob:8080/job/foo/", - "buildable": True, - "builds": [{"number": 3, "url": "http://halob:8080/job/foo/3/"}, - {"number": 2, "url": "http://halob:8080/job/foo/2/"}, - {"number": 1, "url": "http://halob:8080/job/foo/1/"}], - "color": "blue", - "firstBuild": {"number": 1, "url": "http://halob:8080/job/foo/1/"}, - "healthReport": [{"description": "Build stability: No recent builds failed.", - "iconUrl": "health-80plus.png", "score": 100}], - "inQueue": False, - "keepDependencies": False, - "lastBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastFailedBuild": None, - "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, - "lastUnstableBuild": None, - "lastUnsuccessfulBuild": None, - "nextBuildNumber": 4, - "property": [], - "queueItem": None, - "concurrentBuild": False, - "downstreamProjects": [], - "scm": {}, - "upstreamProjects": []} + JOB_DATA = { + "actions": [], + "description": "test job", + "displayName": "foo", + "displayNameOrNull": None, + "name": "foo", + "url": "http://halob:8080/job/foo/", + "buildable": True, + "builds": [ + {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + {"number": 2, "url": "http://halob:8080/job/foo/2/"}, + {"number": 1, "url": "http://halob:8080/job/foo/1/"} + ], + "color": "blue", + "firstBuild": {"number": 1, "url": "http://halob:8080/job/foo/1/"}, + "healthReport": [ + {"description": "Build stability: No recent builds failed.", + "iconUrl": "health-80plus.png", "score": 100} + ], + "inQueue": False, + "keepDependencies": False, + "lastBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastCompletedBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastFailedBuild": None, + "lastStableBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastSuccessfulBuild": {"number": 3, "url": "http://halob:8080/job/foo/3/"}, + "lastUnstableBuild": None, + "lastUnsuccessfulBuild": None, + "nextBuildNumber": 4, + "property": [], + "queueItem": None, + "concurrentBuild": False, + "downstreamProjects": [], + "scm": {}, + "upstreamProjects": [] + } @mock.patch.object(Job, '_poll') @mock.patch.object(View, '_poll') @@ -100,8 +106,7 @@ class TestView(unittest.TestCase): self.assertTrue(self.v.deleted) def test_get_job_url(self): - self.assertEquals( - self.v.get_job_url('foo'), 'http://halob:8080/job/foo/') + self.assertEquals(self.v.get_job_url('foo'), 'http://halob:8080/job/foo/') def test_wrong_get_job_url(self): with self.assertRaises(KeyError): diff --git a/jenkinsapi_tests/unittests/test_views.py b/jenkinsapi_tests/unittests/test_views.py index e04630b..7993980 100644 --- a/jenkinsapi_tests/unittests/test_views.py +++ b/jenkinsapi_tests/unittests/test_views.py @@ -18,12 +18,12 @@ class TestViews(unittest.TestCase): mock_requester = Requester(username='foouser', password='foopassword') mock_requester.get_url = mock.MagicMock(return_value='
') mock_requester.post_url = mock.MagicMock(return_value='') - _poll.return_value = {'views': [ - {'name': 'All', - 'url': 'http://localhost:8080/views/All'}, - {'name': 'NewView', - 'url': 'http://localhost:8080/views/NewView'}, - ]} + _poll.return_value = { + 'views': [ + {'name': 'All', 'url': 'http://localhost:8080/views/All'}, + {'name': 'NewView', 'url': 'http://localhost:8080/views/NewView'}, + ] + } _base_poll.return_value = _poll.return_value J = Jenkins('http://localhost:8080/', username='foouser', password='foopassword', @@ -32,7 +32,7 @@ class TestViews(unittest.TestCase): new_view = J.views.create('NewView') self.assertTrue(isinstance(new_view, View)) self.assertEquals(new_view.baseurl, - 'http://localhost:8080/views/NewView') + 'http://localhost:8080/views/NewView') def test_create_existing_view(self): """ @@ -55,9 +55,7 @@ class TestViews(unittest.TestCase): with mock.patch.object(JenkinsBase, 'get_data', mockGetData): - J = Jenkins('http://localhost:8080', - username='foouser', - password='foopassword') + J = Jenkins('http://localhost:8080', username='foouser', password='foopassword') new_view = J.views.create('NewView') -- 2.34.1