diff options
author | Donald Stufft <donald@stufft.io> | 2014-01-04 18:01:41 -0800 |
---|---|---|
committer | Donald Stufft <donald@stufft.io> | 2014-01-04 18:01:41 -0800 |
commit | 86b7a8efdc3a7a95a472b00157e4372abd1c064b (patch) | |
tree | 5ea00f7326f3fd05a73eb84cfc1001bab000e1fc | |
parent | d68fd37ec18c5adfa580d989730f7988d72d2bea (diff) | |
parent | 02ed961c963f0d27fe23e9608223ccc8dd3be7f6 (diff) | |
download | cryptography-86b7a8efdc3a7a95a472b00157e4372abd1c064b.tar.gz cryptography-86b7a8efdc3a7a95a472b00157e4372abd1c064b.tar.bz2 cryptography-86b7a8efdc3a7a95a472b00157e4372abd1c064b.zip |
Merge pull request #404 from reaperhulk/commoncrypto-mark
Add mark to skip if binding is not available
-rw-r--r-- | cryptography/hazmat/bindings/openssl/binding.py | 8 | ||||
-rw-r--r-- | cryptography/hazmat/bindings/utils.py | 8 | ||||
-rw-r--r-- | tests/hazmat/bindings/test_bindings.py | 32 | ||||
-rw-r--r-- | tests/hazmat/bindings/test_openssl.py | 3 |
4 files changed, 50 insertions, 1 deletions
diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py index 4f6b99ae..2a1e1184 100644 --- a/cryptography/hazmat/bindings/openssl/binding.py +++ b/cryptography/hazmat/bindings/openssl/binding.py @@ -13,7 +13,9 @@ from __future__ import absolute_import, division, print_function -from cryptography.hazmat.bindings.utils import build_ffi +from cryptography.hazmat.bindings.utils import ( + build_ffi, binding_available +) _OSX_PRE_INCLUDE = """ #ifdef __APPLE__ @@ -79,3 +81,7 @@ class Binding(object): cls.ffi, cls.lib = build_ffi(cls._module_prefix, cls._modules, _OSX_PRE_INCLUDE, _OSX_POST_INCLUDE, ["crypto", "ssl"]) + + @classmethod + def is_available(cls): + return binding_available(cls._ensure_ffi_initialized) diff --git a/cryptography/hazmat/bindings/utils.py b/cryptography/hazmat/bindings/utils.py index 9e1d3937..9141c155 100644 --- a/cryptography/hazmat/bindings/utils.py +++ b/cryptography/hazmat/bindings/utils.py @@ -86,3 +86,11 @@ def build_ffi(module_prefix, modules, pre_include, post_include, libraries): delattr(lib, name) return ffi, lib + + +def binding_available(initializer): + try: + initializer() + return True + except cffi.VerificationError: + return False diff --git a/tests/hazmat/bindings/test_bindings.py b/tests/hazmat/bindings/test_bindings.py new file mode 100644 index 00000000..7af1d581 --- /dev/null +++ b/tests/hazmat/bindings/test_bindings.py @@ -0,0 +1,32 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import cffi + +from cryptography.hazmat.bindings.utils import binding_available +from cryptography.hazmat.bindings.openssl.binding import Binding + + +def dummy_initializer(): + ffi = cffi.FFI() + ffi.verify(source="#include <fake_header.h>") + + +def test_binding_available(): + assert binding_available(Binding._ensure_ffi_initialized) is True + + +def test_binding_unavailable(): + assert binding_available(dummy_initializer) is False diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index 31f736ab..d1e85058 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -20,3 +20,6 @@ class TestOpenSSL(object): assert binding assert binding.lib assert binding.ffi + + def test_is_available(self): + assert Binding.is_available() is True |