Use tox and pifpaf for testing

This sets up a tox environment that conditionally runs tests
for either redis, memcached, or dbm, using pifpaf to install ad-hoc
redis and/or memcached servers on private ports.  This will allow
concurrent test runs against separate memcached / redis instances.
Additionally, the tox environment is split out so that we can easily
use a jenkins matrix build for parallelism.

Change-Id: I56b98e2b2b023b4178d77203a07c72b8fa5dfd3d
This commit is contained in:
Mike Bayer 2016-05-26 11:45:53 -04:00
parent 76245bcc50
commit a923e7ee09
5 changed files with 73 additions and 45 deletions

View File

@ -10,24 +10,10 @@ universal = 1
sign = 1
identity = C4DAFEE1
[nosetests]
cover-package = dogpile.cache
with-coverage = 1
cover-erase = 1
nologcapture = 1
where = tests
[flake8]
exclude = docs/*
[pytest]
addopts =
--verbose
--tb=short
--capture=no
# show extra test summary info as specified by chars (f)ailed, (E)error,
# (s)skipped, (x)failed, (X)passed.
-rfEsxX
--cov=dogpile.cache --cov-report=xml --cov-report=term-missing
addopts= --tb native -v -r fxX
python_files=tests/*test_*.py

View File

@ -1,8 +0,0 @@
Mako
mock
pylibmc
redis
python-binary-memcached
python-memcached
pytest
pytest-cov

View File

@ -5,6 +5,11 @@ from threading import Thread
import time
import pytest
from dogpile.cache import compat
import os
MEMCACHED_PORT = os.getenv('DOGPILE_MEMCACHED_PORT', '11211')
MEMCACHED_URL = "127.0.0.1:%s" % MEMCACHED_PORT
LOCK_TIMEOUT = 1
@ -29,7 +34,7 @@ class _NonDistributedMemcachedTest(_TestMemcachedConn, _GenericBackendTest):
}
config_args = {
"arguments": {
"url": "127.0.0.1:11211"
"url": MEMCACHED_URL
}
}
@ -40,7 +45,7 @@ class _DistributedMemcachedWithTimeoutTest(_TestMemcachedConn, _GenericBackendTe
}
config_args = {
"arguments": {
"url": "127.0.0.1:11211",
"url": MEMCACHED_URL,
"distributed_lock": True,
"lock_timeout": LOCK_TIMEOUT,
}
@ -53,7 +58,7 @@ class _DistributedMemcachedTest(_TestMemcachedConn, _GenericBackendTest):
}
config_args = {
"arguments": {
"url": "127.0.0.1:11211",
"url": MEMCACHED_URL,
"distributed_lock": True,
}
}
@ -62,7 +67,7 @@ class _DistributedMemcachedTest(_TestMemcachedConn, _GenericBackendTest):
class _DistributedMemcachedMutexTest(_TestMemcachedConn, _GenericMutexTest):
config_args = {
"arguments": {
"url": "127.0.0.1:11211",
"url": MEMCACHED_URL,
"distributed_lock": True
}
}
@ -71,7 +76,7 @@ class _DistributedMemcachedMutexTest(_TestMemcachedConn, _GenericMutexTest):
class _DistributedMemcachedMutexWithTimeoutTest(_TestMemcachedConn, _GenericMutexTest):
config_args = {
"arguments": {
"url": "127.0.0.1:11211",
"url": MEMCACHED_URL,
"distributed_lock": True,
"lock_timeout": LOCK_TIMEOUT,
}

View File

@ -3,6 +3,10 @@ from ._fixtures import _GenericBackendTest, _GenericMutexTest
from unittest import TestCase
from mock import patch, Mock
import pytest
import os
REDIS_HOST = '127.0.0.1'
REDIS_PORT = int(os.getenv('DOGPILE_REDIS_PORT', '6379'))
class _TestRedisConn(object):
@ -25,8 +29,8 @@ class RedisTest(_TestRedisConn, _GenericBackendTest):
backend = 'dogpile.cache.redis'
config_args = {
"arguments": {
'host': '127.0.0.1',
'port': 6379,
'host': REDIS_HOST,
'port': REDIS_PORT,
'db': 0,
}
}
@ -36,8 +40,8 @@ class RedisDistributedMutexTest(_TestRedisConn, _GenericMutexTest):
backend = 'dogpile.cache.redis'
config_args = {
"arguments": {
'host': '127.0.0.1',
'port': 6379,
'host': REDIS_HOST,
'port': REDIS_PORT,
'db': 0,
'distributed_lock': True,
}

65
tox.ini
View File

@ -1,17 +1,58 @@
[tox]
envlist = py26, py27, py33, py34, flake8
minversion=1.8.dev1
envlist = py{27,33,34,35}
[testenv]
commands =
pip install -r test-requirements.txt
pip install -e .
py.test {posargs}
cov_args=--cov=dogpile --cov-report term --cov-report xml
setenv=
BASECOMMAND=python -m pytest
{generic}: RUNTESTS=-k 'not test_dbm_backend and not test_memcached_backend and not test_redis_backend'
{memcached}: PIFPAF=pifpaf --env-prefix DOGPILE run memcached --
{memcached}: RUNTESTS=tests/cache/test_memcached_backend.py
{redis}: PIFPAF=pifpaf --env-prefix DOGPILE run redis --
{redis}: RUNTESTS=tests/cache/test_redis_backend.py
{dbm}: RUNTESTS=tests/cache/test_dbm_backend.py
{cov}: COVERAGE={[testenv]cov_args}
deps=
pytest
mock
Mako
{memcached}: pylibmc
# the py3k python-memcached fails for multiple
# delete
{py27-memcached}: python-memcached
{memcached}: python-binary-memcached
{memcached}: pifpaf
{redis}: redis
{redis}: pifpaf
{cov}: pytest-cov
commands=
{env:PIFPAF:} {env:BASECOMMAND} {env:COVERAGE:} {env:RUNTESTS:} {posargs}
sitepackages=True
usedevelop=True
[testenv:pep8]
deps=flake8
commands = python -m flake8 {posargs}
[flake8]
show-source = True
ignore = E711,E712,E721,D,N
# F841,F811,F401
exclude=.venv,.git,.tox,dist,doc,*egg,build
[testenv:py26]
# mock dropped 2.6 support for a few releases
deps = mock==1.0.1
[testenv:flake8]
commands =
pip install flake8
flake8 .