[3.13] gh-71339: Use new assertion methods in the http tests (GH-129058) (GH-132500)

(cherry picked from commit 7076d076c2)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
Miss Islington (bot) 2025-05-22 11:40:26 +02:00 committed by GitHub
parent 6126b7cf88
commit ba9f533f93
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 32 additions and 31 deletions

View file

@ -6,6 +6,7 @@
import re
from test.support import os_helper
from test.support import warnings_helper
from test.support.testcase import ExtraAssertions
import time
import unittest
import urllib.request
@ -1436,7 +1437,7 @@ def cookiejar_from_cookie_headers(headers):
self.assertIsNone(cookie.expires)
class LWPCookieTests(unittest.TestCase):
class LWPCookieTests(unittest.TestCase, ExtraAssertions):
# Tests taken from libwww-perl, with a few modifications and additions.
def test_netscape_example_1(self):
@ -1528,7 +1529,7 @@ def test_netscape_example_1(self):
h = req.get_header("Cookie")
self.assertIn("PART_NUMBER=ROCKET_LAUNCHER_0001", h)
self.assertIn("CUSTOMER=WILE_E_COYOTE", h)
self.assertTrue(h.startswith("SHIPPING=FEDEX;"))
self.assertStartsWith(h, "SHIPPING=FEDEX;")
def test_netscape_example_2(self):
# Second Example transaction sequence:

View file

