From fe386a67aae7d6a65c7c3e51483bb154023de944 Mon Sep 17 00:00:00 2001
From: Christian Schwede <christian.schwede@enovance.com>
Date: Sun, 1 Jun 2014 21:48:01 +0000
Subject: [PATCH] Add tox.ini, skip server tests if Swift tests not available,
 fix import

test_rados_server.py requires swift/test to be installed. Skip this
test if the test module is not available.

Also fixed a wrong import for RadosFileSystem.
---
 setup.py                           | 18 ++++++-------
 swift_ceph_backend/rados_server.py |  3 ++-
 tests/test_rados_server.py         |  8 ++++--
 tox.ini                            | 43 ++++++++++++++++++++++++++++++
 4 files changed, 60 insertions(+), 12 deletions(-)
 create mode 100644 tox.ini

diff --git a/setup.py b/setup.py
index 394c2a7..efa86fb 100644
--- a/setup.py
+++ b/setup.py
@@ -18,19 +18,19 @@
 from setuptools import setup
 
 setup(
-    name = 'swift-ceph-backend',
-    version = '0.1',
-    description = 'Ceph backend for OpenStack Swift',
-    license = 'Apache License (2.0)',
-    packages = ['swift_ceph_backend'],
-    classifiers = [
+    name='swift-ceph-backend',
+    version='0.1',
+    description='Ceph backend for OpenStack Swift',
+    license='Apache License (2.0)',
+    packages=['swift_ceph_backend'],
+    classifiers=[
         'License :: OSI Approved :: Apache Software License',
         'Operating System :: POSIX :: Linux',
         'Programming Language :: Python :: 2.6',
         'Environment :: No Input/Output (Daemon)'],
-    install_requires = ['swift', ],
-    entry_points = {
+    install_requires=['swift', ],
+    entry_points={
         'paste.app_factory': [
-            'rados_object = swift_ceph_backend.rados_server:app_factory'],
+            'rados_object=swift_ceph_backend.rados_server:app_factory'],
     },
 )
diff --git a/swift_ceph_backend/rados_server.py b/swift_ceph_backend/rados_server.py
index 8d5bbb5..f2e38c2 100644
--- a/swift_ceph_backend/rados_server.py
+++ b/swift_ceph_backend/rados_server.py
@@ -27,9 +27,10 @@ from swift.common.bufferedhttp import http_connect
 from swift.common.exceptions import ConnectionTimeout
 
 from swift.common.http import is_success
-from swift.obj.rados_diskfile import RadosFileSystem
 from swift.obj import server
 
+from swift_ceph_backend.rados_diskfile import RadosFileSystem
+
 
 class ObjectController(server.ObjectController):
     """
diff --git a/tests/test_rados_server.py b/tests/test_rados_server.py
index 513cab3..b501be6 100644
--- a/tests/test_rados_server.py
+++ b/tests/test_rados_server.py
@@ -23,8 +23,12 @@ sys.modules['rados'] = MOCK_RADOS
 
 import cStringIO
 import unittest
-from test.unit.proxy import test_server
-from test.unit.proxy.test_server import teardown
+try:
+    from test.unit.proxy import test_server
+    from test.unit.proxy.test_server import teardown
+except ImportError:
+    import nose.plugins.skip as skip
+    raise skip.SkipTest("Swift test environ not installed")
 from swift_ceph_backend import rados_server
 
 
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..d937f63
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,43 @@
+[tox]
+envlist = py26,py27,pep8
+minversion = 1.6
+skipsdist = True
+
+[testenv]
+usedevelop = True
+install_command = pip install {opts} {packages}
+deps =
+  https://launchpad.net/swift/icehouse/1.13.1/+download/swift-1.13.1.tar.gz
+commands = nosetests {posargs:tests}
+setenv = VIRTUAL_ENV={envdir}
+         NOSE_WITH_OPENSTACK=1
+         NOSE_OPENSTACK_COLOR=1
+         NOSE_OPENSTACK_RED=0.05
+         NOSE_OPENSTACK_YELLOW=0.025
+         NOSE_OPENSTACK_SHOW_ELAPSED=1
+         NOSE_OPENSTACK_STDOUT=1
+         NOSE_WITH_COVERAGE=1
+         NOSE_COVER_BRANCHES=1
+
+[testenv:pep8]
+commands = flake8
+
+[testenv:venv]
+commands = {posargs}
+
+[testenv:cover]
+setenv = VIRTUAL_ENV={envdir}
+         NOSE_WITH_COVERAGE=1
+         NOSE_COVER_BRANCHES=1
+         NOSE_COVER_HTML=1
+         NOSE_COVER_HTML_DIR={toxinidir}/cover
+
+[tox:jenkins]
+downloadcache = ~/cache/pip
+
+[flake8]
+# follow the same style guidelines with swift
+ignore = H
+select = H102,H103,H201,H501,H903
+exclude = .venv,.git,.tox,dist,doc,*egg,build
+show-source = True