fix: removed old scripts
This commit is contained in:
parent
7406c073dc
commit
bf83236cf8
4 changed files with 0 additions and 407 deletions
|
|
@ -1,17 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
psql -U postgres -h localhost -c 'drop database if exists rhodecode;'
|
|
||||||
psql -U postgres -h localhost -c 'create database rhodecode;'
|
|
||||||
rc-setup-app rc.ini --force-yes --user=marcink --password=qweqwe --email=marcin@python-blog.com --repos=/home/marcink/repos --no-public-access
|
|
||||||
API_KEY=`psql -R " " -A -U postgres -h localhost -c "select api_key from users where admin=TRUE" -d rhodecode | awk '{print $2}'`
|
|
||||||
echo "run those after running server"
|
|
||||||
paster serve rc.ini --pid-file=rc.pid --daemon
|
|
||||||
sleep 3
|
|
||||||
rhodecode-api --apikey=$API_KEY --apihost=http://127.0.0.1:5001 create_user username:demo1 password:qweqwe email:demo1@rhodecode.org
|
|
||||||
rhodecode-api --apikey=$API_KEY --apihost=http://127.0.0.1:5001 create_user username:demo2 password:qweqwe email:demo2@rhodecode.org
|
|
||||||
rhodecode-api --apikey=$API_KEY --apihost=http://127.0.0.1:5001 create_user username:demo3 password:qweqwe email:demo3@rhodecode.org
|
|
||||||
rhodecode-api --apikey=$API_KEY --apihost=http://127.0.0.1:5001 create_user_group group_name:demo12
|
|
||||||
rhodecode-api --apikey=$API_KEY --apihost=http://127.0.0.1:5001 add_user_to_user_group usergroupid:demo12 userid:demo1
|
|
||||||
rhodecode-api --apikey=$API_KEY --apihost=http://127.0.0.1:5001 add_user_to_user_group usergroupid:demo12 userid:demo2
|
|
||||||
echo "killing server"
|
|
||||||
kill `cat rc.pid`
|
|
||||||
rm rc.pid
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }'
|
|
||||||
|
|
@ -1,201 +0,0 @@
|
||||||
# Copyright (C) 2010-2024 RhodeCode GmbH
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
# (only), as published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# 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 Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# This program is dual-licensed. If you wish to learn more about the
|
|
||||||
# RhodeCode Enterprise Edition, including its added features, Support services,
|
|
||||||
# and proprietary license terms, please see https://rhodecode.com/licenses/
|
|
||||||
|
|
||||||
"""
|
|
||||||
Test suite for making push/pull operations
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import shutil
|
|
||||||
import logging
|
|
||||||
from os.path import join as jn
|
|
||||||
from os.path import dirname as dn
|
|
||||||
|
|
||||||
from tempfile import _RandomNameSequence
|
|
||||||
from subprocess import Popen, PIPE
|
|
||||||
|
|
||||||
from rhodecode.lib.utils2 import engine_from_config
|
|
||||||
from rhodecode.lib.auth import get_crypt_password
|
|
||||||
from rhodecode.model import init_model
|
|
||||||
from rhodecode.model import meta
|
|
||||||
from rhodecode.model.db import User, Repository
|
|
||||||
|
|
||||||
from rhodecode.tests import TESTS_TMP_PATH, HG_REPO
|
|
||||||
|
|
||||||
rel_path = dn(dn(dn(dn(os.path.abspath(__file__)))))
|
|
||||||
|
|
||||||
|
|
||||||
USER = 'test_admin'
|
|
||||||
PASS = 'test12'
|
|
||||||
HOST = 'rc.local'
|
|
||||||
METHOD = 'pull'
|
|
||||||
DEBUG = True
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class Command(object):
|
|
||||||
|
|
||||||
def __init__(self, cwd):
|
|
||||||
self.cwd = cwd
|
|
||||||
|
|
||||||
def execute(self, cmd, *args):
|
|
||||||
"""Runs command on the system with given ``args``.
|
|
||||||
"""
|
|
||||||
|
|
||||||
command = cmd + ' ' + ' '.join(args)
|
|
||||||
log.debug('Executing %s', command)
|
|
||||||
if DEBUG:
|
|
||||||
print(command)
|
|
||||||
p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, cwd=self.cwd)
|
|
||||||
stdout, stderr = p.communicate()
|
|
||||||
if DEBUG:
|
|
||||||
print('{} {}'.format(stdout, stderr))
|
|
||||||
return stdout, stderr
|
|
||||||
|
|
||||||
|
|
||||||
def get_session():
|
|
||||||
conf = {}
|
|
||||||
engine = engine_from_config(conf, 'sqlalchemy.db1.')
|
|
||||||
init_model(engine)
|
|
||||||
sa = meta.Session
|
|
||||||
return sa
|
|
||||||
|
|
||||||
|
|
||||||
def create_test_user(force=True):
|
|
||||||
print('creating test user')
|
|
||||||
sa = get_session()
|
|
||||||
|
|
||||||
user = sa.query(User).filter(User.username == USER).scalar()
|
|
||||||
|
|
||||||
if force and user is not None:
|
|
||||||
print('removing current user')
|
|
||||||
for repo in sa.query(Repository).filter(Repository.user == user).all():
|
|
||||||
sa.delete(repo)
|
|
||||||
sa.delete(user)
|
|
||||||
sa.commit()
|
|
||||||
|
|
||||||
if user is None or force:
|
|
||||||
print('creating new one')
|
|
||||||
new_usr = User()
|
|
||||||
new_usr.username = USER
|
|
||||||
new_usr.password = get_crypt_password(PASS)
|
|
||||||
new_usr.email = 'mail@mail.com'
|
|
||||||
new_usr.name = 'test'
|
|
||||||
new_usr.lastname = 'lasttestname'
|
|
||||||
new_usr.active = True
|
|
||||||
new_usr.admin = True
|
|
||||||
sa.add(new_usr)
|
|
||||||
sa.commit()
|
|
||||||
|
|
||||||
print('done')
|
|
||||||
|
|
||||||
|
|
||||||
def create_test_repo(force=True):
|
|
||||||
print('creating test repo')
|
|
||||||
from rhodecode.model.repo import RepoModel
|
|
||||||
sa = get_session()
|
|
||||||
|
|
||||||
user = sa.query(User).filter(User.username == USER).scalar()
|
|
||||||
if user is None:
|
|
||||||
raise Exception('user not found')
|
|
||||||
|
|
||||||
repo = sa.query(Repository).filter(Repository.repo_name == HG_REPO).scalar()
|
|
||||||
|
|
||||||
if repo is None:
|
|
||||||
print('repo not found creating')
|
|
||||||
|
|
||||||
form_data = {'repo_name': HG_REPO,
|
|
||||||
'repo_type': 'hg',
|
|
||||||
'private':False,
|
|
||||||
'clone_uri': '' }
|
|
||||||
rm = RepoModel(sa)
|
|
||||||
rm.base_path = '/home/hg'
|
|
||||||
rm.create(form_data, user)
|
|
||||||
|
|
||||||
print('done')
|
|
||||||
|
|
||||||
|
|
||||||
def get_anonymous_access():
|
|
||||||
sa = get_session()
|
|
||||||
return sa.query(User).filter(User.username == 'default').one().active
|
|
||||||
|
|
||||||
|
|
||||||
#==============================================================================
|
|
||||||
# TESTS
|
|
||||||
#==============================================================================
|
|
||||||
def test_clone_with_credentials(repo=HG_REPO, method=METHOD,
|
|
||||||
seq=None, backend='hg', check_output=True):
|
|
||||||
cwd = path = jn(TESTS_TMP_PATH, repo)
|
|
||||||
|
|
||||||
if seq is None:
|
|
||||||
seq = next(_RandomNameSequence())
|
|
||||||
|
|
||||||
try:
|
|
||||||
shutil.rmtree(path, ignore_errors=True)
|
|
||||||
os.makedirs(path)
|
|
||||||
except OSError:
|
|
||||||
raise
|
|
||||||
|
|
||||||
clone_url = 'http://%(user)s:%(pass)s@%(host)s/%(cloned_repo)s' % \
|
|
||||||
{'user': USER,
|
|
||||||
'pass': PASS,
|
|
||||||
'host': HOST,
|
|
||||||
'cloned_repo': repo, }
|
|
||||||
|
|
||||||
dest = path + seq
|
|
||||||
if method == 'pull':
|
|
||||||
stdout, stderr = Command(cwd).execute(backend, method, '--cwd', dest, clone_url)
|
|
||||||
else:
|
|
||||||
stdout, stderr = Command(cwd).execute(backend, method, clone_url, dest)
|
|
||||||
if check_output:
|
|
||||||
if backend == 'hg':
|
|
||||||
assert """adding file changes""" in stdout, 'no messages about cloning'
|
|
||||||
assert """abort""" not in stderr, 'got error from clone'
|
|
||||||
elif backend == 'git':
|
|
||||||
assert """Cloning into""" in stdout, 'no messages about cloning'
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
try:
|
|
||||||
create_test_user(force=False)
|
|
||||||
seq = None
|
|
||||||
import time
|
|
||||||
|
|
||||||
try:
|
|
||||||
METHOD = sys.argv[3]
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
|
||||||
backend = sys.argv[4]
|
|
||||||
except Exception:
|
|
||||||
backend = 'hg'
|
|
||||||
|
|
||||||
if METHOD == 'pull':
|
|
||||||
seq = next(_RandomNameSequence())
|
|
||||||
test_clone_with_credentials(repo=sys.argv[1], method='clone',
|
|
||||||
seq=seq, backend=backend)
|
|
||||||
s = time.time()
|
|
||||||
for i in range(1, int(sys.argv[2]) + 1):
|
|
||||||
print('take {}'.format(i))
|
|
||||||
test_clone_with_credentials(repo=sys.argv[1], method=METHOD,
|
|
||||||
seq=seq, backend=backend)
|
|
||||||
print('time taken %.4f' % (time.time() - s))
|
|
||||||
except Exception as e:
|
|
||||||
sys.exit('stop on %s' % e)
|
|
||||||
|
|
@ -1,188 +0,0 @@
|
||||||
# Copyright (C) 2010-2024 RhodeCode GmbH
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
# (only), as published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# 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 Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# This program is dual-licensed. If you wish to learn more about the
|
|
||||||
# RhodeCode Enterprise Edition, including its added features, Support services,
|
|
||||||
# and proprietary license terms, please see https://rhodecode.com/licenses/
|
|
||||||
|
|
||||||
"""
|
|
||||||
Test for crawling a project for memory usage
|
|
||||||
This should be runned just as regular script together
|
|
||||||
with a watch script that will show memory usage.
|
|
||||||
|
|
||||||
watch -n1 ./rhodecode/tests/mem_watch
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
import cookielib
|
|
||||||
import urllib.request
|
|
||||||
import urllib.parse
|
|
||||||
import urllib.error
|
|
||||||
import urllib.request
|
|
||||||
import urllib.error
|
|
||||||
import urllib.parse
|
|
||||||
import time
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
from os.path import join as jn
|
|
||||||
from os.path import dirname as dn
|
|
||||||
from sqlalchemy.util import OrderedSet
|
|
||||||
|
|
||||||
__here__ = os.path.abspath(__file__)
|
|
||||||
__root__ = dn(dn(dn(__here__)))
|
|
||||||
sys.path.append(__root__)
|
|
||||||
|
|
||||||
from rhodecode.lib import vcs
|
|
||||||
from rhodecode.lib.vcs.exceptions import RepositoryError
|
|
||||||
|
|
||||||
PASES = 3
|
|
||||||
HOST = 'http://127.0.0.1'
|
|
||||||
PORT = 5001
|
|
||||||
BASE_URI = '%s:%s/' % (HOST, PORT)
|
|
||||||
|
|
||||||
if len(sys.argv) == 2:
|
|
||||||
BASE_URI = sys.argv[1]
|
|
||||||
|
|
||||||
if not BASE_URI.endswith('/'):
|
|
||||||
BASE_URI += '/'
|
|
||||||
|
|
||||||
print('Crawling @ %s' % BASE_URI)
|
|
||||||
BASE_URI += '%s'
|
|
||||||
PROJECT_PATH = jn('/', 'home', 'marcink', 'repos')
|
|
||||||
PROJECTS = [
|
|
||||||
#'linux-magx-pbranch',
|
|
||||||
'CPython',
|
|
||||||
'rhodecode_tip',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
cj = cookielib.FileCookieJar('/tmp/rc_test_cookie.txt')
|
|
||||||
o = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
|
|
||||||
o.addheaders = [
|
|
||||||
('User-agent', 'rhodecode-crawler'),
|
|
||||||
('Accept-Language', 'en - us, en;q = 0.5')
|
|
||||||
]
|
|
||||||
|
|
||||||
urllib.request.install_opener(o)
|
|
||||||
|
|
||||||
|
|
||||||
def _get_repo(proj):
|
|
||||||
if isinstance(proj, str):
|
|
||||||
repo = vcs.get_repo(jn(PROJECT_PATH, proj))
|
|
||||||
proj = proj
|
|
||||||
else:
|
|
||||||
repo = proj
|
|
||||||
proj = repo.name
|
|
||||||
|
|
||||||
return repo, proj
|
|
||||||
|
|
||||||
|
|
||||||
def test_changelog_walk(proj, pages=100):
|
|
||||||
repo, proj = _get_repo(proj)
|
|
||||||
|
|
||||||
total_time = 0
|
|
||||||
for i in range(1, pages):
|
|
||||||
|
|
||||||
page = '/'.join((proj, 'changelog',))
|
|
||||||
|
|
||||||
full_uri = (BASE_URI % page) + '?' + urllib.parse.urlencode({'page': i})
|
|
||||||
s = time.time()
|
|
||||||
f = o.open(full_uri)
|
|
||||||
|
|
||||||
assert f.url == full_uri, 'URL:%s does not match %s' % (f.url, full_uri)
|
|
||||||
|
|
||||||
size = len(f.read())
|
|
||||||
e = time.time() - s
|
|
||||||
total_time += e
|
|
||||||
print('visited %s size:%s req:%s ms' % (full_uri, size, e))
|
|
||||||
|
|
||||||
print('total_time {}'.format(total_time))
|
|
||||||
print('average on req {}'.format(total_time / float(pages)))
|
|
||||||
|
|
||||||
|
|
||||||
def test_commit_walk(proj, limit=None):
|
|
||||||
repo, proj = _get_repo(proj)
|
|
||||||
|
|
||||||
print('processing', jn(PROJECT_PATH, proj))
|
|
||||||
total_time = 0
|
|
||||||
|
|
||||||
cnt = 0
|
|
||||||
for i in repo:
|
|
||||||
cnt += 1
|
|
||||||
raw_cs = '/'.join((proj, 'changeset', i.raw_id))
|
|
||||||
if limit and limit == cnt:
|
|
||||||
break
|
|
||||||
|
|
||||||
full_uri = (BASE_URI % raw_cs)
|
|
||||||
print('%s visiting %s\%s' % (cnt, full_uri, i))
|
|
||||||
s = time.time()
|
|
||||||
f = o.open(full_uri)
|
|
||||||
size = len(f.read())
|
|
||||||
e = time.time() - s
|
|
||||||
total_time += e
|
|
||||||
print('%s visited %s\%s size:%s req:%s ms' % (cnt, full_uri, i, size, e))
|
|
||||||
|
|
||||||
print('total_time {}'.format(total_time))
|
|
||||||
print('average on req {}'.format(total_time / float(cnt)))
|
|
||||||
|
|
||||||
|
|
||||||
def test_files_walk(proj, limit=100):
|
|
||||||
repo, proj = _get_repo(proj)
|
|
||||||
|
|
||||||
print('processing {}'.format(jn(PROJECT_PATH, proj)))
|
|
||||||
total_time = 0
|
|
||||||
|
|
||||||
paths_ = OrderedSet([''])
|
|
||||||
try:
|
|
||||||
tip = repo.get_commit('tip')
|
|
||||||
for topnode, dirs, files in tip.walk('/'):
|
|
||||||
|
|
||||||
for dir in dirs:
|
|
||||||
paths_.add(dir.path)
|
|
||||||
for f in dir:
|
|
||||||
paths_.add(f.path)
|
|
||||||
|
|
||||||
for f in files:
|
|
||||||
paths_.add(f.path)
|
|
||||||
|
|
||||||
except RepositoryError as e:
|
|
||||||
pass
|
|
||||||
|
|
||||||
cnt = 0
|
|
||||||
for f in paths_:
|
|
||||||
cnt += 1
|
|
||||||
if limit and limit == cnt:
|
|
||||||
break
|
|
||||||
|
|
||||||
file_path = '/'.join((proj, 'files', 'tip', f))
|
|
||||||
full_uri = (BASE_URI % file_path)
|
|
||||||
print('%s visiting %s' % (cnt, full_uri))
|
|
||||||
s = time.time()
|
|
||||||
f = o.open(full_uri)
|
|
||||||
size = len(f.read())
|
|
||||||
e = time.time() - s
|
|
||||||
total_time += e
|
|
||||||
print('%s visited OK size:%s req:%s ms' % (cnt, size, e))
|
|
||||||
|
|
||||||
print('total_time {}'.format(total_time))
|
|
||||||
print('average on req {}'.format(total_time / float(cnt)))
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
for path in PROJECTS:
|
|
||||||
repo = vcs.get_repo(jn(PROJECT_PATH, path))
|
|
||||||
for i in range(PASES):
|
|
||||||
print('PASS %s/%s' % (i, PASES))
|
|
||||||
test_changelog_walk(repo, pages=80)
|
|
||||||
test_commit_walk(repo, limit=100)
|
|
||||||
test_files_walk(repo, limit=100)
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue