##// END OF EJS Templates
release: Bump version 5.1.0 to 5.1.1
release: Bump version 5.1.0 to 5.1.1

File last commit:

r1249:5745b11f default
r1269:20bfc127 v5.1.1 stable
Show More
test_scm_app.py
87 lines | 2.9 KiB | text/x-python | PythonLexer
# RhodeCode VCSServer provides access to different vcs backends via network.
# Copyright (C) 2014-2023 RhodeCode GmbH
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import os
import mercurial.hg
import mercurial.ui
import mercurial.error
import mock
import pytest
import webtest
from vcsserver import scm_app
from vcsserver.lib.str_utils import ascii_bytes
def test_hg_does_not_accept_invalid_cmd(tmpdir):
repo = mercurial.hg.repository(mercurial.ui.ui(), ascii_bytes(str(tmpdir)), create=True)
app = webtest.TestApp(scm_app.HgWeb(repo))
response = app.get('/repo?cmd=invalidcmd', expect_errors=True)
assert response.status_int == 400
def test_create_hg_wsgi_app_requirement_error(tmpdir):
repo = mercurial.hg.repository(mercurial.ui.ui(), ascii_bytes(str(tmpdir)), create=True)
config = (
('paths', 'default', ''),
)
with mock.patch('vcsserver.scm_app.HgWeb') as hgweb_mock:
hgweb_mock.side_effect = mercurial.error.RequirementError()
with pytest.raises(Exception):
scm_app.create_hg_wsgi_app(str(tmpdir), repo, config)
def test_git_returns_not_found(tmpdir):
app = webtest.TestApp(
scm_app.GitHandler(str(tmpdir), 'repo_name', 'git', False, {}))
response = app.get('/repo_name/inforefs?service=git-upload-pack',
expect_errors=True)
assert response.status_int == 404
def test_git(tmpdir):
for dir_name in ('config', 'head', 'info', 'objects', 'refs'):
tmpdir.mkdir(dir_name)
app = webtest.TestApp(
scm_app.GitHandler(str(tmpdir), 'repo_name', 'git', False, {}))
# We set service to git-upload-packs to trigger a 403
response = app.get('/repo_name/inforefs?service=git-upload-packs',
expect_errors=True)
assert response.status_int == 403
def test_git_fallbacks_to_git_folder(tmpdir):
tmpdir.mkdir('.git')
for dir_name in ('config', 'head', 'info', 'objects', 'refs'):
tmpdir.mkdir(os.path.join('.git', dir_name))
app = webtest.TestApp(
scm_app.GitHandler(str(tmpdir), 'repo_name', 'git', False, {}))
# We set service to git-upload-packs to trigger a 403
response = app.get('/repo_name/inforefs?service=git-upload-packs',
expect_errors=True)
assert response.status_int == 403