Add method to return Jenkins Version
authorSateesh Kumar <sateeshkumarb@yahoo.com>
Sat, 7 Dec 2013 16:24:38 +0000 (21:54 +0530)
committerSateesh Kumar <sateeshkumarb@yahoo.com>
Sat, 7 Dec 2013 16:24:38 +0000 (21:54 +0530)
jenkinsapi/jenkins.py
jenkinsapi_tests/unittests/test_jenkins.py

index c86b908725ddea00e663a5001db7db514207fe15..c5f06ba29155a8cf7312b645faf71767c0982473 100644 (file)
@@ -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)
index 641002d246537cad08f1e804c97c28da06a328bf..371167a34dafa0196db604765b2eb3c1f7ba5550 100644 (file)
@@ -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):