Merge pull request #347 from hynek/more-test_ssl

More test ssl
diff --git a/OpenSSL/test/test_ssl.py b/OpenSSL/test/test_ssl.py
index cb92020..b4c42af 100644
--- a/OpenSSL/test/test_ssl.py
+++ b/OpenSSL/test/test_ssl.py
@@ -7,7 +7,7 @@
 
 from gc import collect, get_referrers
 from errno import ECONNREFUSED, EINPROGRESS, EWOULDBLOCK, EPIPE, ESHUTDOWN
-from sys import platform, getfilesystemencoding
+from sys import platform, getfilesystemencoding, version_info
 from socket import MSG_PEEK, SHUT_RDWR, error, socket
 from os import makedirs
 from os.path import join
@@ -100,6 +100,10 @@
 
 
 skip_if_py3 = pytest.mark.skipif(PY3, reason="Python 2 only")
+skip_if_py26 = pytest.mark.skipif(
+    version_info[0:2] == (2, 6),
+    reason="Python 2.7 and later only"
+)
 
 
 def join_bytes_or_unicode(prefix, suffix):
@@ -2461,9 +2465,9 @@
 
     def test_set_session_wrong_args(self):
         """
-        If called with an object that is not an instance of :py:class:`Session`,
-        or with other than one argument, :py:obj:`Connection.set_session` raises
-        :py:obj:`TypeError`.
+        If called with an object that is not an instance of
+        :py:class:`Session`, or with other than one argument,
+        :py:obj:`Connection.set_session` raises :py:obj:`TypeError`.
         """
         ctx = Context(TLSv1_METHOD)
         connection = Connection(ctx, None)
@@ -2624,11 +2628,11 @@
 
     def test_tls_finished_message_symmetry(self):
         """
-        The TLS Finished message send by server must be the TLS Finished message
-        received by client.
+        The TLS Finished message send by server must be the TLS Finished
+        message received by client.
 
-        The TLS Finished message send by client must be the TLS Finished message
-        received by server.
+        The TLS Finished message send by client must be the TLS Finished
+        message received by server.
         """
         server, client = self._loopback()
 
@@ -2741,13 +2745,12 @@
     """
     def test_wrong_args(self):
         """
-        :py:obj:`Connection.get_cipher_list` raises :py:obj:`TypeError` if called with any
-        arguments.
+        :py:obj:`Connection.get_cipher_list` raises :py:obj:`TypeError` if
+        called with any arguments.
         """
         connection = Connection(Context(TLSv1_METHOD), None)
         self.assertRaises(TypeError, connection.get_cipher_list, None)
 
-
     def test_result(self):
         """
         :py:obj:`Connection.get_cipher_list` returns a :py:obj:`list` of
@@ -2760,7 +2763,6 @@
             self.assertTrue(isinstance(cipher, str))
 
 
-
 class ConnectionSendTests(TestCase, _LoopbackMixin):
     """
     Tests for :py:obj:`Connection.send`
@@ -2776,18 +2778,16 @@
         self.assertRaises(TypeError, connection.send, object())
         self.assertRaises(TypeError, connection.send, "foo", object(), "bar")
 
-
     def test_short_bytes(self):
         """
-        When passed a short byte string, :py:obj:`Connection.send` transmits all of it
-        and returns the number of bytes sent.
+        When passed a short byte string, :py:obj:`Connection.send` transmits
+        all of it and returns the number of bytes sent.
         """
         server, client = self._loopback()
         count = server.send(b('xy'))
         self.assertEquals(count, 2)
         self.assertEquals(client.recv(2), b('xy'))
 
-
     def test_text(self):
         """
         When passed a text, :py:obj:`Connection.send` transmits all of it and
@@ -2807,39 +2807,29 @@
         self.assertEquals(count, 2)
         self.assertEquals(client.recv(2), b"xy")
 
-    try:
-        memoryview
-    except NameError:
-        "cannot test sending memoryview without memoryview"
-    else:
-        def test_short_memoryview(self):
-            """
-            When passed a memoryview onto a small number of bytes,
-            :py:obj:`Connection.send` transmits all of them and returns the number of
-            bytes sent.
-            """
-            server, client = self._loopback()
-            count = server.send(memoryview(b('xy')))
-            self.assertEquals(count, 2)
-            self.assertEquals(client.recv(2), b('xy'))
+    @skip_if_py26
+    def test_short_memoryview(self):
+        """
+        When passed a memoryview onto a small number of bytes,
+        :py:obj:`Connection.send` transmits all of them and returns the number
+        of bytes sent.
+        """
+        server, client = self._loopback()
+        count = server.send(memoryview(b('xy')))
+        self.assertEquals(count, 2)
+        self.assertEquals(client.recv(2), b('xy'))
 
-
-    try:
-        buffer
-    except NameError:
-        "cannot test sending buffer without buffer"
-    else:
-        def test_short_buffer(self):
-            """
-            When passed a buffer containing a small number of bytes,
-            :py:obj:`Connection.send` transmits all of them and returns the number of
-            bytes sent.
-            """
-            server, client = self._loopback()
-            count = server.send(buffer(b('xy')))
-            self.assertEquals(count, 2)
-            self.assertEquals(client.recv(2), b('xy'))
-
+    @skip_if_py3
+    def test_short_buffer(self):
+        """
+        When passed a buffer containing a small number of bytes,
+        :py:obj:`Connection.send` transmits all of them and returns the number
+        of bytes sent.
+        """
+        server, client = self._loopback()
+        count = server.send(buffer(b('xy')))
+        self.assertEquals(count, 2)
+        self.assertEquals(client.recv(2), b('xy'))
 
 
 def _make_memoryview(size):
