Add tox.ini for using tox for testing

Refactor parts of the makefile and testing to
support the currently standard tox command to test
various environments.

This also moves most of the zookeeper setup and
teardown logic out of the makefile and into a specific
script file that just does this setup/teardown.
This commit is contained in:
Joshua Harlow
2015-03-18 13:57:10 -07:00
parent fb824e7177
commit 4db81cf00d
6 changed files with 134 additions and 43 deletions

View File

@@ -6,35 +6,35 @@ matrix:
- python: "2.7"
include:
- python: "2.6"
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py26
- python: "2.6"
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py26
- python: "2.6"
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py26
- python: "2.6"
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py26
- python: "2.7"
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py27
- python: "2.7"
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6
env: GEVENT_VERSION=0.13.8 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py27
- python: "2.7"
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py27
- python: "2.7"
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py27
- python: "2.7"
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.5.0-alpha
env: GEVENT_VERSION=1.0.1 ZOOKEEPER_VERSION=3.5.0-alpha TOX_VENV=py27
- python: "3.3"
env: ZOOKEEPER_VERSION=3.3.6
env: ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py33
- python: "3.3"
env: ZOOKEEPER_VERSION=3.4.6
env: ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py33
- python: "3.4"
env: ZOOKEEPER_VERSION=3.3.6
env: ZOOKEEPER_VERSION=3.3.6 TOX_VENV=py34
- python: "3.4"
env: ZOOKEEPER_VERSION=3.4.6
env: ZOOKEEPER_VERSION=3.4.6 TOX_VENV=py34
- python: "pypy"
env: ZOOKEEPER_VERSION=3.3.6
env: ZOOKEEPER_VERSION=3.3.6 TOX_VENV=pypy
- python: "pypy"
env: ZOOKEEPER_VERSION=3.4.6
env: ZOOKEEPER_VERSION=3.4.6 TOX_VENV=pypy
notifications:
email: false

View File

@@ -1,11 +1,10 @@
HERE = $(shell pwd)
BIN = $(HERE)/bin
PYTHON = $(BIN)/python
PIP_DOWNLOAD_CACHE ?= $(HERE)/.pip_cache
INSTALL = $(BIN)/pip install
INSTALL += --download-cache $(PIP_DOWNLOAD_CACHE)
TOX_VENV ?= py27
BUILD_DIRS = bin build include lib lib64 man share
GEVENT_VERSION ?= 1.0.1
@@ -14,19 +13,15 @@ PYPY = $(shell $(PYTHON_EXE) -c "import sys; print(getattr(sys, 'pypy_version_in
TRAVIS ?= false
TRAVIS_PYTHON_VERSION ?= $(shell $(PYTHON_EXE) -c "import sys; print('.'.join([str(s) for s in sys.version_info][:2]))")
ZOOKEEPER = $(BIN)/zookeeper
ZOOKEEPER_VERSION ?= 3.4.6
ZOOKEEPER_PATH ?= $(ZOOKEEPER)
GEVENT_SUPPORTED = yes
GREENLET_SUPPORTED = yes
ifeq ($(findstring 3.,$(TRAVIS_PYTHON_VERSION)), 3.)
GEVENT_SUPPORTED = no
GREENLET_SUPPORTED = no
endif
ifeq ($(PYPY),yes)
GEVENT_SUPPORTED = no
GREENLET_SUPPORTED = no
endif
.PHONY: all build clean test zookeeper clean-zookeeper
.PHONY: all build clean test
all: build
@@ -34,7 +29,8 @@ $(PYTHON):
python sw/virtualenv.py .
build: $(PYTHON)
ifeq ($(GEVENT_SUPPORTED),yes)
ifeq ($(GREENLET_SUPPORTED),yes)
$(INSTALL) -U -r requirements_eventlet.txt
$(INSTALL) -U -r requirements_gevent.txt
$(INSTALL) -f https://github.com/surfly/gevent/releases gevent==$(GEVENT_VERSION)
endif
@@ -48,24 +44,9 @@ endif
clean:
rm -rf $(BUILD_DIRS)
test:
ZOOKEEPER_PATH=$(ZOOKEEPER_PATH) NOSE_LOGFORMAT='%(thread)d:%(filename)s: %(levelname)s: %(message)s' \
$(BIN)/nosetests -d -v --with-coverage kazoo.tests
test: $(PYTHON)
tox -e$(TOX_VENV)
html:
cd docs && \
make html
$(ZOOKEEPER):
@echo "Installing Zookeeper"
mkdir -p $(BIN)
cd $(BIN) && \
curl -C - http://apache.osuosl.org/zookeeper/zookeeper-$(ZOOKEEPER_VERSION)/zookeeper-$(ZOOKEEPER_VERSION).tar.gz | tar -zx
mv $(BIN)/zookeeper-$(ZOOKEEPER_VERSION) $(ZOOKEEPER_PATH)
chmod a+x $(ZOOKEEPER_PATH)/bin/zkServer.sh
@echo "Finished installing Zookeeper"
zookeeper: $(ZOOKEEPER)
clean-zookeeper:
rm -rf zookeeper $(ZOOKEEPER_PATH)

View File

@@ -1,3 +1,4 @@
coverage==3.7.1
mock==1.0.1
nose==1.3.3
flake8==2.3.0

74
setup-zookeeper-env.sh Executable file
View File

@@ -0,0 +1,74 @@
#!/bin/bash
set -x -e
HERE=`pwd`
ZOO_TMP_DIR=$(mktemp -d /tmp/ZOO-TMP-XXXXX)
mkdir -p $ZOO_TMP_DIR/bin
mkdir -p $ZOO_TMP_DIR/log
ZOOKEEPER_STARTED=0
ZOOKEEPER_VERSION=${ZOOKEEPER_VERSION:-3.4.6}
ZOO_BASE_DIR="$PWD/bin/"
ZOOKEEPER_PATH="$ZOO_BASE_DIR/zookeeper-$ZOOKEEPER_VERSION"
function download_zookeeper(){
mkdir -p $ZOO_BASE_DIR
cd $ZOO_BASE_DIR && \
curl -C - http://apache.osuosl.org/zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz | tar -zx
chmod a+x $ZOOKEEPER_PATH/bin/zkServer.sh
}
function stop_zookeeper_server(){
$ZOO_TMP_DIR/bin/zkServer.sh stop
}
function clean_exit(){
local error_code="$?"
if [ $ZOOKEEPER_STARTED -eq 1 ]; then
stop_zookeeper_server
fi
rm -rf ${ZOO_TMP_DIR}
return $error_code
}
function start_zookeeper_server(){
# Copy zookeeper scripts in temporary directory
cp $ZOOKEEPER_PATH/bin/* $ZOO_TMP_DIR/bin
# Copy zookeeper conf and set dataDir variable to the zookeeper temporary
# directory
cp "$ZOOKEEPER_PATH/conf/zoo_sample.cfg" "$ZOO_TMP_DIR/zoo.cfg"
sed -i -r "s@(dataDir *= *).*@\1$ZOO_TMP_DIR@" $ZOO_TMP_DIR/zoo.cfg
# Replace some variables by the zookeeper temporary directory
sed -i -r "s@(ZOOCFGDIR *= *).*@\1$ZOO_TMP_DIR@" $ZOO_TMP_DIR/bin/zkEnv.sh
sed -i -r "s@(ZOO_LOG_DIR *= *).*@\1$ZOO_TMP_DIR/log@" $ZOO_TMP_DIR/bin/zkEnv.sh
$ZOO_TMP_DIR/bin/zkServer.sh start
}
if [ ! -d "$ZOOKEEPER_PATH" ]; then
download_zookeeper
fi
trap "clean_exit" EXIT
start_zookeeper_server
if [ $? -eq 0 ]; then
ZOOKEEPER_STARTED=1
fi
export ZOOKEEPER_PATH
cd $HERE
# Yield execution to venv command
$*

View File

@@ -20,6 +20,7 @@ tests_require = install_requires + [
'coverage',
'mock',
'nose',
'flake8',
]
if not (PYTHON3 or PYPY):

34
tox.ini Normal file
View File

@@ -0,0 +1,34 @@
[tox]
minversion = 1.6
skipsdist = True
envlist = pep8,
py26,
py27,
py33,
py34,
pypy
[testenv:pep8]
commands = flake8 {posargs}
[testenv]
usedevelop = True
install_command = pip install {opts} {packages}
setenv = VIRTUAL_ENV={envdir}
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/requirements_sphinx.txt
commands = {toxinidir}/setup-zookeeper-env.sh nosetests {posargs} -d -v --with-coverage kazoo.tests
[testenv:py27]
deps = {[testenv]deps}
-r{toxinidir}/requirements_gevent.txt
-r{toxinidir}/requirements_eventlet.txt
[testenv:py26]
deps = {[testenv]deps}
-r{toxinidir}/requirements_gevent.txt
-r{toxinidir}/requirements_eventlet.txt
[flake8]
builtins = _
exclude = .venv,.tox,dist,doc,*egg,.git,build,tools