def invoke_job(self, name, parameters=None, token=None, cause=None, wait_started=True, wait_done=True, output_progress=False, output_done=True, open_browser=False, short_info=True): wait_started = wait_started or open_browser or wait_done logging.info('invoke job:{} parameters:{}'.format(name, parameters)) job_info = self.get_job_info(name) has_params = _is_parametrized_job(job_info) params = parameters or {} if has_params and cause: params['cause'] = cause req_url = self.build_job_url_ex(name, params, token, has_params=has_params) logging.info('invoke at {}'.format(req_url)) response = self.jenkins_open_ex(jenkins.Request(req_url, b''), add_crumb=False) logging.info('running with params: {}'.format(params)) job_in_queue_url = response.headers['location'] + 'api/json' logging.info('enqueued url: {}'.format(job_in_queue_url)) result = json.loads( self.jenkins_open(jenkins.Request(job_in_queue_url))) wait_started = wait_started or wait_done logging.info("triggered: {}".format(name)) if wait_started: logging.info('\n[wait until:started:{}]\n'.format(name)) build_number = self._wait_started(job_in_queue_url) build_info = self.get_build_info(name, build_number) if open_browser: webbrowser.open_new_tab('{}/console'.format(build_info['url'])) if wait_done: logging.info("waiting for done: {}".format(name)) build_info = self.wait_done(name, build_number, output_progress=output_progress) if output_done: logging.info(self.get_build_console_output(name, build_number)) result = build_info if result and short_info: info = bunch.bunchify(result) result = utils.from_build_info_to_build_short_info(info) return result
def test_simple(self, jenkins_mock): jenkins_mock.side_effect = jenkins.NotFoundException() 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(), 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)
def test_jenkins_open_timeout(self): j = jenkins.Jenkins("http://%s:%s" % self.server.server_address, None, None, timeout=0.1) request = jenkins.Request('http://%s:%s/job/TestJob' % self.server.server_address) # assert our request times out when no response with testtools.ExpectedException(jenkins.TimeoutException): j.jenkins_open(request, add_crumb=False)
def test_with_data(self, jenkins_mock): jenkins_mock.return_value = get_mock_urlopen_return_value( self.crumb_data) 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(), 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)
def test_timeout(self, jenkins_mock): jenkins_mock.side_effect = jenkins.URLError(reason="timed out") 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) self.assertEqual(str(context_manager.exception), 'Error in request: timed out') self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(), self.make_url('job/TestJob')) self._check_requests(jenkins_mock.call_args_list)
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(self.make_url('job/TestJob')) self.j.maybe_add_crumb(request) self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(), 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)
def test_empty_response(self, jenkins_mock): jenkins_mock.return_value = Mock(**{'read.return_value': None}) 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[{0}/]: ' 'empty response'.format(self.base_url)) self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(), self.make_url('job/TestJob')) self._check_requests(jenkins_mock.call_args_list)
def test_jenkins_open_no_timeout(self): j = jenkins.Jenkins("http://%s:%s" % self.server.server_address, None, None) request = jenkins.Request('http://%s:%s/job/TestJob' % self.server.server_address) # assert we don't timeout quickly like previous test when # no timeout defined. with testtools.ExpectedException(TestsTimeoutException): time_limit(0.5, self.messages, j.jenkins_open, request, add_crumb=False)
def test_response_501(self, jenkins_mock): jenkins_mock.side_effect = jenkins.HTTPError( self.make_url('job/TestJob'), code=501, msg="Not implemented", hdrs=[], fp=None) request = jenkins.Request(self.make_url('job/TestJob')) with self.assertRaises(HTTPError) as context_manager: self.j.jenkins_open(request, add_crumb=False) self.assertEqual(str(context_manager.exception), 'HTTP Error 501: Not implemented') self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(), self.make_url('job/TestJob')) self._check_requests(jenkins_mock.call_args_list)
def test_response_404(self, jenkins_mock): jenkins_mock.side_effect = jenkins.HTTPError( self.make_url('job/TestJob'), code=404, msg="basic auth failed", hdrs=[], fp=None) request = jenkins.Request(self.make_url('job/TestJob')) with self.assertRaises(jenkins.NotFoundException) as context_manager: self.j.jenkins_open(request, add_crumb=False) self.assertEqual(str(context_manager.exception), 'Requested item could not be found') self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(), self.make_url('job/TestJob')) self._check_requests(jenkins_mock.call_args_list)
def test_simple(self, jenkins_mock): data = {'foo': 'bar'} jenkins_mock.side_effect = [ get_mock_urlopen_return_value(self.crumb_data), get_mock_urlopen_return_value(data), ] 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(), 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']) self._check_requests(jenkins_mock.call_args_list)
def test_response_403(self, jenkins_mock): jenkins_mock.side_effect = jenkins.HTTPError( self.make_url('job/TestJob'), code=401, msg="basic auth failed", hdrs=[], fp=None) request = jenkins.Request(self.make_url('job/TestJob')) with self.assertRaises(jenkins.JenkinsException) as context_manager: self.j.jenkins_open(request, add_crumb=False) self.assertEqual( str(context_manager.exception), 'Error in request. Possibly authentication failed [401]: ' 'basic auth failed') self.assertEqual(jenkins_mock.call_args[0][0].get_full_url(), self.make_url('job/TestJob')) self._check_requests(jenkins_mock.call_args_list)
def get_queue_info(): js = self.jenkins_open(jenkins.Request(job_in_queue_url)) return json.loads(js)