summaryrefslogtreecommitdiff
path: root/tests/integration/base_storage_test.py
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook.git@proton.me>2023-02-28 19:05:55 -0600
committerJordan Cook <jordan.cook.git@proton.me>2023-03-01 15:22:18 -0600
commitc83e4e523008337a6f8f638e65ca217177d8ed5c (patch)
tree40a8b5a6c0773afe4e08bec93743a9650f555dd5 /tests/integration/base_storage_test.py
parent0f330b54e15966ff74582cfa7d794f6b844d324c (diff)
downloadrequests-cache-c83e4e523008337a6f8f638e65ca217177d8ed5c.tar.gz
Share SQLite connection objects among threads and use lock for write operations instead of using thread-local connections
Diffstat (limited to 'tests/integration/base_storage_test.py')
-rw-r--r--tests/integration/base_storage_test.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/tests/integration/base_storage_test.py b/tests/integration/base_storage_test.py
index ce881e8..4870c02 100644
--- a/tests/integration/base_storage_test.py
+++ b/tests/integration/base_storage_test.py
@@ -1,4 +1,5 @@
"""Common tests to run for all backends (BaseStorage subclasses)"""
+from concurrent.futures import ThreadPoolExecutor
from datetime import datetime
from typing import Dict, Type
@@ -7,7 +8,7 @@ from attrs import define, field
from requests_cache.backends import BaseStorage
from requests_cache.models import CachedResponse
-from tests.conftest import CACHE_NAME
+from tests.conftest import CACHE_NAME, N_ITERATIONS, N_REQUESTS_PER_ITERATION, N_WORKERS
class BaseStorageTest:
@@ -158,6 +159,17 @@ class BaseStorageTest:
for i in range(10):
assert f'key_{i}' in str(cache)
+ def test_concurrency(self):
+ """Test a large number of concurrent write operations for each backend"""
+ cache = self.init_cache()
+
+ def write(i):
+ cache[f'key_{i}'] = f'value_{i}'
+
+ n_iterations = N_ITERATIONS * N_REQUESTS_PER_ITERATION * 10
+ with ThreadPoolExecutor(max_workers=N_WORKERS * 2) as executor:
+ _ = list(executor.map(write, range(n_iterations)))
+
@define
class BasicDataclass: