From 793180533e4f19b364145c61939d6cad07dd851a Mon Sep 17 00:00:00 2001 From: drebs Date: Sun, 24 Jul 2016 07:56:52 -0300 Subject: [test] add pytest initial setup for performance tests --- testing/tests/perf/conftest.py | 143 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 testing/tests/perf/conftest.py (limited to 'testing/tests/perf/conftest.py') diff --git a/testing/tests/perf/conftest.py b/testing/tests/perf/conftest.py new file mode 100644 index 00000000..c66f2863 --- /dev/null +++ b/testing/tests/perf/conftest.py @@ -0,0 +1,143 @@ +import json +import os +import pytest +import requests +import signal +import time + +from hashlib import sha512 +from subprocess import call + +from leap.soledad.client import Soledad +from leap.soledad.common.couch import CouchDatabase + +from leap.common.events import server +server.ensure_server() + + +DEFAULT_UUID = '0' +DEFAULT_PASSPHRASE = '123' + +DEFAULT_URL = 'http://127.0.0.1:2424' +DEFAULT_PRIVKEY = 'soledad_privkey.pem' +DEFAULT_CERTKEY = 'soledad_certkey.pem' +DEFAULT_TOKEN = 'an-auth-token' + + +@pytest.fixture +def certificate(tmpdir): + privkey = os.path.join(tmpdir.strpath, 'privkey.pem') + certkey = os.path.join(tmpdir.strpath, 'certkey.pem') + call([ + 'openssl', + 'req', + '-x509', + '-sha256', + '-nodes', + '-days', '365', + '-newkey', 'rsa:2048', + '-config', './assets/cert_default.conf', # TODO: fix basedir + '-keyout', privkey, + '-out', certkey]) + return privkey, certkey + + +def get_pid(pidfile): + if not os.path.isfile(pidfile): + return 0 + try: + with open(pidfile) as f: + return int(f.read()) + except IOError: + return 0 + + +class CouchUserDatabase(object): + + def __init__(self): + url = 'http://127.0.0.1:5984/' + self._user_db_url = url + 'user-%s' % DEFAULT_UUID + self._token_db_url = url + _token_dbname() + self._shared_db_url = url + 'shared' + + def setup(self): + CouchDatabase.open_database( + url=self._user_db_url, create=True, replica_uid=None) + requests.put(self._token_db_url) + requests.put(self._shared_db_url) + self._add_token() + + def _add_token(self): + token = sha512(DEFAULT_TOKEN).hexdigest() + content = {'type': 'Token', 'user_id': DEFAULT_UUID} + requests.put( + self._token_db_url + '/' + token, data=json.dumps(content)) + + def teardown(self): + requests.delete(self._user_db_url) + requests.delete(self._token_db_url) + requests.delete(self._shared_db_url) + + +@pytest.fixture(scope='function') +def couchdb_user_db(request): + db = CouchUserDatabase() + db.setup() + request.addfinalizer(db.teardown) + return db + + +def _token_dbname(): + dbname = 'tokens_' + \ + str(int(time.time() / (30 * 24 * 3600))) + return dbname + + +class SoledadServer(object): + + def __init__(self, tmpdir): + self._pidfile = os.path.join(tmpdir.strpath, 'soledad-server.pid') + self._logfile = os.path.join(tmpdir.strpath, 'soledad-server.log') + + def start(self): + call([ + 'twistd', + '--logfile=%s' % self._logfile, + '--pidfile=%s' % self._pidfile, + 'web', + '--wsgi=leap.soledad.server.application', + '--port=2424' + ]) + + def stop(self): + pid = get_pid(self._pidfile) + os.kill(pid, signal.SIGKILL) + + +@pytest.fixture +def soledad_server(tmpdir, couchdb_user_db, request): + server = SoledadServer(tmpdir) + server.start() + request.addfinalizer(server.stop) + return server + + +@pytest.fixture() +def soledad_client(tmpdir, soledad_server): + uuid = DEFAULT_UUID + passphrase = DEFAULT_PASSPHRASE + secrets_path = os.path.join(tmpdir.strpath, '%s.secret' % uuid) + local_db_path = os.path.join(tmpdir.strpath, '%s.db' % uuid) + server_url = DEFAULT_URL + token = DEFAULT_TOKEN + + # get a soledad instance + return Soledad( + uuid, + unicode(passphrase), + secrets_path=secrets_path, + local_db_path=local_db_path, + server_url=server_url, + cert_file=None, + auth_token=token, + defer_encryption=True) -- cgit v1.2.3