示例#1
0
    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'])
                        )
                ])
示例#2
0
    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()
示例#3
0
    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']))
                ])
示例#4
0
 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())
示例#5
0
    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)
示例#6
0
 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()
         )
示例#7
0
    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)
示例#8
0
 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()
     )
示例#9
0
    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)
示例#10
0
    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']
示例#11
0
    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']
示例#12
0
    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)
示例#13
0
    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)
示例#14
0
 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)
示例#15
0
 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)
示例#16
0
    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)
示例#17
0
    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 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)
            ])
示例#19
0
    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)
            ])
示例#20
0
 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)
示例#21
0
 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)
示例#22
0
 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)