From 4142cb6d9cf11a973f205d9f2d79818c34584bdd Mon Sep 17 00:00:00 2001 From: Sateesh Kumar Date: Sat, 7 Dec 2013 21:54:38 +0530 Subject: [PATCH] Add method to return Jenkins Version --- jenkinsapi/jenkins.py | 13 ++++++++- jenkinsapi_tests/unittests/test_jenkins.py | 32 +++++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/jenkinsapi/jenkins.py b/jenkinsapi/jenkins.py index c86b908..c5f06ba 100644 --- a/jenkinsapi/jenkins.py +++ b/jenkinsapi/jenkins.py @@ -21,7 +21,7 @@ from jenkinsapi.queue import Queue from jenkinsapi.fingerprint import Fingerprint from jenkinsapi.jenkinsbase import JenkinsBase from jenkinsapi.utils.requester import Requester -from jenkinsapi.custom_exceptions import UnknownJob +from jenkinsapi.custom_exceptions import UnknownJob, BadURL log = logging.getLogger(__name__) @@ -318,3 +318,14 @@ class Jenkins(JenkinsBase): def get_executors(self, nodename): url = '%s/computer/%s' % (self.baseurl, nodename) return Executors(url, nodename, self) + + def get_version(self): + """ + Return version number of Jenkins + """ + r = self.requester.get_and_confirm_status(self.baseurl) + try: + return r.headers['X-jenkins'] + except KeyError: + msg = '%s is not a valid Jenkins URL.' %(self.baseurl) + raise BadURL(msg) diff --git a/jenkinsapi_tests/unittests/test_jenkins.py b/jenkinsapi_tests/unittests/test_jenkins.py index 641002d..371167a 100644 --- a/jenkinsapi_tests/unittests/test_jenkins.py +++ b/jenkinsapi_tests/unittests/test_jenkins.py @@ -4,7 +4,7 @@ import unittest from jenkinsapi.plugins import Plugins from jenkinsapi.utils.requester import Requester from jenkinsapi.jenkins import Jenkins, JenkinsBase, Job -from jenkinsapi.custom_exceptions import JenkinsAPIException, UnknownJob +from jenkinsapi.custom_exceptions import JenkinsAPIException, UnknownJob, BadURL class TestJenkins(unittest.TestCase): @@ -303,6 +303,36 @@ class TestJenkins(unittest.TestCase): new_jenkins = J.get_jenkins_obj() self.assertEquals(new_jenkins, J) + @mock.patch.object(JenkinsBase, '_poll') + @mock.patch.object(Jenkins, '_poll') + def test_get_version(self, _base_poll,_poll): + class MockResponse(object): + def __init__(self): + self.headers = {} + self.headers['X-jenkins'] = '1.542' + mock_requester = Requester(username='foouser', password='foopassword') + mock_requester.get_and_confirm_status = mock.MagicMock(return_value=MockResponse()) + J = Jenkins('http://localhost:8080/', + username='foouser', password='foopassword', + requester=mock_requester) + self.assertEquals('1.542', J.get_version()) + + @mock.patch.object(JenkinsBase, '_poll') + @mock.patch.object(Jenkins, '_poll') + def test_get_version_exception(self, _base_poll,_poll): + class MockResponse(object): + def __init__(self): + self.headers = {} + base_url = 'http://localhost:8080' + mock_requester = Requester(username='foouser', password='foopassword') + mock_requester.get_and_confirm_status = mock.MagicMock(return_value=MockResponse()) + J = Jenkins(base_url, + username='foouser', password='foopassword', + requester=mock_requester) + with self.assertRaises(BadURL) as context: + J.get_version() + msg = '%s is not a valid Jenkins URL.' %(base_url) + self.assertEqual(context.exception.message,msg) class TestJenkinsURLs(unittest.TestCase): -- 2.34.1