anki-sync-server/tests/helpers/mock_servers.py

59 lines
1.8 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2017-11-04 10:33:08 +08:00
import io
import logging
2017-11-04 10:33:08 +08:00
import types
2017-10-31 02:56:17 +08:00
from anki.sync import HttpSyncer, RemoteServer, RemoteMediaServer
2017-11-04 09:38:17 +08:00
class MockServerConnection:
"""
Mock for HttpSyncer's con attribute, a httplib2 connection. All requests
that would normally got to the remote server will be redirected to our
server_app_to_test object.
"""
def __init__(self, server_app_to_test):
self.test_app = server_app_to_test
2017-11-04 10:33:08 +08:00
def post(self, url, data, headers):
logging.debug("Posting to URI '{}'.".format(url))
2017-11-05 00:38:29 +08:00
r = self.test_app.post(url, params=data.read(), headers=headers, status="*")
return types.SimpleNamespace(status_code=r.status_int, body=r.body)
2017-11-04 10:33:08 +08:00
def streamContent(self, r):
return r.body
class MockRemoteServer(RemoteServer):
"""
Mock for RemoteServer. All communication to our remote counterpart is
routed to our TestApp object.
"""
def __init__(self, hkey, server_test_app):
# Create a custom connection object we will use to communicate with our
# 'remote' server counterpart.
connection = MockServerConnection(server_test_app)
HttpSyncer.__init__(self, hkey, connection)
def syncURL(self): # Overrides RemoteServer.syncURL().
return "/sync/"
class MockRemoteMediaServer(RemoteMediaServer):
"""
Mock for RemoteMediaServer. All communication to our remote counterpart is
routed to our TestApp object.
"""
def __init__(self, col, hkey, server_test_app):
# Create a custom connection object we will use to communicate with our
# 'remote' server counterpart.
connection = MockServerConnection(server_test_app)
HttpSyncer.__init__(self, hkey, connection)
def syncURL(self): # Overrides RemoteServer.syncURL().
return "/msync/"