def test_update_req_sha_and_queue_pickme_added_test_conflicting_pickmes(self): new_sha = "1"*40 pickme_request = copy.deepcopy(self.fake_request) pickme_request['state'] = 'added' pickme_request['tags'] = 'conflict-pickme' with mock.patch('pushmanager.core.git.GitQueue.enqueue_request') as enqueue_req: with mock.patch.dict(Settings, MockedSettings): GitQueue._update_req_sha_and_queue_pickme(pickme_request, new_sha) result = [None] def on_db_return(success, db_results): assert success, "Database error" result[0] = db_results.first() request_info_query = db.push_requests.select().where( db.push_requests.c.id == self.fake_request['id'] ) db.execute_cb(request_info_query, on_db_return) T.assert_equal(result[0][5], new_sha) T.assert_equals(enqueue_req.call_count, 2) enqueue_req.assert_has_calls([ mock.call( GitTaskAction.TEST_CONFLICTING_PICKMES, GitQueue._get_push_for_request(pickme_request['id'])['push'], pushmanager_url='https://%s:%s' % ( MockedSettings['main_app']['servername'], MockedSettings['main_app']['port']) ) ])
def start_services(self): # HTTPS server sockets = tornado.netutil.bind_sockets( self.port, address=Settings['main_app']['servername']) redir_sockets = tornado.netutil.bind_sockets( self.redir_port, address=Settings['main_app']['servername']) tornado.process.fork_processes(Settings['tornado']['num_workers']) server = tornado.httpserver.HTTPServer( self.main_app, ssl_options={ 'certfile': Settings['main_app']['ssl_certfile'], # This really should be read into a string so we can drop privileges # after reading the key but before starting the server, but Python # doesn't let us use strings for keys until Python 3.2 :( 'keyfile': Settings['main_app']['ssl_keyfile'], }) server.add_sockets(sockets) # HTTP server (to redirect to HTTPS) redir_server = tornado.httpserver.HTTPServer(self.redir_app) redir_server.add_sockets(redir_sockets) # Start the mail, git, reviewboard and XMPP queue handlers MailQueue.start_worker() GitQueue.start_worker() RBQueue.start_worker() XMPPQueue.start_worker()
def test_update_req_sha_and_queue_pickme_added_test_conflicting_pickmes(self): new_sha = "1"*40 pickme_request = copy.deepcopy(self.fake_request) pickme_request['state'] = 'added' pickme_request['tags'] = 'conflict-pickme' with mock.patch('pushmanager.core.git.GitQueue.enqueue_request') as enqueue_req: with mock.patch.dict(Settings, MockedSettings): GitQueue._update_req_sha_and_queue_pickme(pickme_request, new_sha) result = [None] def on_db_return(success, db_results): assert success, "Database error" result[0] = db_results.first() request_info_query = db.push_requests.select().where( db.push_requests.c.id == self.fake_request['id'] ) db.execute_cb(request_info_query, on_db_return) T.assert_equal(result[0][5], new_sha) T.assert_equals(enqueue_req.call_count, 2) enqueue_req.assert_has_calls([ mock.call( GitTaskAction.TEST_CONFLICTING_PICKMES, GitQueue._get_push_for_request(pickme_request['id'])['push'], pushmanager_url='https://%s:%s' % (MockedSettings['main_app']['servername'], MockedSettings['main_app']['port'])) ])
def on_db_complete(self, success, db_results): self.check_db_results(success, db_results) # Re-check pickmes that are marked as conflicting, in case this was the pickme # that they conflicted against. GitQueue.enqueue_request(GitTaskAction.TEST_CONFLICTING_PICKMES, self.pushid, pushmanager_url=self.get_base_url())
def on_checklist_upsert_complete(self, success, db_results): if not success: return self.send_error(500) if self.requestid: GitQueue.enqueue_request(self.requestid) return self.redirect("/requests?user=%s" % self.request_user)
def on_db_complete(self, success, db_results): self.check_db_results(success, db_results) for request_id in self.request_ids: GitQueue.enqueue_request( GitTaskAction.TEST_PICKME_CONFLICT, request_id, pushmanager_url=self.get_base_url() )
def on_db_complete(self, success, db_results): self.check_db_results(success, db_results) # Re-check pickmes that are marked as conflicting, in case this was the pickme # that they conflicted against. GitQueue.enqueue_request( GitTaskAction.TEST_CONFLICTING_PICKMES, self.pushid, pushmanager_url=self.get_base_url() )
def on_checklist_upsert_complete(self, success, db_results): if not success: return self.send_error(500) if self.requestid: GitQueue.enqueue_request(GitTaskAction.VERIFY_BRANCH, self.requestid) # Check if the request is already pickme'd for a push, and if # so also enqueue it to be checked for conflicts. request_push_id = GitQueue._get_push_for_request(self.requestid) if request_push_id: GitQueue.enqueue_request(GitTaskAction.TEST_PICKME_CONFLICT, self.requestid) return self.redirect("/requests?user=%s" % self.request_user)
def test_stderr_and_stdout_in_conflict_text(self): welsh_req = {'id': 2, 'user': '******', 'user': '******', 'tags':'git-ok', 'title':'Welsh', 'repo':'.', 'branch':'change_welsh'} with nested( mock.patch('pushmanager.core.git.GitQueue.create_or_update_local_repo'), mock.patch('pushmanager.core.git.GitQueue.git_merge_pickme'), mock.patch('pushmanager.core.git.git_branch_context_manager'), mock.patch('pushmanager.core.git.git_merge_context_manager'), ) as (update_repo, merge_pickme, branch_mgr, merge_mgr): def throw_gitexn(*args): raise GitException( "GitException!", gitret=1, giterr="some_stderr_string", gitout="some_stdout_string", ) merge_mgr.side_effect = throw_gitexn (conflict, details) = GitQueue._test_pickme_conflict_master( 0, welsh_req, 'testing_pickme_branch', '/local/repo/path/', False ) assert conflict == True assert "some_stderr_string" in details['conflicts'] assert "some_stdout_string" in details['conflicts']
def test_stderr_and_stdout_in_conflict_text(self): welsh_req = {'id': 2, 'user': '******', 'user': '******', 'tags':'git-ok', 'title':'Welsh', 'repo':'.', 'branch':'change_welsh'} with nested( mock.patch('pushmanager.core.git.GitQueue.create_or_update_local_repo'), mock.patch('pushmanager.core.git.GitQueue.git_merge_pickme'), mock.patch('pushmanager.core.git.git_branch_context_manager'), mock.patch('pushmanager.core.git.git_merge_context_manager'), ) as (update_repo, merge_pickme, branch_mgr, merge_mgr): def throw_gitexn(*args): raise GitException( "GitException!", gitret=1, giterr="some_stderr_string", gitout="some_stdout_string", ) merge_mgr.side_effect = throw_gitexn (conflict, details) = GitQueue._test_pickme_conflict_master( 0, welsh_req, 'testing_pickme_branch', '/local/repo/path/', pushmanager_url, False ) assert conflict == True assert "some_stderr_string" in details['conflicts'] assert "some_stdout_string" in details['conflicts']
def start_services(self): # HTTPS server sockets = tornado.netutil.bind_sockets(self.port, address=Settings['main_app']['servername']) redir_sockets = tornado.netutil.bind_sockets(self.redir_port, address=Settings['main_app']['servername']) # Start the mail, git, reviewboard and XMPP queue handlers worker_pids = [] worker_pids.extend(MailQueue.start_worker()) worker_pids.extend(RBQueue.start_worker()) worker_pids.extend(XMPPQueue.start_worker()) worker_pids.extend(GitQueue.start_worker()) for worker_pid in worker_pids: pid.write(self.pid_file, append=True, pid=worker_pid) self.queue_worker_pids.extend(worker_pids) tornado.process.fork_processes(Settings['tornado']['num_workers']) server = tornado.httpserver.HTTPServer(self.main_app, ssl_options={ 'certfile': Settings['main_app']['ssl_certfile'], # This really should be read into a string so we can drop privileges # after reading the key but before starting the server, but Python # doesn't let us use strings for keys until Python 3.2 :( 'keyfile': Settings['main_app']['ssl_keyfile'], }) server.add_sockets(sockets) # HTTP server (to redirect to HTTPS) redir_server = tornado.httpserver.HTTPServer(self.redir_app) redir_server.add_sockets(redir_sockets)
def test_update_req_sha_and_queue_pickme_requested(self): new_sha = "1"*40 request = copy.deepcopy(self.fake_request) request['state'] = 'requested' with mock.patch('pushmanager.core.git.GitQueue.enqueue_request') as enqueue_req: GitQueue._update_req_sha_and_queue_pickme(request, new_sha) result = [None] def on_db_return(success, db_results): assert success, "Database error" result[0] = db_results.first() request_info_query = db.push_requests.select().where( db.push_requests.c.id == self.fake_request['id'] ) db.execute_cb(request_info_query, on_db_return) T.assert_equals(enqueue_req.call_count, 1) T.assert_equal(result[0][5], new_sha)
def get(self): request_id = pushmanager.core.util.get_int_arg(self.request, 'id') resp = {} if not request_id: self.set_status(404) else: request = GitQueue._get_request(request_id) resp = self._gen_test_tag_resp(request) self.finish(resp)
def on_checklist_upsert_complete(self, success, db_results): if not success: return self.send_error(500) if self.requestid: GitQueue.enqueue_request(GitTaskAction.VERIFY_BRANCH, self.requestid, pushmanager_url=self.get_base_url()) # Check if the request is already pickme'd for a push, and if # so also enqueue it to be checked for conflicts. request_push_id = GitQueue._get_push_for_request(self.requestid) if request_push_id: GitQueue.enqueue_request(GitTaskAction.TEST_PICKME_CONFLICT, self.requestid, pushmanager_url=self.get_base_url()) return self.redirect("/requests?user=%s" % self.request_user)
def test_no_requeue_added_pickmes(self): added_request = copy.deepcopy(self.fake_request) added_request['state'] = 'added' added_request['tags'] = 'no-conflicts' pickme_request = copy.deepcopy(self.fake_request) pickme_request['state'] = 'pickme' pickme_request['tags'] = 'no-conflicts' with nested( mock.patch( 'pushmanager.core.git.GitQueue.create_or_update_local_repo' ), mock.patch('pushmanager.core.git.GitQueue.git_merge_pickme'), mock.patch('pushmanager.core.git.git_branch_context_manager'), mock.patch('pushmanager.core.git.git_merge_context_manager'), mock.patch( 'pushmanager.core.git.GitQueue._get_request_ids_in_push'), mock.patch('pushmanager.core.git.GitQueue._get_request'), mock.patch('pushmanager.core.git.GitQueue.enqueue_request'), mock.patch( 'pushmanager.core.git.GitQueue._get_branch_sha_from_repo'), mock.patch( 'pushmanager.core.git.GitQueue._sha_exists_in_master'), ) as (update_repo, merge_pickme, branch_mgr, merge_mgr, ids_in_push, get_req, enqueue_req, get_sha, sha_in_master): def throw_gitexn(*args): raise GitException( "GitException!", gitret=1, giterr="some_stderr_string", gitout="some_stdout_string", ) merge_mgr.side_effect = throw_gitexn ids_in_push.return_value = [2] get_req.return_value = pickme_request get_sha.return_code = 'some_sha' sha_in_master.return_value = False conflicts, _ = GitQueue._test_pickme_conflict_pickme( 0, added_request, 'some_test_branch', '/local/repo/path', pushmanager_url, True) assert conflicts is False enqueue_req.assert_has_calls([ mock.call(GitTaskAction.TEST_PICKME_CONFLICT, 2, pushmanager_url=pushmanager_url, requeue=False) ])
def test_no_requeue_added_pickmes(self): added_request = copy.deepcopy(self.fake_request) added_request['state'] = 'added' added_request['tags'] = 'no-conflicts' pickme_request = copy.deepcopy(self.fake_request) pickme_request['state'] = 'pickme' pickme_request['tags'] = 'no-conflicts' with nested( mock.patch('pushmanager.core.git.GitQueue.create_or_update_local_repo'), mock.patch('pushmanager.core.git.GitQueue.git_merge_pickme'), mock.patch('pushmanager.core.git.git_branch_context_manager'), mock.patch('pushmanager.core.git.git_merge_context_manager'), mock.patch('pushmanager.core.git.GitQueue._get_request_ids_in_push'), mock.patch('pushmanager.core.git.GitQueue._get_request'), mock.patch('pushmanager.core.git.GitQueue.enqueue_request'), mock.patch('pushmanager.core.git.GitQueue._get_branch_sha_from_repo'), mock.patch('pushmanager.core.git.GitQueue._sha_exists_in_master'), ) as (update_repo, merge_pickme, branch_mgr, merge_mgr, ids_in_push, get_req, enqueue_req, get_sha, sha_in_master): def throw_gitexn(*args): raise GitException( "GitException!", gitret=1, giterr="some_stderr_string", gitout="some_stdout_string", ) merge_mgr.side_effect = throw_gitexn ids_in_push.return_value = [2] get_req.return_value = pickme_request get_sha.return_code = 'some_sha' sha_in_master.return_value = False conflicts, _ = GitQueue._test_pickme_conflict_pickme( 0, added_request, 'some_test_branch', '/local/repo/path', pushmanager_url, True ) assert conflicts is False enqueue_req.assert_has_calls([ mock.call(GitTaskAction.TEST_PICKME_CONFLICT, 2, pushmanager_url=pushmanager_url, requeue=False) ])
def on_db_complete(self, success, db_results): self.check_db_results(success, db_results) for request_id in self.request_ids: GitQueue.enqueue_request(GitTaskAction.TEST_PICKME_CONFLICT, request_id)
def post(self): if not self.current_user: return self.send_error(403) self.pushid = pushmanager.core.util.get_int_arg(self.request, "id") GitQueue.enqueue_request(GitTaskAction.TEST_ALL_PICKMES, self.pushid, pushmanager_url=self.get_base_url()) self.redirect("/push?id=%d" % self.pushid)
def post(self): if not self.current_user: return self.send_error(403) self.pushid = pushmanager.core.util.get_int_arg(self.request, 'id') GitQueue.enqueue_request(GitTaskAction.TEST_ALL_PICKMES, self.pushid, pushmanager_url=self.get_base_url()) self.redirect("/push?id=%d" % self.pushid)