diff options
| author | Kali Kaneko <kali@leap.se> | 2013-12-24 16:01:59 -0400 | 
|---|---|---|
| committer | Kali Kaneko <kali@leap.se> | 2013-12-24 16:01:59 -0400 | 
| commit | a2fc60a03f701abd2309dee23c383f1189ce3cf4 (patch) | |
| tree | 3b4cf52c1045db59599629a6ee04dd0e74cf3684 /common | |
| parent | 19af1736a750a1a8679c21071305b97f626f1d14 (diff) | |
| parent | 8d504fa812da93df3a26c4b4b761a74685d40f25 (diff) | |
Merge remote-tracking branch 'drebs-github/feature/4451_avoid-concurrent-syncs' into develop
Diffstat (limited to 'common')
| -rw-r--r-- | common/src/leap/soledad/common/tests/test_couch_operations_atomicity.py | 43 | 
1 files changed, 43 insertions, 0 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 a0c473b1..8b001859 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 @@ -337,3 +337,46 @@ class CouchAtomicityTestCase(CouchDBTestCase, TestCaseWithServer):              self.assertEqual(                  1,                  len(filter(lambda t: t[0] == doc_id, transaction_log))) + +    def test_concurrent_syncs_do_not_fail(self): +        """ +        Assert that concurrent attempts to sync end up being executed +        sequentially and do not fail. +        """ +        threads = [] +        docs = [] +        pool = threading.BoundedSemaphore(value=1) +        self.startServer() +        sol = self._soledad_instance( +            auth_token='auth-token', +            server_url=self.getURL()) + +        def _run_method(self): +            # create a lot of documents +            doc = self._params['sol'].create_doc({}) +            # do the sync! +            sol.sync() +            pool.acquire() +            docs.append(doc.doc_id) +            pool.release() + +        # launch threads to create documents in parallel +        for i in range(0, REPEAT_TIMES): +            thread = self._WorkerThread( +                {'sol': sol, 'syncs': i}, +                _run_method) +            thread.start() +            threads.append(thread) + +        # wait for threads to finish +        for thread in threads: +            thread.join() + +        transaction_log = self.db._get_transaction_log() +        self.assertEqual(REPEAT_TIMES, len(transaction_log)) +        # assert all documents are in the remote log +        self.assertEqual(REPEAT_TIMES, len(docs)) +        for doc_id in docs: +            self.assertEqual( +                1, +                len(filter(lambda t: t[0] == doc_id, transaction_log))) | 
