Integrate py.test with setup.py test
diff --git a/.gitignore b/.gitignore
index 2e98181..288f2ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
 .tox
 doc/_build/
 .coverage
+.eggs
diff --git a/setup.py b/setup.py
index c376f87..c4fbbd5 100755
--- a/setup.py
+++ b/setup.py
@@ -8,12 +8,36 @@
 Installation script for the OpenSSL module
 """
 
+import sys
+
 from setuptools import setup
+from setuptools.command.test import test as TestCommand
 
 
 # XXX Deduplicate this
 __version__ = '0.15.1'
 
+
+class PyTest(TestCommand):
+    user_options = [("pytest-args=", "a", "Arguments to pass to py.test")]
+
+    def initialize_options(self):
+        TestCommand.initialize_options(self)
+        self.pytest_args = None
+
+    def finalize_options(self):
+        TestCommand.finalize_options(self)
+        self.test_args = []
+        self.test_suite = True
+
+    def run_tests(self):
+        # import here, cause outside the eggs aren't loaded
+        import pytest
+        errno = pytest.main(self.pytest_args or [] +
+                            ["OpenSSL"])
+        sys.exit(errno)
+
+
 setup(name='pyOpenSSL', version=__version__,
       packages = ['OpenSSL'],
       package_dir = {'OpenSSL': 'OpenSSL'},
@@ -75,4 +99,10 @@
         'Topic :: Software Development :: Libraries :: Python Modules',
         'Topic :: System :: Networking',
         ],
-      test_suite="OpenSSL")
+      test_suite="OpenSSL",
+      tests_require=[
+          "pytest",
+      ],
+      cmdclass={
+          "test": PyTest,
+      })
diff --git a/tox.ini b/tox.ini
index 60a15ce..da54916 100644
--- a/tox.ini
+++ b/tox.ini
@@ -3,15 +3,13 @@
 
 [testenv]
 deps =
-    setuptools>=7.0
+    setuptools>=7.0  # older setuptools pollute CWD with egg files of dependencies
     coverage
-    pytest
 setenv =
     # Do not allowed the executing environment to pollute the test environment
     # with extra packages.
     PYTHONPATH=
-# The standard library unittest module can run tests on Python 2.7 and newer
 commands =
     python -c "import OpenSSL.SSL; print(OpenSSL.SSL.SSLeay_version(OpenSSL.SSL.SSLEAY_VERSION))"
-    coverage run --branch --source=OpenSSL -m pytest OpenSSL
+    coverage run --branch --source=OpenSSL setup.py test
     coverage report -m