add get_version method

Add a method to get the Jenkins server (or master) version

Signed-off-by: Antoine Musso <hashar@free.fr>
Change-Id: I9bbcf5fd1615246e53a9d83fec9d0c93c64b15aa
This commit is contained in:
Khai Do
2014-09-29 14:03:08 -07:00
committed by Antoine Musso
parent 20b49b6520
commit dafffd2eb8
2 changed files with 61 additions and 1 deletions

View File

@@ -330,6 +330,31 @@ class Jenkins(object):
raise JenkinsException("Could not parse JSON info for server[%s]"
% self.server)
def get_version(self):
"""Get the version of this Master.
:returns: This master's version number ``str``
Example::
>>> j = Jenkins()
>>> info = j.get_version()
>>> print info
>>> 1.541
"""
try:
request = Request(self.server)
request.add_header('X-Jenkins', '0.0')
response = urlopen(request)
return response.info().getheader('X-Jenkins')
except HTTPError:
raise JenkinsException("Error communicating with server[%s]"
% self.server)
except BadStatusLine:
raise JenkinsException("Error communicating with server[%s]"
% self.server)
def get_jobs(self):
"""Get list of jobs running.

View File

@@ -5,7 +5,7 @@ if sys.version_info < (2, 7):
else:
import unittest
from mock import patch
from mock import patch, Mock
import six
from tests.helper import jenkins
@@ -494,6 +494,41 @@ class JenkinsTest(unittest.TestCase):
jenkins_mock.call_args[0][0].get_full_url(),
u'http://example.com/job/TestJob/api/json?depth=0')
@patch('jenkins.urlopen')
def test_get_version__some_version(self, urlopen_mock):
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
mock_response = Mock()
config = {'info.return_value.getheader.return_value': 'Version42'}
mock_response.configure_mock(**config)
urlopen_mock.side_effect = [mock_response]
self.assertEqual(j.get_version(), 'Version42')
@patch('jenkins.urlopen')
def test_get_version__HTTPError(self, urlopen_mock):
urlopen_mock.side_effect = jenkins.HTTPError(
'http://example.com/',
code=503,
msg="internal server error",
hdrs=[],
fp=None)
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
with self.assertRaises(jenkins.JenkinsException) as context_manager:
j.get_version()
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
@patch('jenkins.urlopen')
def test_get_version__BadStatusLine(self, urlopen_mock):
urlopen_mock.side_effect = jenkins.BadStatusLine('not a valid status line')
j = jenkins.Jenkins('http://example.com/', 'test', 'test')
with self.assertRaises(jenkins.JenkinsException) as context_manager:
j.get_version()
self.assertEqual(
str(context_manager.exception),
'Error communicating with server[http://example.com/]')
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_get_jobs(self, jenkins_mock):
jobs = {