From d52975cef3a36e18552aeb23de7c06aa73d76454 Mon Sep 17 00:00:00 2001 From: Hynek Schlawack Date: Sat, 13 May 2017 17:44:27 +0200 Subject: Add an informative __main__.py (#620) * Add an informative __main__.py Give users an easy way to figure out what versions they're running. * Why not more info! * Add test * No empty last line * Make @alex happy * DIAF Python 2.6 * Add cffi's version * Make debug a module * Add cryptography's compile-time OpenSSL --- CHANGELOG.rst | 3 ++- INSTALL.rst | 3 ++- src/OpenSSL/debug.py | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/test_debug.py | 10 ++++++++++ tests/test_util.py | 6 +++--- tox.ini | 1 + 6 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/OpenSSL/debug.py create mode 100644 tests/test_debug.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1c7a69d..ae9e359 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -24,7 +24,8 @@ Deprecations: Changes: ^^^^^^^^ -*none* +- Added ``OpenSSL.debug`` that allows to get an overview of used library versions (including linked OpenSSL) and other useful runtime information using ``python -m OpenSSL.debug``. + `#620 `_ ---- diff --git a/INSTALL.rst b/INSTALL.rst index d6c9410..71fe1ed 100644 --- a/INSTALL.rst +++ b/INSTALL.rst @@ -29,12 +29,13 @@ Currently that means: - 1.0.2 - 1.1.0 - If you need support for older releases, the following pinned versions will work: - **OpenSSL 0.9.8**: ``'pyOpenSSL<17.0' 'cryptography<1.4'`` - **OpenSSL 1.0.0**: ``'pyOpenSSL<17.1' 'cryptography<1.7'`` +You can always find out the versions of pyOpenSSL, cryptography, and the linked OpenSSL by running ``python -m OpenSSL.debug``. + Documentation ------------- diff --git a/src/OpenSSL/debug.py b/src/OpenSSL/debug.py new file mode 100644 index 0000000..0d37bf5 --- /dev/null +++ b/src/OpenSSL/debug.py @@ -0,0 +1,42 @@ +from __future__ import print_function + +import ssl +import sys + +import OpenSSL.SSL +import cffi +import cryptography + +from . import version + + +_env_info = u"""\ +pyOpenSSL: {pyopenssl} +cryptography: {cryptography} +cffi: {cffi} +cryptography's compiled against OpenSSL: {crypto_openssl_compile} +cryptography's linked OpenSSL: {crypto_openssl_link} +Pythons's OpenSSL: {python_openssl} +Python executable: {python} +Python version: {python_version} +Platform: {platform} +sys.path: {sys_path}""".format( + pyopenssl=version.__version__, + crypto_openssl_compile=OpenSSL._util.ffi.string( + OpenSSL._util.lib.OPENSSL_VERSION_TEXT, + ).decode("ascii"), + crypto_openssl_link=OpenSSL.SSL.SSLeay_version( + OpenSSL.SSL.SSLEAY_VERSION + ).decode("ascii"), + python_openssl=getattr(ssl, "OPENSSL_VERSION", "n/a"), + cryptography=cryptography.__version__, + cffi=cffi.__version__, + python=sys.executable, + python_version=sys.version, + platform=sys.platform, + sys_path=sys.path, +) + + +if __name__ == "__main__": + print(_env_info) diff --git a/tests/test_debug.py b/tests/test_debug.py new file mode 100644 index 0000000..2d62a3a --- /dev/null +++ b/tests/test_debug.py @@ -0,0 +1,10 @@ +from OpenSSL.debug import _env_info +from OpenSSL import version + + +def test_debug_info(): + """ + Debug info contains correct data. + """ + # Just check a sample we control. + assert version.__version__ in _env_info diff --git a/tests/test_util.py b/tests/test_util.py index 78c97b5..91847e0 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -1,7 +1,7 @@ -from OpenSSL._util import exception_from_error_queue, lib - import pytest +from OpenSSL._util import exception_from_error_queue, lib + class TestErrors(object): """ @@ -9,7 +9,7 @@ class TestErrors(object): """ def test_exception_from_error_queue_nonexistent_reason(self): """ - :py:func:`exception_from_error_queue` raises ``ValueError`` when it + :func:`exception_from_error_queue` raises ``ValueError`` when it encounters an OpenSSL error code which does not have a reason string. """ lib.ERR_put_error(lib.ERR_LIB_EVP, 0, 1112, b"", 10) diff --git a/tox.ini b/tox.ini index 5098d6f..723562e 100644 --- a/tox.ini +++ b/tox.ini @@ -17,6 +17,7 @@ setenv = PIP_NO_BINARY=cryptography commands = openssl version + coverage run --parallel -m OpenSSL.debug coverage run --parallel -m pytest -v {posargs} [testenv:py27-twistedMaster] -- cgit v1.2.1