bpo-35998: Fix test_asyncio.test_start_tls_server_1() (GH-16815) · python/cpython@fab4ef2 (original) (raw)

`@@ -497,14 +497,6 @@ def test_start_tls_server_1(self):

`

497

497

``

498

498

`server_context = test_utils.simple_server_sslcontext()

`

499

499

`client_context = test_utils.simple_client_sslcontext()

`

500

``

`-

if (sys.platform.startswith('freebsd')

`

501

``

`-

or sys.platform.startswith('win')

`

502

``

`-

or sys.platform.startswith('darwin')):

`

503

``

`-

bpo-35031: Some FreeBSD and Windows buildbots fail to run this test

`

504

``

`-

as the eof was not being received by the server if the payload

`

505

``

`-

size is not big enough. This behaviour only appears if the

`

506

``

`-

client is using TLS1.3. Also seen on macOS.

`

507

``

`-

client_context.options |= ssl.OP_NO_TLSv1_3

`

508

500

`answer = None

`

509

501

``

510

502

`def client(sock, addr):

`

`@@ -521,9 +513,10 @@ def client(sock, addr):

`

521

513

`sock.close()

`

522

514

``

523

515

`class ServerProto(asyncio.Protocol):

`

524

``

`-

def init(self, on_con, on_con_lost):

`

``

516

`+

def init(self, on_con, on_con_lost, on_got_hello):

`

525

517

`self.on_con = on_con

`

526

518

`self.on_con_lost = on_con_lost

`

``

519

`+

self.on_got_hello = on_got_hello

`

527

520

`self.data = b''

`

528

521

`self.transport = None

`

529

522

``

`@@ -537,7 +530,7 @@ def replace_transport(self, tr):

`

537

530

`def data_received(self, data):

`

538

531

`self.data += data

`

539

532

`if len(self.data) >= len(HELLO_MSG):

`

540

``

`-

self.transport.write(ANSWER)

`

``

533

`+

self.on_got_hello.set_result(None)

`

541

534

``

542

535

`def connection_lost(self, exc):

`

543

536

`self.transport = None

`

`@@ -546,7 +539,7 @@ def connection_lost(self, exc):

`

546

539

`else:

`

547

540

`self.on_con_lost.set_exception(exc)

`

548

541

``

549

``

`-

async def main(proto, on_con, on_con_lost):

`

``

542

`+

async def main(proto, on_con, on_con_lost, on_got_hello):

`

550

543

`tr = await on_con

`

551

544

`tr.write(HELLO_MSG)

`

552

545

``

`@@ -556,17 +549,20 @@ async def main(proto, on_con, on_con_lost):

`

556

549

`tr, proto, server_context,

`

557

550

`server_side=True,

`

558

551

`ssl_handshake_timeout=self.TIMEOUT)

`

559

``

-

560

552

`proto.replace_transport(new_tr)

`

561

553

``

``

554

`+

await on_got_hello

`

``

555

`+

new_tr.write(ANSWER)

`

``

556

+

562

557

`await on_con_lost

`

563

558

`self.assertEqual(proto.data, HELLO_MSG)

`

564

559

`new_tr.close()

`

565

560

``

566

561

`async def run_main():

`

567

562

`on_con = self.loop.create_future()

`

568

563

`on_con_lost = self.loop.create_future()

`

569

``

`-

proto = ServerProto(on_con, on_con_lost)

`

``

564

`+

on_got_hello = self.loop.create_future()

`

``

565

`+

proto = ServerProto(on_con, on_con_lost, on_got_hello)

`

570

566

``

571

567

`server = await self.loop.create_server(

`

572

568

`lambda: proto, '127.0.0.1', 0)

`

`@@ -575,7 +571,7 @@ async def run_main():

`

575

571

`with self.tcp_client(lambda sock: client(sock, addr),

`

576

572

`timeout=self.TIMEOUT):

`

577

573

`await asyncio.wait_for(

`

578

``

`-

main(proto, on_con, on_con_lost),

`

``

574

`+

main(proto, on_con, on_con_lost, on_got_hello),

`

579

575

`timeout=self.TIMEOUT)

`

580

576

``

581

577

`server.close()

`