diff --git a/tests/__init__.py b/tests/__init__.py index df67c5c..f4be6e0 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,6 +1,7 @@ import vdirsyncer.log vdirsyncer.log.set_level(vdirsyncer.log.logging.DEBUG) + def normalize_item(item): # - X-RADICALE-NAME is used by radicale, because hrefs don't really exist # in their filesystem backend @@ -18,3 +19,27 @@ def normalize_item(item): def assert_item_equals(a, b): assert normalize_item(a) == normalize_item(b) + + +def log_request(method, url, data, headers): + print(method) + print(url) + print(data) + print(headers) + + +def log_response(r): + print(r.status_code) + print(r.text) + + +def requests_mock(monkeypatch): + '''It is easier than setting up the logging module!''' + import requests.sessions + old_func = requests.sessions.Session.request + def mock_request(self, method, url, data=None, headers=None, **kw): + log_request(method, url, data, headers) + r = old_func(self, method, url, data=data, headers=headers, **kw) + log_response(r) + return r + monkeypatch.setattr('requests.sessions.Session.request', mock_request) diff --git a/tests/storage/dav/_owncloud.py b/tests/storage/dav/_owncloud.py index 794b63a..2b81e07 100644 --- a/tests/storage/dav/_owncloud.py +++ b/tests/storage/dav/_owncloud.py @@ -12,18 +12,41 @@ from vdirsyncer.utils import expand_path import subprocess import os +import time +import pytest +import requests +from tests import requests_mock owncloud_repo = expand_path(os.path.join( os.path.dirname(__file__), '../../../owncloud-testserver/' )) +php_sh = os.path.abspath(os.path.join(owncloud_repo, 'php.sh')) + + +def wait(): + for i in range(10): + try: + requests.get('http://127.0.0.1:8080/') + except requests.exceptions.ConnectionError: + time.sleep(1) + else: + return True + return False + class ServerMixin(object): storage_class = None wsgi_teardown = None - def setup_method(self, method): + @pytest.fixture(autouse=True) + def setup(self, monkeypatch, xprocess): + def preparefunc(cwd): + return wait, ['sh', php_sh] + + xprocess.ensure('owncloud_server', preparefunc) subprocess.check_call([os.path.join(owncloud_repo, 'reset.sh')]) + requests_mock(monkeypatch) def get_storage_args(self, collection='test'): url = 'http://127.0.0.1:8080' diff --git a/tests/storage/dav/_radicale.py b/tests/storage/dav/_radicale.py index 5ac49b3..052fdf4 100644 --- a/tests/storage/dav/_radicale.py +++ b/tests/storage/dav/_radicale.py @@ -18,6 +18,8 @@ import urlparse import shutil import pytest +from tests import log_request, log_response + from werkzeug.test import Client from werkzeug.wrappers import BaseResponse as WerkzeugResponse @@ -125,10 +127,11 @@ class ServerMixin(object): def request(self, method, url, data=None, headers=None, **kw): path = urlparse.urlparse(url).path + log_request(method, url, data, headers) assert isinstance(data, bytes) or data is None - r = c.open(path=path, method=method, data=data, - headers=headers) - r = Response(r) + r = Response(c.open(path=path, method=method, data=data, + headers=headers)) + log_response(r) return r monkeypatch.setattr('requests.sessions.Session.request', request) diff --git a/tests/storage/dav/conftest.py b/tests/storage/dav/conftest.py deleted file mode 100644 index a7fe8cf..0000000 --- a/tests/storage/dav/conftest.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -''' - vdirsyncer.tests.storage.dav.conftest - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - :copyright: (c) 2014 Markus Unterwaditzer - :license: MIT, see LICENSE for more details. -''' - -import os -import pytest -import requests -import requests.exceptions -import time - -dav_server = os.environ.get('DAV_SERVER', '').strip() or 'radicale_filesystem' -php_sh = os.path.abspath(os.path.join( - os.path.dirname(__file__), '../../../owncloud-testserver/php.sh' -)) - - -def wait(): - for i in range(10): - try: - requests.get('http://127.0.0.1:8080/') - except requests.exceptions.ConnectionError: - time.sleep(1) - else: - return True - return False - - -if dav_server == 'owncloud': - @pytest.fixture(autouse=True) - def start_owncloud_server(xprocess): - def preparefunc(cwd): - return wait, ['sh', php_sh] - - xprocess.ensure('owncloud_server', preparefunc)