From 91828a5270ce6fbf43ed3a8cb46e5a017e1b0c7f Mon Sep 17 00:00:00 2001 From: drebs Date: Tue, 11 Aug 2015 11:40:34 -0300 Subject: [bug] fix several things on tests * redefine the BaseLeapTest class so it inherits from twisted.trial.unittest.TestCase. * allow passing the source_replica_uid when creating the sync target. This is needed because the SoledadHTTPSyncTarget needs to be instantiated with the source_replica_uid passed as a parameter. * close the sync target in tests that use it. * raise and U1DBError instead of an Exception on failure_and_retry test, because otherwise the u1db http app server will re-raise the Exception and twisted's WSGI server will raise the exception * set defer_decryption=False in some sync_exchange() calls so the call is consistent with soledad instantiation in tests and the new signature of that method. * yield get_sync_info() in tests that use this method. --- .../leap/soledad/common/tests/test_sync_target.py | 39 ++++++++++++++-------- common/src/leap/soledad/common/tests/util.py | 11 ++++-- 2 files changed, 35 insertions(+), 15 deletions(-) (limited to 'common/src') 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 ecf3fc5a..8f9e6b34 100644 --- a/common/src/leap/soledad/common/tests/test_sync_target.py +++ b/common/src/leap/soledad/common/tests/test_sync_target.py @@ -147,15 +147,18 @@ class TestSoledadParseReceivedDocResponse(SoledadWithCouchServerMixin): # -def make_local_db_and_soledad_target(test, path='test'): +def make_local_db_and_soledad_target(test, path='test', + source_replica_uid=uuid4().hex): test.startTwistedServer() db = test.request_state._create_database(os.path.basename(path)) - st = soledad_sync_target(test, path) + st = soledad_sync_target(test, path, source_replica_uid) return db, st -def make_local_db_and_token_soledad_target(test): - db, st = make_local_db_and_soledad_target(test, 'test') +def make_local_db_and_token_soledad_target(test, + source_replica_uid=uuid4().hex): + db, st = make_local_db_and_soledad_target(test, path='test', + source_replica_uid=source_replica_uid) st.set_token_credentials('user-uuid', 'auth-token') return db, st @@ -174,10 +177,10 @@ class TestSoledadSyncTarget( 'sync_target': soledad_sync_target}), ] - def getSyncTarget(self, path=None): + def getSyncTarget(self, path=None, source_replica_uid=uuid4().hex): if self.port is None: self.startTwistedServer() - return self.sync_target(self, path) + return self.sync_target(self, path, source_replica_uid) def setUp(self): TestWithScenarios.setUp(self) @@ -215,6 +218,7 @@ class TestSoledadSyncTarget( self.assertEqual(1, new_gen) self.assertGetEncryptedDoc( db, 'doc-here', 'replica:1', '{"value": "here"}', False) + remote_target.close() @defer.inlineCallbacks def test_sync_exchange_send_failure_and_retry_scenario(self): @@ -236,7 +240,7 @@ class TestSoledadSyncTarget( replica_trans_id=None, number_of_docs=None, doc_idx=None, sync_id=None): if doc.doc_id in trigger_ids: - raise Exception + raise u1db.errors.U1DBError return _put_doc_if_newer(doc, save_conflict=save_conflict, replica_uid=replica_uid, replica_gen=replica_gen, @@ -246,7 +250,9 @@ class TestSoledadSyncTarget( from leap.soledad.common.tests.test_couch import IndexedCouchDatabase self.patch( IndexedCouchDatabase, '_put_doc_if_newer', bomb_put_doc_if_newer) - remote_target = self.getSyncTarget('test') + remote_target = self.getSyncTarget( + 'test', + source_replica_uid='replica') other_changes = [] def receive_doc(doc, gen, trans_id): @@ -257,13 +263,15 @@ class TestSoledadSyncTarget( doc2 = self.make_document('doc-here2', 'replica:1', '{"value": "here2"}') - with self.assertRaises(u1db.errors.HTTPError): + with self.assertRaises(u1db.errors.U1DBError): 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) + insert_doc_cb=receive_doc, + defer_decryption=False) + self.assertGetEncryptedDoc( db, 'doc-here', 'replica:1', '{"value": "here"}', False) @@ -274,7 +282,8 @@ class TestSoledadSyncTarget( trigger_ids = [] new_gen, trans_id = yield remote_target.sync_exchange( [(doc2, 11, 'T-sud')], 'replica', last_known_generation=0, - last_known_trans_id=None, insert_doc_cb=receive_doc) + last_known_trans_id=None, insert_doc_cb=receive_doc, + defer_decryption=False) self.assertGetEncryptedDoc( db, 'doc-here2', 'replica:1', '{"value": "here2"}', False) @@ -284,6 +293,7 @@ class TestSoledadSyncTarget( self.assertEqual( ('doc-here', 'replica:1', '{"value": "here"}', 1), other_changes[0][:-1]) + remote_target.close() @defer.inlineCallbacks def test_sync_exchange_send_ensure_callback(self): @@ -313,6 +323,7 @@ class TestSoledadSyncTarget( self.assertEqual(db._replica_uid, replica_uid_box[0]) self.assertGetEncryptedDoc( db, 'doc-here', 'replica:1', '{"value": "here"}', False) + remote_target.close() def test_sync_exchange_in_stream_error(self): # we bypass this test because our sync_exchange process does not @@ -377,7 +388,8 @@ class SoledadDatabaseSyncTargetTests( last_trans_id = self.getLastTransId(self.db) self.assertEqual(([], 1, last_trans_id), (self.other_changes, new_gen, last_trans_id)) - self.assertEqual(10, self.st.get_sync_info('replica')[3]) + sync_info = yield self.st.get_sync_info('replica') + self.assertEqual(10, sync_info[3]) @defer.inlineCallbacks def test_sync_exchange_push_many(self): @@ -403,7 +415,8 @@ class SoledadDatabaseSyncTargetTests( last_trans_id = self.getLastTransId(self.db) self.assertEqual(([], 2, last_trans_id), (self.other_changes, new_gen, trans_id)) - self.assertEqual(11, self.st.get_sync_info('replica')[3]) + sync_info = yield self.st.get_sync_info('replica') + self.assertEqual(11, sync_info[3]) @defer.inlineCallbacks def test_sync_exchange_returns_many_new_docs(self): diff --git a/common/src/leap/soledad/common/tests/util.py b/common/src/leap/soledad/common/tests/util.py index 9800078d..5506d789 100644 --- a/common/src/leap/soledad/common/tests/util.py +++ b/common/src/leap/soledad/common/tests/util.py @@ -175,19 +175,26 @@ class MockedSharedDBTest(object): return defaultMockSharedDB -def soledad_sync_target(test, path): +def soledad_sync_target(test, path, source_replica_uid=uuid4().hex): creds = {'token': { 'uuid': 'user-uuid', 'token': 'auth-token', }} return http_target.SoledadHTTPSyncTarget( test.getURL(path), - uuid4().hex, + source_replica_uid, creds, test._soledad._crypto, None) +# redefine the base leap test class so it inherits from twisted trial's +# TestCase. This is needed so trial knows that it has to manage a reactor and +# wait for deferreds returned by tests to be fired. +BaseLeapTest = type( + 'BaseLeapTest', (unittest.TestCase,), dict(BaseLeapTest.__dict__)) + + class BaseSoledadTest(BaseLeapTest, MockedSharedDBTest): """ -- cgit v1.2.3