-
-From 632d3c9990f7db27f76245895bb4c2717818c5d5 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:26:42 -0500
-Subject: [PATCH 2/9] Add the 3.8 test cases.
-
----
- src/gevent/_ssl3.py | 14 +
- src/gevent/monkey.py | 37 +-
- src/gevent/testing/patched_tests_setup.py | 36 +-
- src/gevent/testing/sysinfo.py | 3 +
- src/greentest/3.8/allsans.pem | 81 +
- src/greentest/3.8/badcert.pem | 36 +
- src/greentest/3.8/badkey.pem | 40 +
- src/greentest/3.8/capath/4e1295a3.0 | 14 +
- src/greentest/3.8/capath/5ed36f99.0 | 41 +
- src/greentest/3.8/capath/6e88d7b8.0 | 14 +
- src/greentest/3.8/capath/99d0fa06.0 | 41 +
- src/greentest/3.8/capath/b1930218.0 | 26 +
- src/greentest/3.8/capath/ceff1710.0 | 26 +
- src/greentest/3.8/ffdh3072.pem | 41 +
- src/greentest/3.8/idnsans.pem | 169 +
- src/greentest/3.8/keycert.passwd.pem | 68 +
- src/greentest/3.8/keycert.pem | 66 +
- src/greentest/3.8/keycert2.pem | 66 +
- src/greentest/3.8/keycert3.pem | 164 +
- src/greentest/3.8/keycert4.pem | 164 +
- src/greentest/3.8/keycertecc.pem | 106 +
- src/greentest/3.8/nokia.pem | 31 +
- src/greentest/3.8/nullbytecert.pem | 90 +
- src/greentest/3.8/nullcert.pem | 0
- src/greentest/3.8/pycacert.pem | 99 +
- src/greentest/3.8/pycakey.pem | 40 +
- src/greentest/3.8/revocation.crl | 14 +
- src/greentest/3.8/secp384r1.pem | 7 +
- .../3.8/selfsigned_pythontestdotnet.pem | 34 +
- src/greentest/3.8/ssl_cert.pem | 26 +
- src/greentest/3.8/ssl_key.passwd.pem | 42 +
- src/greentest/3.8/ssl_key.pem | 40 +
- src/greentest/3.8/talos-2019-0758.pem | 22 +
- src/greentest/3.8/test_asyncore.py | 834 +++
- src/greentest/3.8/test_ftplib.py | 1093 +++
- src/greentest/3.8/test_httplib.py | 1977 ++++++
- src/greentest/3.8/test_select.py | 81 +
- src/greentest/3.8/test_selectors.py | 564 ++
- src/greentest/3.8/test_smtpd.py | 1013 +++
- src/greentest/3.8/test_socket.py | 6278 +++++++++++++++++
- src/greentest/3.8/test_ssl.py | 4652 ++++++++++++
- src/greentest/3.8/test_subprocess.py | 3330 +++++++++
- src/greentest/3.8/test_threading.py | 1382 ++++
- src/greentest/3.8/test_wsgiref.py | 867 +++
- src/greentest/3.8/version | 1 +
- 45 files changed, 23756 insertions(+), 14 deletions(-)
- create mode 100644 src/greentest/3.8/allsans.pem
- create mode 100644 src/greentest/3.8/badcert.pem
- create mode 100644 src/greentest/3.8/badkey.pem
- create mode 100644 src/greentest/3.8/capath/4e1295a3.0
- create mode 100644 src/greentest/3.8/capath/5ed36f99.0
- create mode 100644 src/greentest/3.8/capath/6e88d7b8.0
- create mode 100644 src/greentest/3.8/capath/99d0fa06.0
- create mode 100644 src/greentest/3.8/capath/b1930218.0
- create mode 100644 src/greentest/3.8/capath/ceff1710.0
- create mode 100644 src/greentest/3.8/ffdh3072.pem
- create mode 100644 src/greentest/3.8/idnsans.pem
- create mode 100644 src/greentest/3.8/keycert.passwd.pem
- create mode 100644 src/greentest/3.8/keycert.pem
- create mode 100644 src/greentest/3.8/keycert2.pem
- create mode 100644 src/greentest/3.8/keycert3.pem
- create mode 100644 src/greentest/3.8/keycert4.pem
- create mode 100644 src/greentest/3.8/keycertecc.pem
- create mode 100644 src/greentest/3.8/nokia.pem
- create mode 100644 src/greentest/3.8/nullbytecert.pem
- create mode 100644 src/greentest/3.8/nullcert.pem
- create mode 100644 src/greentest/3.8/pycacert.pem
- create mode 100644 src/greentest/3.8/pycakey.pem
- create mode 100644 src/greentest/3.8/revocation.crl
- create mode 100644 src/greentest/3.8/secp384r1.pem
- create mode 100644 src/greentest/3.8/selfsigned_pythontestdotnet.pem
- create mode 100644 src/greentest/3.8/ssl_cert.pem
- create mode 100644 src/greentest/3.8/ssl_key.passwd.pem
- create mode 100644 src/greentest/3.8/ssl_key.pem
- create mode 100644 src/greentest/3.8/talos-2019-0758.pem
- create mode 100644 src/greentest/3.8/test_asyncore.py
- create mode 100644 src/greentest/3.8/test_ftplib.py
- create mode 100644 src/greentest/3.8/test_httplib.py
- create mode 100644 src/greentest/3.8/test_select.py
- create mode 100644 src/greentest/3.8/test_selectors.py
- create mode 100644 src/greentest/3.8/test_smtpd.py
- create mode 100644 src/greentest/3.8/test_socket.py
- create mode 100644 src/greentest/3.8/test_ssl.py
- create mode 100644 src/greentest/3.8/test_subprocess.py
- create mode 100644 src/greentest/3.8/test_threading.py
- create mode 100644 src/greentest/3.8/test_wsgiref.py
- create mode 100644 src/greentest/3.8/version
-
-=== SKIPPED ===
-From e349789fff94418ff363c3d7ba8d4cf4a5bcd798 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:27:34 -0500
-Subject: [PATCH 3/9] Fix lint.
-
----
- src/gevent/tests/test__core_fork.py | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/gevent/tests/test__core_fork.py b/src/gevent/tests/test__core_fork.py
-index 5717cf7d9..20dc2a4d1 100644
---- a/src/gevent/tests/test__core_fork.py
-+++ b/src/gevent/tests/test__core_fork.py
-@@ -6,7 +6,6 @@
- import multiprocessing
-
- import gevent
--from gevent._compat import MAC
-
- hub = gevent.get_hub()
- pid = os.getpid()
-
-From 5c5d2bc660b599256734a9f5c9e58c79ec4f1b1b Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:28:24 -0500
-Subject: [PATCH 4/9] Fix the other place that refs the version in .travis.yml.
-
----
- .travis.yml | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-#diff --git a/.travis.yml b/.travis.yml
-#index 05dc24b12..c956f6ae7 100644
-#--- a/.travis.yml
-#+++ b/.travis.yml
-#@@ -284,10 +284,10 @@ jobs:
-# # 3.8
-# - <<: *test-libuv-jobs
-# env: TRAVIS_PYTHON_VERSION=3.8
-#- name: libuv36
-#+ name: libuv38
-# - <<: *test-libev-jobs
-# env: TRAVIS_PYTHON_VERSION=3.8
-#- name: libev-cffi36
-#+ name: libev-cffi38
-#
-#
-# # 2.7, no-embed. Run the tests that exercise the libraries we
-#
-From 0a45f740f3afce22c88fd7f9dbe5e30aa7d95336 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:48:09 -0500
-Subject: [PATCH 5/9] Fix false detection in test__all__.
-
----
- .travis.yml | 7 +++++--
- src/gevent/subprocess.py | 45 ++++++++++++++++++++++++----------------
- 2 files changed, 32 insertions(+), 20 deletions(-)
-
-#diff --git a/.travis.yml b/.travis.yml
-#index c956f6ae7..f676bb6e7 100644
-#--- a/.travis.yml
-#+++ b/.travis.yml
-#@@ -198,9 +198,12 @@ jobs:
-# # We only need to do this on one version, and it should be Python 3, because
-# # pylint has stopped updating for Python 2.
-# - stage: test
-#- # We need pylint, since above we're not installing a requirements file
-#+ # We need pylint, since above we're not installing a
-#+ # requirements file. Code added to _ssl3.SSLContext for Python
-#+ # 3.8 triggers an infinite recursion bug in pylint 2.3.1/astroid 2.2.5
-#+ # unless we disable inference.
-# install: pip install pylint
-#- script: python -m pylint --rcfile=.pylintrc gevent
-#+ script: python -m pylint --limit-inference-results=1 --rcfile=.pylintrc gevent
-# env: TRAVIS_PYTHON_VERSION=3.7
-# name: lint37
-#
-#diff --git a/src/gevent/subprocess.py b/src/gevent/subprocess.py
-#index 9b4d13cd2..ed22d863b 100644
-#--- a/src/gevent/subprocess.py
-#+++ b/src/gevent/subprocess.py
-#@@ -70,24 +70,6 @@
-# __implements__.append("_posixsubprocess")
-# _posixsubprocess = None
-#
-#-if PY38:
-#- # Using os.posix_spawn() to start subprocesses
-#- # bypasses our child watchers on certain operating systems,
-#- # and with certain library versions. Possibly the right
-#- # fix is to monkey-patch os.posix_spawn like we do os.fork?
-#- # These have no effect, they're just here to match the stdlib.
-#- # TODO: When available, given a monkey patch on them, I think
-#- # we ought to be able to use them if the stdlib has identified them
-#- # as suitable.
-#- __implements__.extend([
-#- '_use_posix_spawn',
-#- '_USE_POSIX_SPAWN'
-#- ])
-#-
-#- def _use_posix_spawn():
-#- return False
-#-
-#- _USE_POSIX_SPAWN = False
-#
-# # Some symbols we define that we expect to export;
-# # useful for static analysis
-#@@ -183,6 +165,33 @@ def _use_posix_spawn():
-# 'CREATE_BREAKAWAY_FROM_JOB'
-# ])
-#
-#+if PY38:
-#+ # Using os.posix_spawn() to start subprocesses
-#+ # bypasses our child watchers on certain operating systems,
-#+ # and with certain library versions. Possibly the right
-#+ # fix is to monkey-patch os.posix_spawn like we do os.fork?
-#+ # These have no effect, they're just here to match the stdlib.
-#+ # TODO: When available, given a monkey patch on them, I think
-#+ # we ought to be able to use them if the stdlib has identified them
-#+ # as suitable.
-#+ __implements__.extend([
-#+ '_use_posix_spawn',
-#+ ])
-#+
-#+ def _use_posix_spawn():
-#+ return False
-#+
-#+ _USE_POSIX_SPAWN = False
-#+
-#+ if __subprocess__._USE_POSIX_SPAWN:
-#+ __implements__.extend([
-#+ '_USE_POSIX_SPAWN',
-#+ ])
-#+ else:
-#+ __imports__.extend([
-#+ '_USE_POSIX_SPAWN',
-#+ ])
-#+
-# actually_imported = copy_globals(__subprocess__, globals(),
-# only_names=__imports__,
-# ignore_missing_names=True)
-#
-From 412d59d0889bf0d1221c52d902a98a7648f0a829 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 07:04:09 -0500
-Subject: [PATCH 6/9] Hmm, why is test__core giving fits on py38/libuv/travis?
- Can't reproduce locally.
-
----
- appveyor.yml | 1 +
- src/gevent/libuv/_corecffi_source.c | 16 +++++++++-------
- 2 files changed, 10 insertions(+), 7 deletions(-)
-
-#diff --git a/appveyor.yml b/appveyor.yml
-#index 3e5f84f78..ee660e472 100644
-#--- a/appveyor.yml
-#+++ b/appveyor.yml
-#@@ -11,6 +11,7 @@ environment:
-# # too often we get failures to resolve DNS names or failures
-# # to connect on AppVeyor.
-# GEVENTTEST_USE_RESOURCES: "-network"
-#+ PYTHONTRACEMALLOC: 10
-#
-# matrix:
-#
-diff --git a/src/gevent/libuv/_corecffi_source.c b/src/gevent/libuv/_corecffi_source.c
-index 83fe82ee9..3b4b8d156 100644
---- a/src/gevent/libuv/_corecffi_source.c
-+++ b/src/gevent/libuv/_corecffi_source.c
-@@ -150,32 +150,34 @@ static void _gevent_fs_poll_callback3(void* handlep, int status, const uv_stat_t
-
- static void gevent_uv_walk_callback_close(uv_handle_t* handle, void* arg)
- {
-- if( handle && !uv_is_closing(handle) ) {
-- uv_close(handle, NULL);
-- }
-+ if( handle && !uv_is_closing(handle) ) {
-+ uv_close(handle, NULL);
-+ }
- }
-
- static void gevent_close_all_handles(uv_loop_t* loop)
- {
-+ if (loop) {
- uv_walk(loop, gevent_uv_walk_callback_close, NULL);
-+ }
- }
-
- static void gevent_zero_timer(uv_timer_t* handle)
- {
-- memset(handle, 0, sizeof(uv_timer_t));
-+ memset(handle, 0, sizeof(uv_timer_t));
- }
-
- static void gevent_zero_check(uv_check_t* handle)
- {
-- memset(handle, 0, sizeof(uv_check_t));
-+ memset(handle, 0, sizeof(uv_check_t));
- }
-
- static void gevent_zero_prepare(uv_prepare_t* handle)
- {
-- memset(handle, 0, sizeof(uv_prepare_t));
-+ memset(handle, 0, sizeof(uv_prepare_t));
- }
-
- static void gevent_zero_loop(uv_loop_t* handle)
- {
-- memset(handle, 0, sizeof(uv_loop_t));
-+ memset(handle, 0, sizeof(uv_loop_t));
- }
-
-From e52ac513ef66dba47f5312f1870fe2e5b020cb19 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 07:44:37 -0500
-Subject: [PATCH 7/9] Disable that failing test on 3.8b4 for now.
-
----
- src/gevent/tests/test__core.py | 7 +++++++
- src/gevent/tests/test__socket.py | 21 ++++++++++-----------
- 2 files changed, 17 insertions(+), 11 deletions(-)
-
-diff --git a/src/gevent/tests/test__core.py b/src/gevent/tests/test__core.py
-index 1816e0f89..c538ee7aa 100644
---- a/src/gevent/tests/test__core.py
-+++ b/src/gevent/tests/test__core.py
-@@ -2,6 +2,7 @@
- from __future__ import absolute_import, print_function, division
-
- import unittest
-+import sys
- import gevent.testing as greentest
-
- from gevent import core
-@@ -128,6 +129,12 @@ def destroyOne(self, loop):
- "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1380/job/lrlvid6mkjtyrhn5#L1103 "
- "It has also timed out, but only on Appveyor CPython 3.6; local CPython 3.6 does not. "
- "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1414/job/yn7yi8b53vtqs8lw#L1523")
-+@greentest.skipIf(
-+ greentest.LIBUV and greentest.RUNNING_ON_TRAVIS and sys.version_info == (3, 8, 0, 'beta', 4),
-+ "Crashes on 3.8.0b4 on TravisCI. "
-+ "(https://travis-ci.org/gevent/gevent/jobs/582031266#L215) "
-+ "Unable to reproduce locally so far on macOS."
-+)
- class TestWatchersDefaultDestroyed(TestWatchers):
-
- def _makeOne(self):
-#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py
-#index 48f6ee3ed..4a670cdb0 100644
-#--- a/src/gevent/tests/test__socket.py
-#+++ b/src/gevent/tests/test__socket.py
-#@@ -3,15 +3,15 @@
-# from gevent import monkey; monkey.patch_all()
-#
-# import sys
-#-import os
-# import array
-# import socket
-#-import traceback
-# import time
-# import unittest
-#-import gevent.testing as greentest
-# from functools import wraps
-#
-#+from gevent import get_hub
-#+import gevent.testing as greentest
-#+
-# from gevent.testing import six
-# from gevent.testing import LARGE_TIMEOUT
-# from gevent.testing import support
-#@@ -34,8 +34,7 @@ def errors_are_fatal(*args, **kwargs):
-# try:
-# return target(*args, **kwargs)
-# except: # pylint:disable=bare-except
-#- traceback.print_exc()
-#- os._exit(2)
-#+ get_hub().throw(*sys.exc_info())
-#
-# _Thread.__init__(self, target=errors_are_fatal, **kwargs)
-# self.start()
-#@@ -91,18 +90,17 @@ def _test_sendall(self, data, match_data=None, client_method='sendall',
-#
-# def accept_and_read():
-# conn = None
-#+ r = None
-# try:
-# conn, _ = self.listener.accept()
-# r = conn.makefile(mode='rb')
-# read_data.append(r.read())
-# r.flush()
-# r.close()
-#- except: # pylint:disable=bare-except
-#- server_exc_info.append(sys.exc_info())
-# finally:
-#- if conn:
-#- conn.close()
-#- self.listener.close()
-#+ for f in (conn, r, self.listener):
-#+ if f is not None:
-#+ f.close()
-#
-# server = Thread(target=accept_and_read)
-# client = self.create_connection(**client_args)
-#@@ -114,9 +112,10 @@ def accept_and_read():
-# client.close()
-#
-# server.join()
-#+ assert not server.is_alive()
-# if match_data is None:
-# match_data = self.long_data
-#- self.assertEqual(read_data[0], match_data)
-#+ self.assertEqual(read_data, [match_data])
-#
-# if server_exc_info:
-# six.reraise(*server_exc_info[0])
-#
-From 271e58658f7cc839dcde74239c66d1d396d675b7 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 09:02:12 -0500
-Subject: [PATCH 8/9] Whoops, fix Python 2.
-
----
- src/gevent/tests/test__greenness.py | 23 +++++++++++++----------
- src/gevent/tests/test__socket.py | 13 ++++++++-----
- src/gevent/tests/test__ssl.py | 3 ++-
- 3 files changed, 23 insertions(+), 16 deletions(-)
-
-diff --git a/src/gevent/tests/test__greenness.py b/src/gevent/tests/test__greenness.py
-index da4fc948e..71392971f 100644
---- a/src/gevent/tests/test__greenness.py
-+++ b/src/gevent/tests/test__greenness.py
-@@ -29,13 +29,15 @@
- import gevent.testing as greentest
-
- try:
-- import urllib2
--except ImportError:
- from urllib import request as urllib2
--try:
-- import BaseHTTPServer
--except ImportError:
- from http import server as BaseHTTPServer
-+ from http.server import SimpleHTTPRequestHandler
-+except ImportError:
-+ # Python 2
-+ import urllib2
-+ import BaseHTTPServer
-+ from SimpleHTTPServer import SimpleHTTPRequestHandler
-+
-
- import gevent
- from gevent.testing import params
-@@ -47,7 +49,8 @@ class TestGreenness(greentest.TestCase):
- def setUp(self):
- server_address = params.DEFAULT_BIND_ADDR_TUPLE
- BaseHTTPServer.BaseHTTPRequestHandler.protocol_version = "HTTP/1.0"
-- self.httpd = BaseHTTPServer.HTTPServer(server_address, BaseHTTPServer.BaseHTTPRequestHandler)
-+ self.httpd = BaseHTTPServer.HTTPServer(server_address,
-+ SimpleHTTPRequestHandler)
- self.httpd.request_count = 0
-
- def tearDown(self):
-@@ -62,10 +65,10 @@ def test_urllib2(self):
- server = gevent.spawn(self.serve)
-
- port = self.httpd.socket.getsockname()[1]
-- with self.assertRaises(urllib2.HTTPError) as exc:
-- urllib2.urlopen('http://127.0.0.1:%s' % port)
-- self.assertEqual(exc.exception.code, 501)
-- server.get(0.01)
-+ rsp = urllib2.urlopen('http://127.0.0.1:%s' % port)
-+ rsp.read()
-+ rsp.close()
-+ server.join()
- self.assertEqual(self.httpd.request_count, 1)
-
-
-#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py
-#index 4a670cdb0..195ef1af5 100644
-#--- a/src/gevent/tests/test__socket.py
-#+++ b/src/gevent/tests/test__socket.py
-#@@ -9,7 +9,7 @@
-# import unittest
-# from functools import wraps
-#
-#-from gevent import get_hub
-#+from gevent import getcurrent
-# import gevent.testing as greentest
-#
-# from gevent.testing import six
-#@@ -34,7 +34,7 @@ def errors_are_fatal(*args, **kwargs):
-# try:
-# return target(*args, **kwargs)
-# except: # pylint:disable=bare-except
-#- get_hub().throw(*sys.exc_info())
-#+ getcurrent().parent.throw(*sys.exc_info())
-#
-# _Thread.__init__(self, target=errors_are_fatal, **kwargs)
-# self.start()
-#@@ -95,13 +95,16 @@ def accept_and_read():
-# conn, _ = self.listener.accept()
-# r = conn.makefile(mode='rb')
-# read_data.append(r.read())
-#- r.flush()
-#- r.close()
-# finally:
-#- for f in (conn, r, self.listener):
-#+ # Order matters. On Python 2, if we close the
-#+ # connection before closing the makefile,
-#+ # test__ssl fails because the underlying socket
-#+ # has been deleted.
-#+ for f in (r, conn, self.listener):
-# if f is not None:
-# f.close()
-#
-#+
-# server = Thread(target=accept_and_read)
-# client = self.create_connection(**client_args)
-#
-#diff --git a/src/gevent/tests/test__ssl.py b/src/gevent/tests/test__ssl.py
-#index 97b70bd98..537e70773 100644
-#--- a/src/gevent/tests/test__ssl.py
-#+++ b/src/gevent/tests/test__ssl.py
-#@@ -1,3 +1,4 @@
-#+from __future__ import print_function, division, absolute_import
-# from gevent import monkey; monkey.patch_all()
-# import os
-#
-#@@ -5,7 +6,7 @@
-# import gevent.testing as greentest
-# # Be careful not to have TestTCP as a bare attribute in this module,
-# # even aliased, to avoid running duplicate tests
-#-import test__socket
-#+from gevent.tests import test__socket
-# import ssl
-#
-#
-#
-From 158ccf26ff07af1c0737307f67ed118e7a1d6ac1 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 09:27:19 -0500
-Subject: [PATCH 9/9] Implement verify_client_post_handshake; appveyor has TLS
- 1.3 now so those tests are running there.
-
----
- CHANGES.rst | 2 ++
- src/gevent/_ssl3.py | 5 +++++
- src/gevent/tests/known_failures.py | 9 +++++++++
- src/gevent/tests/test__socket.py | 3 ++-
- 4 files changed, 18 insertions(+), 1 deletion(-)
-
-#diff --git a/CHANGES.rst b/CHANGES.rst
-#index 53f4398d2..a4ab7a7ab 100644
-#--- a/CHANGES.rst
-#+++ b/CHANGES.rst
-#@@ -16,6 +16,8 @@
-#
-# - Improve the way joining the main thread works on Python 3.
-#
-#+- Implement ``SSLSocket.verify_client_post_handshake()`` when available.
-#+
-# 1.5a1 (2019-05-02)
-# ==================
-#
-diff --git a/src/gevent/_ssl3.py b/src/gevent/_ssl3.py
-index d3de81034..29988cff0 100644
---- a/src/gevent/_ssl3.py
-+++ b/src/gevent/_ssl3.py
-@@ -678,6 +678,11 @@ def get_channel_binding(self, cb_type="tls-unique"):
- return None
- return self._sslobj.tls_unique_cb()
-
-+ def verify_client_post_handshake(self):
-+ # Only present in 3.7.1+; an attributeerror is alright
-+ if self._sslobj:
-+ return self._sslobj.verify_client_post_handshake()
-+ raise ValueError("No SSL wrapper around " + str(self))
-
- # Python does not support forward declaration of types
- SSLContext.sslsocket_class = SSLSocket
-diff --git a/src/gevent/tests/known_failures.py b/src/gevent/tests/known_failures.py
-index eb1db0da1..d5f38ba91 100644
---- a/src/gevent/tests/known_failures.py
-+++ b/src/gevent/tests/known_failures.py
-@@ -351,6 +351,15 @@
- 'test__example_webproxy.py',
- ]
-
-+if APPVEYOR:
-+ # Strange failures sometimes, but only on Python 3.7, reporting
-+ # "ConnectionAbortedError: [WinError 10053] An established
-+ # connection was aborted by the software in your host machine"
-+ # when we've done no such thing. Try running not in parallel
-+ RUN_ALONE += [
-+ 'test__ssl.py',
-+ 'test__server.py',
-+ ]
-
-
- if APPVEYOR or TRAVIS:
-#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py
-#index 195ef1af5..4976d5767 100644
-#--- a/src/gevent/tests/test__socket.py
-#+++ b/src/gevent/tests/test__socket.py
-#@@ -29,12 +29,13 @@ class Thread(_Thread):
-#
-# def __init__(self, **kwargs):
-# target = kwargs.pop('target')
-#+ caller = getcurrent()
-# @wraps(target)
-# def errors_are_fatal(*args, **kwargs):
-# try:
-# return target(*args, **kwargs)
-# except: # pylint:disable=bare-except
-#- getcurrent().parent.throw(*sys.exc_info())
-#+ caller.throw(*sys.exc_info())
-#
-# _Thread.__init__(self, target=errors_are_fatal, **kwargs)
-# self.start()
---- gevent-1.4.0/src/gevent/thread.py.orig 2019-01-04 12:51:44.000000000 +0100
-+++ gevent-1.4.0/src/gevent/thread.py 2020-01-03 21:14:08.922889769 +0100
-@@ -31,6 +31,8 @@
- 'exit_thread',
- 'interrupt_main',
- 'start_new']
-+ if sys.version_info[:2] >= (3, 8):
-+ __imports__.append('get_native_id')
- error = __thread__.error
- from gevent._compat import PY3
- from gevent._compat import PYPY
---- gevent-1.4.0/src/gevent/_tblib.py.orig 2019-01-04 12:51:44.000000000 +0100
-+++ gevent-1.4.0/src/gevent/_tblib.py 2020-01-03 21:25:28.152543399 +0100
-@@ -198,6 +198,9 @@
- while current:
- f_code = current.tb_frame.f_code
- code = compile('\n' * (current.tb_lineno - 1) + 'raise __traceback_maker', current.tb_frame.f_code.co_filename, 'exec')
-- if PY3:
-+ if hasattr(code, "replace"):
-+ # Python 3.8 and newer
-+ code = code.replace(co_argcount=0, co_freevars=(), co_cellvars=())
-+ elif PY3:
- code = CodeType(
- 0, code.co_kwonlyargcount,
---- gevent-1.4.0/src/gevent/_socketcommon.py.orig 2019-01-04 12:51:44.000000000 +0100
-+++ gevent-1.4.0/src/gevent/_socketcommon.py 2020-01-06 15:00:51.236688228 +0100
-@@ -74,6 +74,12 @@
- from gevent._compat import string_types, integer_types, PY3
- from gevent._util import copy_globals
-
-+if sys.version_info[:2] >= (3, 8):
-+ __imports__.extend([
-+ 'create_server',
-+ 'has_dualstack_ipv6'
-+ ])
-+
- is_windows = sys.platform == 'win32'
- is_macos = sys.platform == 'darwin'
-