diff options
Diffstat (limited to 'tests/__init__.py')
-rw-r--r-- | tests/__init__.py | 88 |
1 files changed, 71 insertions, 17 deletions
diff --git a/tests/__init__.py b/tests/__init__.py index 2e058f5..b93e388 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -8,6 +8,7 @@ import shutil import hashlib import logging import zipfile +import gettext import unittest import tempfile import subprocess @@ -16,17 +17,19 @@ from os.path import dirname, join, exists, abspath, isfile from M2Crypto import DSA from gevent import monkey -from sugar_network.toolkit import coroutine, http, mountpoints, Option, gbus +from sugar_network.toolkit import coroutine, http, mountpoints, Option, gbus, i18n, languages from sugar_network.toolkit.router import Router +from sugar_network.toolkit.coroutine import this +from sugar_network.db import files from sugar_network.client import IPCConnection, journal, routes as client_routes from sugar_network.client.routes import ClientRoutes, _Auth from sugar_network import db, client, node, toolkit, model from sugar_network.client import solver from sugar_network.model.user import User from sugar_network.model.context import Context -from sugar_network.model.release import Release +from sugar_network.model.post import Post from sugar_network.node.master import MasterRoutes -from sugar_network.node import stats_user, stats_node, obs, slave, downloads +from sugar_network.node import stats_user, obs, slave, downloads from requests import adapters @@ -41,6 +44,9 @@ monkey.patch_select() monkey.patch_ssl() monkey.patch_time() +gettext._default_localedir = join(root, 'data', 'locale') +languages.LANGUAGES = ['en', 'es', 'fr'] + def main(): shutil.rmtree(tmproot, ignore_errors=True) @@ -57,7 +63,7 @@ class Test(unittest.TestCase): os.environ['LANG'] = 'en_US' os.environ['LANGUAGE'] = 'en_US' - toolkit._default_langs = None + i18n._default_langs = None global tmpdir tmpdir = join(tmp_root or tmproot, '.'.join(self.id().split('.')[1:])) @@ -102,13 +108,10 @@ class Test(unittest.TestCase): mountpoints._connects.clear() mountpoints._found.clear() mountpoints._COMPLETE_MOUNT_TIMEOUT = .1 - stats_node.stats_node.value = False - stats_node.stats_node_step.value = 1 - stats_node.stats_node_rras.value = ['RRA:AVERAGE:0.5:1:60'] stats_user.stats_user.value = False stats_user.stats_user_step.value = 1 stats_user._user_cache.clear() - obs._client = None + obs._conn = None obs._repos = {'base': [], 'presolve': []} http._RECONNECTION_NUMBER = 0 toolkit.cachedir.value = tmpdir + '/tmp' @@ -122,8 +125,7 @@ class Test(unittest.TestCase): db.Volume.model = [ 'sugar_network.model.user', 'sugar_network.model.context', - 'sugar_network.model.artifact', - 'sugar_network.model.release', + 'sugar_network.model.post', 'sugar_network.model.report', ] @@ -137,10 +139,16 @@ class Test(unittest.TestCase): self.node = None self.client = None - self.forks = [] self.fork_num = fork_num + this.request = None + this.volume = None + this.call = None + this.broadcast = lambda x: x + + self.override_files() + def tearDown(self): self.stop_nodes() while db.Volume._flush_pool: @@ -150,6 +158,46 @@ class Test(unittest.TestCase): setattr(mod, name, old_handler) sys.stdout.flush() + def override_files(self): + os.makedirs('blobs') + self.blobs = {} + + def files_post(content, meta=None, digest_to_assert=None): + if hasattr(content, 'read'): + content = content.read() + digest = files.Digest(hash(content)) + if digest_to_assert: + assert digest == digest_to_assert + path = join('blobs', digest) + with file(path, 'w') as f: + f.write(content) + self.blobs[digest] = meta or {} + return toolkit.File(path, meta=meta, digest=digest) + + def files_update(digest, meta): + self.blobs.setdefault(digest, {}).update(meta) + + def files_get(digest): + if digest not in self.blobs: + return None + meta = toolkit.File(meta=self.blobs[digest]) + path = join('blobs', digest) + if exists(path): + meta.path = path + return meta + + def files_delete(digest): + path = join('blobs', digest) + if exists(path): + os.unlink(path) + if digest in self.blobs: + del self.blobs[digest] + + self.override(files, 'post', files_post) + self.override(files, 'update', files_update) + self.override(files, 'get', files_get) + self.override(files, 'delete', files_delete) + def stop_nodes(self): if self.client is not None: self.client.close() @@ -267,17 +315,20 @@ class Test(unittest.TestCase): def start_master(self, classes=None, routes=MasterRoutes): if classes is None: - classes = [User, Context, Release] + classes = [User, Context, Post] self.node_volume = db.Volume('master', classes) self.node_routes = routes('guid', self.node_volume) - self.node = coroutine.WSGIServer(('127.0.0.1', 8888), Router(self.node_routes)) + self.node_router = Router(self.node_routes) + self.node = coroutine.WSGIServer(('127.0.0.1', 8888), self.node_router) coroutine.spawn(self.node.serve_forever) coroutine.dispatch(.1) + this.volume = self.node_volume + this.call = self.node_router.call return self.node_volume def fork_master(self, classes=None, routes=MasterRoutes): if classes is None: - classes = [User, Context, Release] + classes = [User, Context] def node(): volume = db.Volume('master', classes) @@ -291,18 +342,19 @@ class Test(unittest.TestCase): def start_client(self, classes=None, routes=ClientRoutes): if classes is None: - classes = [User, Context, Release] + classes = [User, Context] volume = db.Volume('client', classes) self.client_routes = routes(volume, client.api_url.value) self.client = coroutine.WSGIServer( ('127.0.0.1', client.ipc_port.value), Router(self.client_routes)) coroutine.spawn(self.client.serve_forever) coroutine.dispatch() + this.volume = volume return volume def start_online_client(self, classes=None): if classes is None: - classes = [User, Context, Release] + classes = [User, Context] self.start_master(classes) volume = db.Volume('client', classes) self.client_routes = ClientRoutes(volume, client.api_url.value) @@ -311,6 +363,7 @@ class Test(unittest.TestCase): ('127.0.0.1', client.ipc_port.value), Router(self.client_routes)) coroutine.spawn(self.client.serve_forever) coroutine.dispatch() + this.volume = volume return volume def start_offline_client(self, resources=None): @@ -319,6 +372,7 @@ class Test(unittest.TestCase): server = coroutine.WSGIServer(('127.0.0.1', client.ipc_port.value), Router(self.client_routes)) coroutine.spawn(server.serve_forever) coroutine.dispatch() + this.volume = self.home_volume return IPCConnection() def restful_server(self, classes=None): @@ -337,7 +391,7 @@ class Test(unittest.TestCase): node.find_limit.value = 1024 db.index_write_queue.value = 10 - volume = db.Volume('remote', classes or [User, Context, Release]) + volume = db.Volume('remote', classes or [User, Context]) self.node_routes = MasterRoutes('guid', volume) httpd = coroutine.WSGIServer(('127.0.0.1', 8888), Router(self.node_routes)) try: |