117 lines
2.9 KiB
Python
117 lines
2.9 KiB
Python
|
import os.path
|
||
|
import socket
|
||
|
import ssl
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
|
||
|
def pytest_addoption(parser):
|
||
|
parser.addoption(
|
||
|
"--server", action="store", default="localhost", help="memcached server"
|
||
|
)
|
||
|
|
||
|
parser.addoption(
|
||
|
"--port", action="store", default="11211", help="memcached server port"
|
||
|
)
|
||
|
|
||
|
parser.addoption(
|
||
|
"--tls-server", action="store", default="localhost", help="TLS memcached server"
|
||
|
)
|
||
|
|
||
|
parser.addoption(
|
||
|
"--tls-port", action="store", default="11212", help="TLS memcached server port"
|
||
|
)
|
||
|
|
||
|
parser.addoption(
|
||
|
"--size", action="store", default=1024, help="size of data in benchmarks"
|
||
|
)
|
||
|
|
||
|
parser.addoption(
|
||
|
"--count",
|
||
|
action="store",
|
||
|
default=10000,
|
||
|
help="number of iterations to run each benchmark",
|
||
|
)
|
||
|
|
||
|
parser.addoption(
|
||
|
"--keys",
|
||
|
action="store",
|
||
|
default=20,
|
||
|
help="number of keys to use for multi benchmarks",
|
||
|
)
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def host(request):
|
||
|
return request.config.option.server
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def port(request):
|
||
|
return int(request.config.option.port)
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def tls_host(request):
|
||
|
return request.config.option.tls_server
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def tls_port(request):
|
||
|
return int(request.config.option.tls_port)
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def size(request):
|
||
|
return int(request.config.option.size)
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def count(request):
|
||
|
return int(request.config.option.count)
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def keys(request):
|
||
|
return int(request.config.option.keys)
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def pairs(size, keys):
|
||
|
return {"pymemcache_test:%d" % i: "X" * size for i in range(keys)}
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="session")
|
||
|
def tls_context():
|
||
|
return ssl.create_default_context(
|
||
|
cafile=os.path.join(os.path.dirname(__file__), "certs/ca-root.crt")
|
||
|
)
|
||
|
|
||
|
|
||
|
def pytest_generate_tests(metafunc):
|
||
|
if "socket_module" in metafunc.fixturenames:
|
||
|
socket_modules = [socket]
|
||
|
try:
|
||
|
from gevent import socket as gevent_socket # type: ignore
|
||
|
except ImportError:
|
||
|
print("Skipping gevent (not installed)")
|
||
|
else:
|
||
|
socket_modules.append(gevent_socket)
|
||
|
|
||
|
metafunc.parametrize("socket_module", socket_modules)
|
||
|
|
||
|
if "client_class" in metafunc.fixturenames:
|
||
|
from pymemcache.client.base import Client, PooledClient
|
||
|
from pymemcache.client.hash import HashClient
|
||
|
|
||
|
class HashClientSingle(HashClient):
|
||
|
def __init__(self, server, *args, **kwargs):
|
||
|
super().__init__([server], *args, **kwargs)
|
||
|
|
||
|
metafunc.parametrize("client_class", [Client, PooledClient, HashClientSingle])
|
||
|
|
||
|
if "key_prefix" in metafunc.fixturenames:
|
||
|
mark = metafunc.definition.get_closest_marker("parametrize")
|
||
|
if not mark or "key_prefix" not in mark.args[0]:
|
||
|
metafunc.parametrize("key_prefix", [b"", b"prefix"])
|