@@ -2850,7 +2840,6 @@
     return memoryview(bytearray(size))
 
 
-
 class ConnectionRecvIntoTests(TestCase, _LoopbackMixin):
     """
     Tests for :py:obj:`Connection.recv_into`
@@ -2869,7 +2858,6 @@
         self.assertEqual(client.recv_into(output_buffer), 2)
         self.assertEqual(output_buffer, bytearray(b('xy\x00\x00\x00')))
 
-
     def test_bytearray_no_length(self):
         """
         :py:obj:`Connection.recv_into` can be passed a ``bytearray`` instance
@@ -2877,7 +2865,6 @@
         """
         self._no_length_test(bytearray)
 
-
     def _respects_length_test(self, factory):
         """
         Assert that when the given buffer is passed to ``Connection.recv_into``
@@ -2894,7 +2881,6 @@
             output_buffer, bytearray(b('abcde\x00\x00\x00\x00\x00'))
         )
 
-
     def test_bytearray_respects_length(self):
         """
         When called with a ``bytearray`` instance,
@@ -2903,7 +2889,6 @@
         """
         self._respects_length_test(bytearray)
 
-
     def _doesnt_overfill_test(self, factory):
         """
         Assert that if there are more bytes available to be read from the
@@ -2921,7 +2906,6 @@
         rest = client.recv(5)
         self.assertEqual(b('fghij'), rest)
 
-
     def test_bytearray_doesnt_overfill(self):
         """
         When called with a ``bytearray`` instance,
@@ -2930,7 +2914,6 @@
         """
         self._doesnt_overfill_test(bytearray)
 
-
     def _really_doesnt_overfill_test(self, factory):
         """
         Assert that if the value given by ``nbytes`` is greater than the actual
@@ -2947,7 +2930,6 @@
         rest = client.recv(5)
         self.assertEqual(b('fghij'), rest)
 
-
     def test_bytearray_really_doesnt_overfill(self):
         """
         When called with a ``bytearray`` instance and an ``nbytes`` value that
@@ -2957,7 +2939,6 @@
         """
         self._doesnt_overfill_test(bytearray)
 
-
     def test_peek(self):
 
         server, client = self._loopback()
@@ -2965,50 +2946,45 @@
 
         for _ in range(2):
             output_buffer = bytearray(5)
-            self.assertEqual(client.recv_into(output_buffer, flags=MSG_PEEK), 2)
+            self.assertEqual(
+                client.recv_into(output_buffer, flags=MSG_PEEK), 2)
             self.assertEqual(output_buffer, bytearray(b('xy\x00\x00\x00')))
 
+    @skip_if_py26
+    def test_memoryview_no_length(self):
+        """
+        :py:obj:`Connection.recv_into` can be passed a ``memoryview``
+        instance and data in the receive buffer is written to it.
+        """
+        self._no_length_test(_make_memoryview)
 
-    try:
-        memoryview
-    except NameError:
-        "cannot test recv_into memoryview without memoryview"
-    else:
-        def test_memoryview_no_length(self):
-            """
-            :py:obj:`Connection.recv_into` can be passed a ``memoryview``
-            instance and data in the receive buffer is written to it.
-            """
-            self._no_length_test(_make_memoryview)
+    @skip_if_py26
+    def test_memoryview_respects_length(self):
+        """
+        When called with a ``memoryview`` instance,
+        :py:obj:`Connection.recv_into` respects the ``nbytes`` parameter
+        and doesn't copy more than that number of bytes in.
+        """
+        self._respects_length_test(_make_memoryview)
 
+    @skip_if_py26
+    def test_memoryview_doesnt_overfill(self):
+        """
+        When called with a ``memoryview`` instance,
+        :py:obj:`Connection.recv_into` respects the size of the array and
+        doesn't write more bytes into it than will fit.
+        """
+        self._doesnt_overfill_test(_make_memoryview)
 
-        def test_memoryview_respects_length(self):
-            """
-            When called with a ``memoryview`` instance,
-            :py:obj:`Connection.recv_into` respects the ``nbytes`` parameter
-            and doesn't copy more than that number of bytes in.
-            """
-            self._respects_length_test(_make_memoryview)
-
-
-        def test_memoryview_doesnt_overfill(self):
-            """
-            When called with a ``memoryview`` instance,
-            :py:obj:`Connection.recv_into` respects the size of the array and
-            doesn't write more bytes into it than will fit.
-            """
-            self._doesnt_overfill_test(_make_memoryview)
-
-
-        def test_memoryview_really_doesnt_overfill(self):
-            """
-            When called with a ``memoryview`` instance and an ``nbytes`` value
-            that is too large, :py:obj:`Connection.recv_into` respects the size
-            of the array and not the ``nbytes`` value and doesn't write more
-            bytes into the buffer than will fit.
-            """
-            self._doesnt_overfill_test(_make_memoryview)
-
+    @skip_if_py26
+    def test_memoryview_really_doesnt_overfill(self):
+        """
+        When called with a ``memoryview`` instance and an ``nbytes`` value
+        that is too large, :py:obj:`Connection.recv_into` respects the size
+        of the array and not the ``nbytes`` value and doesn't write more
+        bytes into the buffer than will fit.
+        """
+        self._doesnt_overfill_test(_make_memoryview)
 
 
 class ConnectionSendallTests(TestCase, _LoopbackMixin):