diff options
Diffstat (limited to 'common/src/leap/soledad')
5 files changed, 74 insertions, 45 deletions
diff --git a/common/src/leap/soledad/common/tests/test_couch_operations_atomicity.py b/common/src/leap/soledad/common/tests/test_couch_operations_atomicity.py index 3fe6441b..8f7af8c9 100644 --- a/common/src/leap/soledad/common/tests/test_couch_operations_atomicity.py +++ b/common/src/leap/soledad/common/tests/test_couch_operations_atomicity.py @@ -30,7 +30,7 @@ from leap.soledad.common.couch import CouchDatabase, CouchServerState from leap.soledad.common.tests.util import ( make_token_soledad_app, make_soledad_document_for_test, - token_soledad_sync_target, + soledad_sync_target, ) from leap.soledad.common.tests.test_couch import CouchDBTestCase from leap.soledad.common.tests.u1db_tests import TestCaseWithServer @@ -53,7 +53,7 @@ class CouchAtomicityTestCase(CouchDBTestCase, TestCaseWithServer): make_document_for_test = make_soledad_document_for_test - sync_target = token_soledad_sync_target + sync_target = soledad_sync_target def _soledad_instance(self, user='user-uuid', passphrase=u'123', prefix='', diff --git a/common/src/leap/soledad/common/tests/test_server.py b/common/src/leap/soledad/common/tests/test_server.py index bfb4a225..848b68e9 100644 --- a/common/src/leap/soledad/common/tests/test_server.py +++ b/common/src/leap/soledad/common/tests/test_server.py @@ -36,7 +36,7 @@ from leap.soledad.common.tests.test_couch import CouchDBTestCase from leap.soledad.common.tests.util import ( make_token_soledad_app, make_soledad_document_for_test, - token_soledad_sync_target, + soledad_sync_target, BaseSoledadTest, ) @@ -284,7 +284,7 @@ class EncryptedSyncTestCase( make_document_for_test = make_soledad_document_for_test - sync_target = token_soledad_sync_target + sync_target = soledad_sync_target def _soledad_instance(self, user=None, passphrase=u'123', prefix='', @@ -484,7 +484,7 @@ class LockResourceTestCase( make_document_for_test = make_soledad_document_for_test - sync_target = token_soledad_sync_target + sync_target = soledad_sync_target def setUp(self): # the order of the following initializations is crucial because of diff --git a/common/src/leap/soledad/common/tests/test_sync.py b/common/src/leap/soledad/common/tests/test_sync.py index dd920b64..9440ae11 100644 --- a/common/src/leap/soledad/common/tests/test_sync.py +++ b/common/src/leap/soledad/common/tests/test_sync.py @@ -37,7 +37,7 @@ from leap.soledad.common.tests.u1db_tests import simple_doc from leap.soledad.common.tests.u1db_tests import test_sync from leap.soledad.common.tests.util import make_token_soledad_app from leap.soledad.common.tests.util import make_soledad_document_for_test -from leap.soledad.common.tests.util import token_soledad_sync_target +from leap.soledad.common.tests.util import soledad_sync_target from leap.soledad.common.tests.util import BaseSoledadTest from leap.soledad.common.tests.util import SoledadWithCouchServerMixin from leap.soledad.common.tests.test_couch import CouchDBTestCase @@ -56,7 +56,7 @@ class InterruptableSyncTestCase( make_document_for_test = make_soledad_document_for_test - sync_target = token_soledad_sync_target + sync_target = soledad_sync_target def make_app(self): self.request_state = couch.CouchServerState(self._couch_url) diff --git a/common/src/leap/soledad/common/tests/test_sync_target.py b/common/src/leap/soledad/common/tests/test_sync_target.py index 1fd29b3e..b6b8dc07 100644 --- a/common/src/leap/soledad/common/tests/test_sync_target.py +++ b/common/src/leap/soledad/common/tests/test_sync_target.py @@ -28,6 +28,7 @@ import shutil from uuid import uuid4 from testscenarios import TestWithScenarios +from twisted.internet import defer from urlparse import urljoin from leap.soledad.client import http_target as target @@ -44,11 +45,10 @@ from leap.soledad.common.tests.util import make_sqlcipher_database_for_test from leap.soledad.common.tests.util import make_soledad_app from leap.soledad.common.tests.util import make_token_soledad_app from leap.soledad.common.tests.util import make_soledad_document_for_test -from leap.soledad.common.tests.util import token_soledad_sync_target +from leap.soledad.common.tests.util import soledad_sync_target from leap.soledad.common.tests.util import BaseSoledadTest from leap.soledad.common.tests.util import SoledadWithCouchServerMixin from leap.soledad.common.tests.util import ADDRESS -from leap.soledad.common.tests.u1db_tests import test_remote_sync_target from leap.soledad.common.tests.u1db_tests import test_sync # ----------------------------------------------------------------------------- @@ -146,7 +146,7 @@ class TestSoledadParseReceivedDocResponse( def make_local_db_and_soledad_target(test, path='test'): - test.startServer() + test.startTwistedServer() db = test.request_state._create_database(os.path.basename(path)) st = target.SoledadHTTPSyncTarget.connect( test.getURL(path), crypto=test._soledad._crypto) @@ -162,7 +162,7 @@ def make_local_db_and_token_soledad_target(test): class TestSoledadSyncTarget( TestWithScenarios, SoledadWithCouchServerMixin, - test_remote_sync_target.TestRemoteSyncTargets): + tests.TestCaseWithServer): scenarios = [ ('token_soledad', @@ -170,13 +170,18 @@ class TestSoledadSyncTarget( 'make_document_for_test': make_soledad_document_for_test, 'create_db_and_target': make_local_db_and_token_soledad_target, 'make_database_for_test': make_sqlcipher_database_for_test, - 'sync_target': token_soledad_sync_target}), + 'sync_target': soledad_sync_target}), ] + def getSyncTarget(self, path=None): + if self.port is None: + self.startTwistedServer() + return self.sync_target(self, path) + def setUp(self): TestWithScenarios.setUp(self) SoledadWithCouchServerMixin.setUp(self) - self.startServer() + self.startTwistedServer() self.db1 = make_sqlcipher_database_for_test(self, 'test1') self.db2 = self.request_state._create_database('test2') @@ -187,6 +192,7 @@ class TestSoledadSyncTarget( SoledadWithCouchServerMixin.tearDown(self) TestWithScenarios.tearDown(self) + @defer.inlineCallbacks def test_sync_exchange_send(self): """ Test for sync exchanging send of document. @@ -201,14 +207,15 @@ class TestSoledadSyncTarget( other_docs.append((doc.doc_id, doc.rev, doc.get_json())) doc = self.make_document('doc-here', 'replica:1', '{"value": "here"}') - new_gen, trans_id = remote_target.sync_exchange( + new_gen, trans_id = yield remote_target.sync_exchange( [(doc, 10, 'T-sid')], 'replica', last_known_generation=0, - last_known_trans_id=None, return_doc_cb=receive_doc, + last_known_trans_id=None, insert_doc_cb=receive_doc, defer_decryption=False) self.assertEqual(1, new_gen) self.assertGetEncryptedDoc( db, 'doc-here', 'replica:1', '{"value": "here"}', False) + @defer.inlineCallbacks def test_sync_exchange_send_failure_and_retry_scenario(self): """ Test for sync exchange failure and retry. @@ -219,8 +226,6 @@ class TestSoledadSyncTarget( def blackhole_getstderr(inst): return cStringIO.StringIO() - self.patch(self.server.RequestHandlerClass, 'get_stderr', - blackhole_getstderr) db = self.request_state._create_database('test') _put_doc_if_newer = db._put_doc_if_newer trigger_ids = ['doc-here2'] @@ -251,12 +256,13 @@ class TestSoledadSyncTarget( doc2 = self.make_document('doc-here2', 'replica:1', '{"value": "here2"}') - self.assertRaises( - u1db.errors.HTTPError, - remote_target.sync_exchange, - [(doc1, 10, 'T-sid'), (doc2, 11, 'T-sud')], - 'replica', last_known_generation=0, last_known_trans_id=None, - return_doc_cb=receive_doc) + with self.assertRaises(u1db.errors.HTTPError): + yield remote_target.sync_exchange( + [(doc1, 10, 'T-sid'), (doc2, 11, 'T-sud')], + 'replica', + last_known_generation=0, + last_known_trans_id=None, + insert_doc_cb=receive_doc) self.assertGetEncryptedDoc( db, 'doc-here', 'replica:1', '{"value": "here"}', False) @@ -265,9 +271,9 @@ class TestSoledadSyncTarget( self.assertEqual([], other_changes) # retry trigger_ids = [] - new_gen, trans_id = remote_target.sync_exchange( + new_gen, trans_id = yield remote_target.sync_exchange( [(doc2, 11, 'T-sud')], 'replica', last_known_generation=0, - last_known_trans_id=None, return_doc_cb=receive_doc) + last_known_trans_id=None, insert_doc_cb=receive_doc) self.assertGetEncryptedDoc( db, 'doc-here2', 'replica:1', '{"value": "here2"}', False) @@ -278,6 +284,7 @@ class TestSoledadSyncTarget( ('doc-here', 'replica:1', '{"value": "here"}', 1), other_changes[0][:-1]) + @defer.inlineCallbacks def test_sync_exchange_send_ensure_callback(self): """ Test for sync exchange failure and retry. @@ -295,9 +302,9 @@ class TestSoledadSyncTarget( replica_uid_box.append(replica_uid) doc = self.make_document('doc-here', 'replica:1', '{"value": "here"}') - new_gen, trans_id = remote_target.sync_exchange( + new_gen, trans_id = yield remote_target.sync_exchange( [(doc, 10, 'T-sid')], 'replica', last_known_generation=0, - last_known_trans_id=None, return_doc_cb=receive_doc, + last_known_trans_id=None, insert_doc_cb=receive_doc, ensure_callback=ensure_cb, defer_decryption=False) self.assertEqual(1, new_gen) db = self.request_state.open_database('test') @@ -339,6 +346,7 @@ class SoledadDatabaseSyncTargetTests( self.main_test_class = test_sync.DatabaseSyncTargetTests SoledadWithCouchServerMixin.setUp(self) + @defer.inlineCallbacks def test_sync_exchange(self): """ Test sync exchange. @@ -349,9 +357,9 @@ class SoledadDatabaseSyncTargetTests( docs_by_gen = [ (self.make_document('doc-id', 'replica:1', tests.simple_doc), 10, 'T-sid')] - new_gen, trans_id = self.st.sync_exchange( + new_gen, trans_id = yield self.st.sync_exchange( docs_by_gen, 'replica', last_known_generation=0, - last_known_trans_id=None, return_doc_cb=self.receive_doc, + last_known_trans_id=None, insert_doc_cb=self.receive_doc, defer_decryption=False) self.assertGetEncryptedDoc( self.db, 'doc-id', 'replica:1', tests.simple_doc, False) @@ -375,7 +383,7 @@ class SoledadDatabaseSyncTargetTests( 'doc-id2', 'replica:1', tests.nested_doc), 11, 'T-2')] new_gen, trans_id = self.st.sync_exchange( docs_by_gen, 'replica', last_known_generation=0, - last_known_trans_id=None, return_doc_cb=self.receive_doc, + last_known_trans_id=None, insert_doc_cb=self.receive_doc, defer_decryption=False) self.assertGetEncryptedDoc( self.db, 'doc-id', 'replica:1', tests.simple_doc, False) @@ -400,7 +408,7 @@ class SoledadDatabaseSyncTargetTests( self.assertTransactionLog([doc.doc_id, doc2.doc_id], self.db) new_gen, _ = self.st.sync_exchange( [], 'other-replica', last_known_generation=0, - last_known_trans_id=None, return_doc_cb=self.receive_doc, + last_known_trans_id=None, insert_doc_cb=self.receive_doc, defer_decryption=False) self.assertTransactionLog([doc.doc_id, doc2.doc_id], self.db) self.assertEqual(2, new_gen) @@ -440,7 +448,7 @@ class SyncTimeoutError(Exception): class TestSoledadDbSync( TestWithScenarios, SoledadWithCouchServerMixin, - test_sync.TestDbSync): + tests.TestCaseWithServer): """Test db.sync remote sync shortcut""" @@ -466,7 +474,7 @@ class TestSoledadDbSync( """ SoledadWithCouchServerMixin.setUp(self) self.server = self.server_thread = None - self.startServer() + self.startTwistedServer() self.syncer = None # config info @@ -533,15 +541,33 @@ class TestSoledadDbSync( # get a u1db syncer crypto = self._soledad._crypto replica_uid = self.db1._replica_uid - dbsyncer = SQLCipherU1DBSync(self.opts, crypto, replica_uid, - defer_encryption=True) + dbsyncer = SQLCipherU1DBSync( + self.opts, + crypto, + replica_uid, + None, + defer_encryption=True) self.dbsyncer = dbsyncer return dbsyncer.sync(target_url, creds=creds, - autocreate=True, defer_decryption=DEFER_DECRYPTION) else: - return test_sync.TestDbSync.do_sync(self, target_name) + return self._do_sync(self, target_name) + + def _do_sync(self, target_name): + if self.oauth: + path = '~/' + target_name + extra = dict(creds={'oauth': { + 'consumer_key': tests.consumer1.key, + 'consumer_secret': tests.consumer1.secret, + 'token_key': tests.token1.key, + 'token_secret': tests.token1.secret, + }}) + else: + path = target_name + extra = {} + target_url = self.getURL(path) + return self.db.sync(target_url, **extra) def wait_for_sync(self): """ diff --git a/common/src/leap/soledad/common/tests/util.py b/common/src/leap/soledad/common/tests/util.py index f7a2bd4e..df405010 100644 --- a/common/src/leap/soledad/common/tests/util.py +++ b/common/src/leap/soledad/common/tests/util.py @@ -31,6 +31,7 @@ import subprocess import time import re import traceback +from uuid import uuid4 from mock import Mock from urlparse import urljoin @@ -175,14 +176,16 @@ class MockedSharedDBTest(object): def soledad_sync_target(test, path): - return http_target.SoledadSyncTarget( - test.getURL(path), crypto=test._soledad._crypto) - - -def token_soledad_sync_target(test, path): - st = soledad_sync_target(test, path) - st.set_token_credentials('user-uuid', 'auth-token') - return st + creds = {'token': { + 'uuid': 'user-uuid', + 'token': 'auth-token', + }} + return http_target.SoledadHTTPSyncTarget( + test.getURL(path), + uuid4().hex, + creds, + test._soledad._crypto, + None) class BaseSoledadTest(BaseLeapTest, MockedSharedDBTest): |