Change the info callback test to at least assert that the connection argument is a Connection instance.

Fix the implementation to make the test pass.
diff --git a/OpenSSL/SSL.py b/OpenSSL/SSL.py
index 81ec2e2..f21ad9d 100644
--- a/OpenSSL/SSL.py
+++ b/OpenSSL/SSL.py
@@ -699,7 +699,7 @@
         """
         @wraps(callback)
         def wrapper(ssl, where, return_code):
-            callback(self, where, return_code)
+            callback(Connection._reverse_mapping[ssl], where, return_code)
         self._info_callback = _ffi.callback(
             "void (*)(const SSL *, int, int)", wrapper)
         _lib.SSL_CTX_set_info_callback(self._context, self._info_callback)
diff --git a/OpenSSL/test/test_ssl.py b/OpenSSL/test/test_ssl.py
index e3518c5..712009b 100644
--- a/OpenSSL/test/test_ssl.py
+++ b/OpenSSL/test/test_ssl.py
@@ -700,15 +700,19 @@
         serverSSL = Connection(context, server)
         serverSSL.set_accept_state()
 
-        while not called:
-            for ssl in clientSSL, serverSSL:
-                try:
-                    ssl.do_handshake()
-                except WantReadError:
-                    pass
+        handshake(clientSSL, serverSSL)
 
-        # Kind of lame.  Just make sure it got called somehow.
-        self.assertTrue(called)
+        # The callback must always be called with the connection it is a
+        # callback for as the first argument.  It would probably be better to
+        # split this into separate tests for client and server side info
+        # callbacks.  It would also be good to at least assert *something*
+        # about `where` and `ret`.
+        notConnections = [
+            conn for (conn, where, ret) in called
+            if not isinstance(conn, Connection)]
+        self.assertEqual(
+            [], notConnections,
+            "Some info callback arguments were not Connection instaces.")
 
 
     def _load_verify_locations_test(self, *args):