def test_redirect_git_numbering(self): my_repo = model_helpers.create_repo() my_repo.project = 'chromium' my_repo.repo = 'chromium/src' my_repo.put() my_commit = model_helpers.create_commit() my_commit.project = my_repo.project my_commit.repo = my_repo.repo my_commit.put() my_numberings = model_helpers.create_numberings() my_numberings[1].project = my_repo.project my_numberings[1].repo = my_repo.repo for numbering in my_numberings: numbering.put() generated = controller.calculate_redirect('100') expected = models.Redirect( redirect_type=models.RedirectType.GIT_FROM_NUMBER, redirect_url=my_commit.redirect_url, repo=my_commit.repo, project=my_commit.project, git_sha=my_commit.git_sha, repo_url='https://chromium.googlesource.com/chromium/src/', ) self.assertEqual(generated, expected)
def test_redirect_numeric_log_fallback(self): # If we don't know about one of the numbers, assume they're short hashes. my_repo = model_helpers.create_repo() my_repo.project = 'chromium' my_repo.repo = 'chromium/src' my_repo.put() first_commit = model_helpers.create_commit() first_commit.git_sha = 'deadbeef' * 5 first_commit.project = my_repo.project first_commit.repo = my_repo.repo first_commit.put() my_numberings = model_helpers.create_numberings() my_numberings[1].git_sha = 'deadbeef' * 5 my_numberings[1].project = my_repo.project my_numberings[1].repo = my_repo.repo for numbering in my_numberings: numbering.put() query = '100..123456' generated = controller.calculate_redirect(query) expected = models.Redirect( redirect_type=models.RedirectType.GIT_LOG, redirect_url=( 'https://chromium.googlesource.com/chromium/src/+log/%s' % query), ) self.assertEquals(generated, expected)
def test_redirect_gerrit(self): query = 'c' generated = controller.calculate_redirect(query) expected = models.Redirect( redirect_type=models.RedirectType.GERRIT, redirect_url='https://chromium-review.googlesource.com/c', ) self.assertEquals(generated, expected)
def test_redirect_rietveld(self): query = '10000000' generated = controller.calculate_redirect(query) expected = models.Redirect( redirect_type=models.RedirectType.RIETVELD, redirect_url='https://codereview.chromium.org/%s' % query, ) self.assertEquals(generated, expected)
def test_redirect_short_git_sha(self): query = 'deadbeef' generated = controller.calculate_redirect(query) expected = models.Redirect( redirect_type=models.RedirectType.GIT_SHORT, redirect_url='https://chromium.googlesource.com/chromium/src/+/%s' % (query, ), ) self.assertEquals(generated, expected)
def test_redirect_unknown_full_sha(self): query = 'deadbb0b' * 5 generated = controller.calculate_redirect(query) expected = models.Redirect( redirect_type=models.RedirectType.GIT_SHORT, redirect_url='https://chromium.googlesource.com/chromium/src/+/%s' % ( query,), ) self.assertEquals(generated, expected)
def test_redirect_unknown_full_sha(self): query = 'deadbb0b' * 5 generated = controller.calculate_redirect(query) expected = models.Redirect( redirect_type=models.RedirectType.GIT_FULL, redirect_url='https://chromium.googlesource.com/chromium/src/+/%s' % (query, ), ) self.assertEquals(generated, expected)
def test_redirect_short_log(self): query = 'deadbeef..baddecaf' generated = controller.calculate_redirect(query) expected = models.Redirect( redirect_type=models.RedirectType.GIT_LOG, redirect_url=( 'https://chromium.googlesource.com/chromium/src/+log/%s' % query), ) self.assertEquals(generated, expected)
def test_redirect_svn_numbering_not_found(self): my_repo = model_helpers.create_repo() my_repo.put() my_commit = model_helpers.create_commit() my_commit.put() my_numberings = model_helpers.create_numberings() my_numberings[0].numbering_identifier = 'svn://svn.chromium.org/chrome' for numbering in my_numberings: numbering.put() generated = controller.calculate_redirect('101') self.assertEqual(generated, None)
def get(self, query, extra_paths): if self.request.referer: logging.info('referer is %s' % self.request.referer) redirect = controller.calculate_redirect(query) if redirect: redirect_url = str(redirect.redirect_url) if extra_paths: redirect_url = redirect_url + extra_paths if self.request.query_string: redirect_url = redirect_url + '?' + self.request.query_string logging.info('redirecting to %s' % redirect_url) self.redirect(redirect_url) else: self.abort(404)
def test_redirect_over_breakpoint(self): """Test that requesting a number above the SVN->git switch goes to git.""" my_repo = model_helpers.create_repo() my_repo.put() my_commit = model_helpers.create_commit() my_commit.put() my_numberings = model_helpers.create_numberings() my_numberings[0].numbering_identifier = 'svn://svn.chromium.org/chrome' my_numberings[0].number = 291562 for numbering in my_numberings: numbering.put() generated = controller.calculate_redirect('291562') self.assertEqual(generated, None)
def test_redirect_crazy_log(self): my_repo = model_helpers.create_repo() my_repo.put() my_commit = model_helpers.create_commit() my_commit.put() query = '%s^^!...FEEDCAFEB33F@' % my_commit.git_sha generated = controller.calculate_redirect(query) expected_url = 'https://cool.googlesource.com/cool_src/+log/%s' % query expected = models.Redirect( redirect_type=models.RedirectType.GIT_LOG, redirect_url=expected_url, repo=my_commit.repo, repo_url='https://cool.googlesource.com/cool_src/', ) self.assertEqual(generated, expected)
def test_redirect_numeric_log(self): # It's necessary to overwrite the model_helpers defaults with chromium/src # so that the numbering (which only works in chromium/src) can look up # the fake commits we create. my_repo = model_helpers.create_repo() my_repo.project = 'chromium' my_repo.repo = 'chromium/src' my_repo.put() first_commit = model_helpers.create_commit() first_commit.git_sha = 'deadbeef' * 5 first_commit.project = my_repo.project first_commit.repo = my_repo.repo first_commit.put() second_commit = model_helpers.create_commit() second_commit.git_sha = 'baddecaf' * 5 second_commit.project = my_repo.project second_commit.repo = my_repo.repo second_commit.put() my_numberings = model_helpers.create_numberings() my_numberings[1].git_sha = 'deadbeef' * 5 my_numberings[1].project = my_repo.project my_numberings[1].repo = my_repo.repo my_numberings.append( models.NumberingMap( numbering_type=models.NumberingType.COMMIT_POSITION, numbering_identifier='refs/heads/master', number=123456, project='chromium', repo='chromium/src', git_sha=second_commit.git_sha, redirect_url='https://crrev.com/%s' % second_commit.git_sha)) for numbering in my_numberings: numbering.put() generated = controller.calculate_redirect('100..123456') expected_url = ('https://chromium.googlesource.com/chromium/src/+log/' 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef..' 'baddecafbaddecafbaddecafbaddecafbaddecaf') expected = models.Redirect( redirect_type=models.RedirectType.GIT_LOG, redirect_url=expected_url, repo=first_commit.repo, repo_url='https://chromium.googlesource.com/chromium/src/', ) self.assertEqual(generated, expected)
def test_redirect_git_sha(self): my_repo = model_helpers.create_repo() my_repo.put() my_commit = model_helpers.create_commit() my_commit.put() generated = controller.calculate_redirect(my_commit.git_sha) expected = models.Redirect( redirect_type=models.RedirectType.GIT_FULL, redirect_url=my_commit.redirect_url, repo=my_commit.repo, project=my_commit.project, git_sha=my_commit.git_sha, repo_url='https://cool.googlesource.com/cool_src/', ) self.assertEqual(expected, generated)
def test_redirect_full_log(self): my_repo = model_helpers.create_repo() my_repo.put() first_commit = model_helpers.create_commit() first_commit.put() second_commit = model_helpers.create_commit() second_commit.git_sha = 'baddecaf' * 5 second_commit.put() query = '%s..%s' % (first_commit.git_sha, second_commit.git_sha) generated = controller.calculate_redirect(query) expected_url = 'https://cool.googlesource.com/cool_src/+log/%s' % query expected = models.Redirect( redirect_type=models.RedirectType.GIT_LOG, redirect_url=expected_url, repo=first_commit.repo, repo_url='https://cool.googlesource.com/cool_src/', ) self.assertEqual(generated, expected)
def test_redirect_svn_numbering(self): my_repo = model_helpers.create_repo() my_repo.put() my_commit = model_helpers.create_commit() my_commit.put() my_numberings = model_helpers.create_numberings() my_numberings[0].numbering_identifier = 'svn://svn.chromium.org/chrome' for numbering in my_numberings: numbering.put() generated = controller.calculate_redirect('100') expected = models.Redirect( redirect_type=models.RedirectType.GIT_FROM_NUMBER, redirect_url=my_commit.redirect_url, repo=my_commit.repo, project=my_commit.project, git_sha=my_commit.git_sha, repo_url='https://cool.googlesource.com/cool_src/', ) self.assertEqual(generated, expected)
def get_redirect(self, redirect): """Performs a 4-way redirect based on a query string. parameters: query: a svn revision / git commit position, full git sha, short git sha, or a rietveld issue number. return values: query: the query specified. redirect_type: whether this is a full git sha, short git sha, numbering, or rietveld issue. redirect_url: where to redirect the user. ---- the following only appear for full git shas and numbering redirects project: the googlecode project the repository is under. repo: the repository the commit it in. repo_url: the url to the repo (useful for constructing range queries). git_sha: the git sha of the commit. """ redirect = controller.calculate_redirect(redirect.query) if not redirect: raise endpoints.NotFoundException('commit not found.') # pragma: no cover return redirect
def get_redirect(self, redirect): """Performs a 4-way redirect based on a query string. parameters: query: a svn revision / git commit position, full git sha, short git sha, or a rietveld issue number. return values: query: the query specified. redirect_type: whether this is a full git sha, short git sha, numbering, or rietveld issue. redirect_url: where to redirect the user. ---- the following only appear for full git shas and numbering redirects project: the googlecode project the repository is under. repo: the repository the commit it in. repo_url: the url to the repo (useful for constructing range queries). git_sha: the git sha of the commit. """ redirect = controller.calculate_redirect(redirect.query) if not redirect: raise endpoints.NotFoundException( 'commit not found.') # pragma: no cover return redirect
def test_redirect_unknown(self): query = 'not_a_git_commit' generated = controller.calculate_redirect(query) self.assertEquals(generated, None)