summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--testing/tests/perf/conftest.py12
-rw-r--r--testing/tests/perf/test_crypto.py22
-rw-r--r--testing/tests/perf/test_encdecpool.py8
-rw-r--r--testing/tests/perf/test_sqlcipher.py13
-rw-r--r--testing/tests/perf/test_sync.py13
5 files changed, 39 insertions, 29 deletions
diff --git a/testing/tests/perf/conftest.py b/testing/tests/perf/conftest.py
index 9abd0c54..3681025f 100644
--- a/testing/tests/perf/conftest.py
+++ b/testing/tests/perf/conftest.py
@@ -2,6 +2,8 @@ import json
import os
import pytest
import requests
+import random
+import base64
import signal
import time
@@ -43,6 +45,16 @@ DEFAULT_CERTKEY = 'soledad_certkey.pem'
DEFAULT_TOKEN = 'an-auth-token'
+@pytest.fixture()
+def payload():
+ def generate(size):
+ random.seed(1337) # same seed to avoid different bench results
+ payload_bytes = bytearray(random.getrandbits(8) for _ in xrange(size))
+ # encode as base64 to avoid ascii encode/decode errors
+ return base64.b64encode(payload_bytes)[:size] # remove b64 overhead
+ return generate
+
+
#
# soledad_dbs fixture: provides all databases needed by soledad server in a per
# module scope (same databases for all tests in this module).
diff --git a/testing/tests/perf/test_crypto.py b/testing/tests/perf/test_crypto.py
index a32ef593..be00560b 100644
--- a/testing/tests/perf/test_crypto.py
+++ b/testing/tests/perf/test_crypto.py
@@ -8,10 +8,10 @@ from leap.soledad.client.crypto import decrypt_sym
def create_doc_encryption(size):
@pytest.mark.benchmark(group="test_crypto_encrypt_doc")
- def test_doc_encryption(soledad_client, benchmark):
+ def test_doc_encryption(soledad_client, benchmark, payload):
crypto = soledad_client()._crypto
- DOC_CONTENT = {'payload': 'x'*size}
+ DOC_CONTENT = {'payload': payload(size)}
doc = SoledadDocument(
doc_id=uuid4().hex, rev='rev',
json=json.dumps(DOC_CONTENT))
@@ -22,10 +22,10 @@ def create_doc_encryption(size):
def create_doc_decryption(size):
@pytest.mark.benchmark(group="test_crypto_decrypt_doc")
- def test_doc_decryption(soledad_client, benchmark):
+ def test_doc_decryption(soledad_client, benchmark, payload):
crypto = soledad_client()._crypto
- DOC_CONTENT = {'payload': 'x'*size}
+ DOC_CONTENT = {'payload': payload(size)}
doc = SoledadDocument(
doc_id=uuid4().hex, rev='rev',
json=json.dumps(DOC_CONTENT))
@@ -49,21 +49,21 @@ test_decrypt_doc_1M = create_doc_decryption(1000*1000)
test_decrypt_doc_10M = create_doc_decryption(10*1000*1000)
test_decrypt_doc_50M = create_doc_decryption(50*1000*1000)
-KEY = 'x'*32
-
def create_raw_encryption(size):
@pytest.mark.benchmark(group="test_crypto_raw_encrypt")
- def test_raw_encrypt(benchmark):
- benchmark(encrypt_sym, 'x'*size, KEY)
+ def test_raw_encrypt(benchmark, payload):
+ key = payload(32)
+ benchmark(encrypt_sym, payload(size), key)
return test_raw_encrypt
def create_raw_decryption(size):
@pytest.mark.benchmark(group="test_crypto_raw_decrypt")
- def test_raw_decrypt(benchmark):
- iv, ciphertext = encrypt_sym('x'*size, KEY)
- benchmark(decrypt_sym, ciphertext, KEY, iv)
+ def test_raw_decrypt(benchmark, payload):
+ key = payload(32)
+ iv, ciphertext = encrypt_sym(payload(size), key)
+ benchmark(decrypt_sym, ciphertext, key, iv)
return test_raw_decrypt
diff --git a/testing/tests/perf/test_encdecpool.py b/testing/tests/perf/test_encdecpool.py
index 3c501084..77091a41 100644
--- a/testing/tests/perf/test_encdecpool.py
+++ b/testing/tests/perf/test_encdecpool.py
@@ -11,8 +11,8 @@ 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 test(soledad_client, txbenchmark_with_setup, request, payload):
+ DOC_CONTENT = {'payload': payload(size)}
def setup():
client = soledad_client()
@@ -41,8 +41,8 @@ test_encdecpool_encrypt_100_500k = create_encrypt(100, 500*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}
+ def test(soledad_client, txbenchmark_with_setup, request, payload):
+ DOC_CONTENT = {'payload': payload(size)}
client = soledad_client()
def setup():
diff --git a/testing/tests/perf/test_sqlcipher.py b/testing/tests/perf/test_sqlcipher.py
index 1fce1c3e..e7a54228 100644
--- a/testing/tests/perf/test_sqlcipher.py
+++ b/testing/tests/perf/test_sqlcipher.py
@@ -6,9 +6,8 @@ import pytest
from twisted.internet.defer import gatherResults
-def load_up(client, amount, size, defer=True):
- content = 'x'*size
- results = [client.create_doc({'content': content}) for _ in xrange(amount)]
+def load_up(client, amount, payload, defer=True):
+ results = [client.create_doc({'content': payload}) for _ in xrange(amount)]
if defer:
return gatherResults(results)
@@ -16,17 +15,17 @@ def load_up(client, amount, size, defer=True):
def build_test_sqlcipher_async_create(amount, size):
@pytest.inlineCallbacks
@pytest.mark.benchmark(group="test_sqlcipher_async_create")
- def test(soledad_client, txbenchmark):
+ def test(soledad_client, txbenchmark, payload):
client = soledad_client()
- yield txbenchmark(load_up, client, amount, size)
+ yield txbenchmark(load_up, client, amount, payload(size))
return test
def build_test_sqlcipher_create(amount, size):
@pytest.mark.benchmark(group="test_sqlcipher_create")
- def test(soledad_client, benchmark):
+ def test(soledad_client, benchmark, payload):
client = soledad_client()._dbsyncer
- benchmark(load_up, client, amount, size, defer=False)
+ benchmark(load_up, client, amount, payload(size), defer=False)
return test
diff --git a/testing/tests/perf/test_sync.py b/testing/tests/perf/test_sync.py
index 0be9d12f..0b48a0b9 100644
--- a/testing/tests/perf/test_sync.py
+++ b/testing/tests/perf/test_sync.py
@@ -3,12 +3,11 @@ import pytest
from twisted.internet.defer import gatherResults
-def load_up(client, amount, size):
- content = 'x'*size
+def load_up(client, amount, payload):
deferreds = []
# create a bunch of local documents
for i in xrange(amount):
- d = client.create_doc({'content': content})
+ d = client.create_doc({'content': payload})
deferreds.append(d)
d = gatherResults(deferreds)
d.addCallback(lambda _: None)
@@ -18,11 +17,11 @@ def load_up(client, amount, size):
def create_upload(uploads, size):
@pytest.inlineCallbacks
@pytest.mark.benchmark(group="test_upload")
- def test(soledad_client, txbenchmark_with_setup):
+ def test(soledad_client, txbenchmark_with_setup, payload):
client = soledad_client()
def setup():
- return load_up(client, uploads, size)
+ return load_up(client, uploads, payload(size))
yield txbenchmark_with_setup(setup, client.sync)
return test
@@ -36,10 +35,10 @@ test_upload_1000_10k = create_upload(1000, 10*1000)
def create_download(downloads, size):
@pytest.inlineCallbacks
@pytest.mark.benchmark(group="test_download")
- def test(soledad_client, txbenchmark_with_setup):
+ def test(soledad_client, txbenchmark_with_setup, payload):
client = soledad_client()
- yield load_up(client, downloads, size)
+ yield load_up(client, downloads, payload(size))
yield client.sync()
# We could create them directly on couch, but sending them
# ensures we are dealing with properly encrypted docs