summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--testing/tests/perf/test_encdecpool.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/testing/tests/perf/test_encdecpool.py b/testing/tests/perf/test_encdecpool.py
new file mode 100644
index 00000000..dbbbea89
--- /dev/null
+++ b/testing/tests/perf/test_encdecpool.py
@@ -0,0 +1,84 @@
+import pytest
+import json
+from uuid import uuid4
+from twisted.internet.defer import gatherResults
+from leap.soledad.client.encdecpool import SyncEncrypterPool
+from leap.soledad.client.encdecpool import SyncDecrypterPool
+from leap.soledad.common.document import SoledadDocument
+
+
+def create_encrypt(amount, size):
+ @pytest.mark.benchmark(group="test_pool_encrypt")
+ @pytest.inlineCallbacks
+ def test(soledad_client, txbenchmark_with_setup, request):
+ DOC_CONTENT = {'payload': 'x'*size}
+
+ def setup():
+ client = soledad_client()
+ pool = SyncEncrypterPool(client._crypto, client._sync_db)
+ pool.start()
+ request.addfinalizer(pool.stop)
+ return (pool,), {}
+
+ @pytest.inlineCallbacks
+ def put_and_wait(pool):
+ doc_ids = []
+ deferreds = []
+ for _ in xrange(amount):
+ doc = SoledadDocument(
+ doc_id=uuid4().hex, rev='rev',
+ json=json.dumps(DOC_CONTENT))
+ deferreds.append(pool.encrypt_doc(doc))
+ doc_ids.append(doc.doc_id)
+ yield gatherResults(deferreds)
+
+ yield txbenchmark_with_setup(setup, put_and_wait)
+ return test
+
+test_encrypt_1000_10k = create_encrypt(1000, 10*1000)
+# test_encrypt_1000_500k = create_encrypt(1000, 500*1000)
+# test_encrypt_1000_1M = create_encrypt(1000, 1000*1000)
+# test_encrypt_1000_10M = create_encrypt(1000, 10*1000*1000)
+
+
+def create_decrypt(amount, size):
+ @pytest.mark.benchmark(group="test_pool_decrypt")
+ @pytest.inlineCallbacks
+ def test(soledad_client, txbenchmark_with_setup, request):
+ DOC_CONTENT = {'payload': 'x'*size}
+ client = soledad_client()
+
+ def setup():
+ pool = SyncDecrypterPool(
+ client._crypto,
+ client._sync_db,
+ source_replica_uid=client._dbpool.replica_uid,
+ insert_doc_cb=lambda x, y, z: False) # ignored
+ pool.start(amount)
+ request.addfinalizer(pool.stop)
+ crypto = client._crypto
+ docs = []
+ for _ in xrange(amount):
+ doc = SoledadDocument(
+ doc_id=uuid4().hex, rev='rev',
+ json=json.dumps(DOC_CONTENT))
+ encrypted_content = json.loads(crypto.encrypt_doc(doc))
+ docs.append((doc.doc_id, encrypted_content))
+ return (pool, docs), {}
+
+ def put_and_wait(pool, docs):
+ deferreds = [] # fires on completion
+ for idx, (doc_id, content) in enumerate(docs, 1):
+ deferreds.append(pool.insert_encrypted_received_doc(
+ doc_id, 'rev', content, idx, "trans_id", idx))
+ return gatherResults(deferreds)
+
+ yield txbenchmark_with_setup(setup, put_and_wait)
+ return test
+
+test_decrypt_1000_10k = create_decrypt(1000, 10*1000)
+test_decrypt_1000_100k = create_decrypt(1000, 10*1000)
+# memory issues ahead
+# test_decrypt_1000_500k = create_decrypt(1000, 500*1000)
+# test_decrypt_1000_1M = create_decrypt(1000, 1000*1000)
+# test_decrypt_1000_10M = create_decrypt(1000, 10*1000*1000)