@ -6,9 +6,10 @@
from http import cookies
import pickle
from test import support
from test.support.testcase import ExtraAssertions
class CookieTests(unittest.TestCase):
class CookieTests(unittest.TestCase, ExtraAssertions):
def test_basic(self):
cases = [
@ -180,7 +181,7 @@ def test_special_attrs(self):
C = cookies.SimpleCookie('Customer="WILE_E_COYOTE"')
C['Customer']['expires'] = 0
# can't test exact output, it always depends on current date/time
self.assertTrue(C.output().endswith('GMT'))
self.assertEndsWith(C.output(), 'GMT')
# loading 'expires'
C = cookies.SimpleCookie()

View file

@ -16,6 +16,7 @@
from test import support
from test.support import os_helper
from test.support import socket_helper
from test.support.testcase import ExtraAssertions
support.requires_working_socket(module=True)
@ -134,7 +135,7 @@ def connect(self):
def create_connection(self, *pos, **kw):
return FakeSocket(*self.fake_socket_args)
class HeaderTests(TestCase):
class HeaderTests(TestCase, ExtraAssertions):
def test_auto_headers(self):
# Some headers are added automatically, but should not be added by
# .request() if they are explicitly set.
@ -273,7 +274,7 @@ def test_ipv6host_header(self):
sock = FakeSocket('')
conn.sock = sock
conn.request('GET', '/foo')
self.assertTrue(sock.data.startswith(expected))
self.assertStartsWith(sock.data, expected)
expected = b'GET /foo HTTP/1.1\r\nHost: [2001:102A::]\r\n' \
b'Accept-Encoding: identity\r\n\r\n'
@ -281,7 +282,7 @@ def test_ipv6host_header(self):
sock = FakeSocket('')
conn.sock = sock
conn.request('GET', '/foo')
self.assertTrue(sock.data.startswith(expected))
self.assertStartsWith(sock.data, expected)
expected = b'GET /foo HTTP/1.1\r\nHost: [fe80::]\r\n' \
b'Accept-Encoding: identity\r\n\r\n'
@ -289,7 +290,7 @@ def test_ipv6host_header(self):
sock = FakeSocket('')
conn.sock = sock
conn.request('GET', '/foo')
self.assertTrue(sock.data.startswith(expected))
self.assertStartsWith(sock.data, expected)
expected = b'GET /foo HTTP/1.1\r\nHost: [fe80::]:81\r\n' \
b'Accept-Encoding: identity\r\n\r\n'
@ -297,7 +298,7 @@ def test_ipv6host_header(self):
sock = FakeSocket('')
conn.sock = sock
conn.request('GET', '/foo')
self.assertTrue(sock.data.startswith(expected))
self.assertStartsWith(sock.data, expected)
def test_malformed_headers_coped_with(self):
# Issue 19996
@ -335,9 +336,9 @@ def test_parse_all_octets(self):
self.assertIsNotNone(resp.getheader('obs-text'))
self.assertIn('obs-text', resp.msg)
for folded in (resp.getheader('obs-fold'), resp.msg['obs-fold']):
self.assertTrue(folded.startswith('text'))
self.assertStartsWith(folded, 'text')
self.assertIn(' folded with space', folded)
self.assertTrue(folded.endswith('folded with tab'))
self.assertEndsWith(folded, 'folded with tab')
def test_invalid_headers(self):
conn = client.HTTPConnection('example.com')
@ -537,7 +538,7 @@ def _parse_chunked(self, data):
return b''.join(body)
class BasicTest(TestCase):
class BasicTest(TestCase, ExtraAssertions):
def test_dir_with_added_behavior_on_status(self):
# see issue40084
self.assertTrue({'description', 'name', 'phrase', 'value'} <= set(dir(HTTPStatus(404))))
@ -989,8 +990,7 @@ def test_send_file(self):
sock = FakeSocket(body)
conn.sock = sock
conn.request('GET', '/foo', body)
self.assertTrue(sock.data.startswith(expected), '%r != %r' %
(sock.data[:len(expected)], expected))
self.assertStartsWith(sock.data, expected)
def test_send(self):
expected = b'this is a test this is only a test'
@ -1494,7 +1494,7 @@ def _encode_request(self, str_url):
conn.putrequest('GET', '/☃')
class ExtendedReadTest(TestCase):
class ExtendedReadTest(TestCase, ExtraAssertions):
"""
Test peek(), read1(), readline()
"""
@ -1553,7 +1553,7 @@ def mypeek(n=-1):
# then unbounded peek
p2 = resp.peek()
self.assertGreaterEqual(len(p2), len(p))
self.assertTrue(p2.startswith(p))
self.assertStartsWith(p2, p)
next = resp.read(len(p2))
self.assertEqual(next, p2)
else:
@ -1578,7 +1578,7 @@ def _verify_readline(self, readline, expected, limit=5):
line = readline(limit)
if line and line != b"foo":
if len(line) < 5:
self.assertTrue(line.endswith(b"\n"))
self.assertEndsWith(line, b"\n")
all.append(line)
if not line:
break
@ -1687,7 +1687,7 @@ def readline(self, limit):
raise
class OfflineTest(TestCase):
class OfflineTest(TestCase, ExtraAssertions):
def test_all(self):
# Documented objects defined in the module should be in __all__
expected = {"responses"} # Allowlist documented dict() object
@ -1773,7 +1773,7 @@ def test_client_constants(self):
]
for const in expected:
with self.subTest(constant=const):
self.assertTrue(hasattr(client, const))
self.assertHasAttr(client, const)
class SourceAddressTest(TestCase):
@ -2241,7 +2241,7 @@ def test_getting_header_defaultint(self):
header = self.resp.getheader('No-Such-Header',default=42)
self.assertEqual(header, 42)
class TunnelTests(TestCase):
class TunnelTests(TestCase, ExtraAssertions):
def setUp(self):
response_text = (
'HTTP/1.1 200 OK\r\n\r\n' # Reply to CONNECT
@ -2415,8 +2415,7 @@ def test_tunnel_connect_single_send_connection_setup(self):
msg=f'unexpected number of send calls: {mock_send.mock_calls}')
proxy_setup_data_sent = mock_send.mock_calls[0][1][0]
self.assertIn(b'CONNECT destination.com', proxy_setup_data_sent)
self.assertTrue(
proxy_setup_data_sent.endswith(b'\r\n\r\n'),
self.assertEndsWith(proxy_setup_data_sent, b'\r\n\r\n',
msg=f'unexpected proxy data sent {proxy_setup_data_sent!r}')
def test_connect_put_request(self):

View file

@ -33,6 +33,7 @@
from test.support import (
is_apple, os_helper, requires_subprocess, threading_helper
)
from test.support.testcase import ExtraAssertions
support.requires_working_socket(module=True)
@ -66,7 +67,7 @@ def stop(self):
self.join()
class BaseTestCase(unittest.TestCase):
class BaseTestCase(unittest.TestCase, ExtraAssertions):
def setUp(self):
self._threads = threading_helper.threading_setup()
os.environ = os_helper.EnvironmentVarGuard()
@ -335,8 +336,7 @@ def test_get(self):
self.con.request('GET', '/')
self.con.getresponse()
self.assertTrue(
err.getvalue().endswith('"GET / HTTP/1.1" 200 -\n'))
self.assertEndsWith(err.getvalue(), '"GET / HTTP/1.1" 200 -\n')
def test_err(self):
self.con = http.client.HTTPConnection(self.HOST, self.PORT)
@ -347,8 +347,8 @@ def test_err(self):
self.con.getresponse()
lines = err.getvalue().split('\n')
self.assertTrue(lines[0].endswith('code 404, message File not found'))
self.assertTrue(lines[1].endswith('"ERROR / HTTP/1.1" 404 -'))
self.assertEndsWith(lines[0], 'code 404, message File not found')
self.assertEndsWith(lines[1], '"ERROR / HTTP/1.1" 404 -')
class SimpleHTTPServerTestCase(BaseTestCase):
@ -550,7 +550,7 @@ def test_get_dir_redirect_location_domain_injection_bug(self):
response = self.request(attack_url)
self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY)
location = response.getheader('Location')
self.assertFalse(location.startswith('//'), msg=location)
self.assertNotStartsWith(location, '//')
self.assertEqual(location, expected_location,
msg='Expected Location header to start with a single / and '
'end with a / as this is a directory redirect.')
@ -573,7 +573,7 @@ def test_get_dir_redirect_location_domain_injection_bug(self):
# We're just ensuring that the scheme and domain make it through, if
# there are or aren't multiple slashes at the start of the path that
# follows that isn't important in this Location: header.
self.assertTrue(location.startswith('https://pypi.org/'), msg=location)
self.assertStartsWith(location, 'https://pypi.org/')
def test_get(self):
#constructs the path relative to the root directory of the HTTPServer
@ -1074,7 +1074,7 @@ def numWrites(self):
return len(self.datas)
class BaseHTTPRequestHandlerTestCase(unittest.TestCase):
class BaseHTTPRequestHandlerTestCase(unittest.TestCase, ExtraAssertions):
"""Test the functionality of the BaseHTTPServer.
Test the support for the Expect 100-continue header.
@ -1162,7 +1162,7 @@ def test_extra_space(self):
b'Host: dummy\r\n'
b'\r\n'
)
self.assertTrue(result[0].startswith(b'HTTP/1.1 400 '))
self.assertStartsWith(result[0], b'HTTP/1.1 400 ')
self.verify_expected_headers(result[1:result.index(b'\r\n')])
self.assertFalse(self.handler.get_called)