]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
test: Adopt abstract_base_test in netutil_test.py
authorBen Darnell <ben@bendarnell.com>
Thu, 11 Jul 2024 18:35:32 +0000 (14:35 -0400)
committerBen Darnell <ben@bendarnell.com>
Thu, 11 Jul 2024 18:35:32 +0000 (14:35 -0400)
tornado/test/netutil_test.py

index 0f0bb2a915fcef64da7708fd20a1c90319dd5559..ef82cba85f8c2a466290df79c687f18bdc666db7 100644 (file)
@@ -15,13 +15,10 @@ from tornado.netutil import (
     bind_sockets,
 )
 from tornado.testing import AsyncTestCase, gen_test, bind_unused_port
-from tornado.test.util import skipIfNoNetwork
+from tornado.test.util import skipIfNoNetwork, abstract_base_test
 
 import typing
 
-if typing.TYPE_CHECKING:
-    from typing import List  # noqa: F401
-
 try:
     import pycares  # type: ignore
 except ImportError:
@@ -30,11 +27,12 @@ else:
     from tornado.platform.caresresolver import CaresResolver
 
 
-class _ResolverTestMixin:
+@abstract_base_test
+class _ResolverTestMixin(AsyncTestCase):
     resolver = None  # type: typing.Any
 
     @gen_test
-    def test_localhost(self: typing.Any):
+    def test_localhost(self):
         addrinfo = yield self.resolver.resolve("localhost", 80, socket.AF_UNSPEC)
         # Most of the time localhost resolves to either the ipv4 loopback
         # address alone, or ipv4+ipv6. But some versions of pycares will only
@@ -48,11 +46,12 @@ class _ResolverTestMixin:
 
 # It is impossible to quickly and consistently generate an error in name
 # resolution, so test this case separately, using mocks as needed.
-class _ResolverErrorTestMixin:
+@abstract_base_test
+class _ResolverErrorTestMixin(AsyncTestCase):
     resolver = None  # type: typing.Any
 
     @gen_test
-    def test_bad_host(self: typing.Any):
+    def test_bad_host(self):
         with self.assertRaises(IOError):
             yield self.resolver.resolve("an invalid domain", 80, socket.AF_UNSPEC)
 
@@ -63,7 +62,7 @@ def _failing_getaddrinfo(*args):
 
 
 @skipIfNoNetwork
-class BlockingResolverTest(AsyncTestCase, _ResolverTestMixin):
+class BlockingResolverTest(_ResolverTestMixin):
     def setUp(self):
         super().setUp()
         self.resolver = BlockingResolver()
@@ -72,7 +71,7 @@ class BlockingResolverTest(AsyncTestCase, _ResolverTestMixin):
 # getaddrinfo-based tests need mocking to reliably generate errors;
 # some configurations are slow to produce errors and take longer than
 # our default timeout.
-class BlockingResolverErrorTest(AsyncTestCase, _ResolverErrorTestMixin):
+class BlockingResolverErrorTest(_ResolverErrorTestMixin):
     def setUp(self):
         super().setUp()
         self.resolver = BlockingResolver()
@@ -84,7 +83,7 @@ class BlockingResolverErrorTest(AsyncTestCase, _ResolverErrorTestMixin):
         super().tearDown()
 
 
-class OverrideResolverTest(AsyncTestCase, _ResolverTestMixin):
+class OverrideResolverTest(_ResolverTestMixin):
     def setUp(self):
         super().setUp()
         mapping = {
@@ -109,7 +108,7 @@ class OverrideResolverTest(AsyncTestCase, _ResolverTestMixin):
 
 
 @skipIfNoNetwork
-class ThreadedResolverTest(AsyncTestCase, _ResolverTestMixin):
+class ThreadedResolverTest(_ResolverTestMixin):
     def setUp(self):
         super().setUp()
         self.resolver = ThreadedResolver()
@@ -119,7 +118,7 @@ class ThreadedResolverTest(AsyncTestCase, _ResolverTestMixin):
         super().tearDown()
 
 
-class ThreadedResolverErrorTest(AsyncTestCase, _ResolverErrorTestMixin):
+class ThreadedResolverErrorTest(_ResolverErrorTestMixin):
     def setUp(self):
         super().setUp()
         self.resolver = BlockingResolver()
@@ -164,7 +163,7 @@ class ThreadedResolverImportTest(unittest.TestCase):
 @unittest.skipIf(pycares is None, "pycares module not present")
 @unittest.skipIf(sys.platform == "win32", "pycares doesn't return loopback on windows")
 @unittest.skipIf(sys.platform == "darwin", "pycares doesn't return 127.0.0.1 on darwin")
-class CaresResolverTest(AsyncTestCase, _ResolverTestMixin):
+class CaresResolverTest(_ResolverTestMixin):
     def setUp(self):
         super().setUp()
         self.resolver = CaresResolver()
@@ -203,12 +202,12 @@ class TestPortAllocation(unittest.TestCase):
         not hasattr(socket, "SO_REUSEPORT"), "SO_REUSEPORT is not supported"
     )
     def test_reuse_port(self):
-        sockets = []  # type: List[socket.socket]
-        socket, port = bind_unused_port(reuse_port=True)
+        sockets: typing.List[socket.socket] = []
+        sock, port = bind_unused_port(reuse_port=True)
         try:
             sockets = bind_sockets(port, "127.0.0.1", reuse_port=True)
             self.assertTrue(all(s.getsockname()[1] == port for s in sockets))
         finally:
-            socket.close()
+            sock.close()
             for sock in sockets:
                 sock.close()