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

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

`

495

495

``

496

496

`server_context = test_utils.simple_server_sslcontext()

`

497

497

`client_context = test_utils.simple_client_sslcontext()

`

498

``

`-

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

`

499

``

`-

or sys.platform.startswith('win')

`

500

``

`-

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

`

501

``

`-

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

`

502

``

`-

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

`

503

``

`-

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

`

504

``

`-

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

`

505

``

`-

client_context.options |= ssl.OP_NO_TLSv1_3

`

506

498

`answer = None

`

507

499

``

508

500

`def client(sock, addr):

`

`@@ -519,9 +511,10 @@ def client(sock, addr):

`

519

511

`sock.close()

`

520

512

``

521

513

`class ServerProto(asyncio.Protocol):

`

522

``

`-

def init(self, on_con, on_con_lost):

`

``

514

`+

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

`

523

515

`self.on_con = on_con

`

524

516

`self.on_con_lost = on_con_lost

`

``

517

`+

self.on_got_hello = on_got_hello

`

525

518

`self.data = b''

`

526

519

`self.transport = None

`

527

520

``

`@@ -535,7 +528,7 @@ def replace_transport(self, tr):

`

535

528

`def data_received(self, data):

`

536

529

`self.data += data

`

537

530

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

`

538

``

`-

self.transport.write(ANSWER)

`

``

531

`+

self.on_got_hello.set_result(None)

`

539

532

``

540

533

`def connection_lost(self, exc):

`

541

534

`self.transport = None

`

`@@ -544,7 +537,7 @@ def connection_lost(self, exc):

`

544

537

`else:

`

545

538

`self.on_con_lost.set_exception(exc)

`

546

539

``

547

``

`-

async def main(proto, on_con, on_con_lost):

`

``

540

`+

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

`

548

541

`tr = await on_con

`

549

542

`tr.write(HELLO_MSG)

`

550

543

``

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

`

554

547

`tr, proto, server_context,

`

555

548

`server_side=True,

`

556

549

`ssl_handshake_timeout=self.TIMEOUT)

`

557

``

-

558

550

`proto.replace_transport(new_tr)

`

559

551

``

``

552

`+

await on_got_hello

`

``

553

`+

new_tr.write(ANSWER)

`

``

554

+

560

555

`await on_con_lost

`

561

556

`self.assertEqual(proto.data, HELLO_MSG)

`

562

557

`new_tr.close()

`

563

558

``

564

559

`async def run_main():

`

565

560

`on_con = self.loop.create_future()

`

566

561

`on_con_lost = self.loop.create_future()

`

567

``

`-

proto = ServerProto(on_con, on_con_lost)

`

``

562

`+

on_got_hello = self.loop.create_future()

`

``

563

`+

proto = ServerProto(on_con, on_con_lost, on_got_hello)

`

568

564

``

569

565

`server = await self.loop.create_server(

`

570

566

`lambda: proto, '127.0.0.1', 0)

`

`@@ -573,7 +569,7 @@ async def run_main():

`

573

569

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

`

574

570

`timeout=self.TIMEOUT):

`

575

571

`await asyncio.wait_for(

`

576

``

`-

main(proto, on_con, on_con_lost),

`

``

572

`+

main(proto, on_con, on_con_lost, on_got_hello),

`

577

573

`loop=self.loop, timeout=self.TIMEOUT)

`

578

574

``

579

575

`server.close()

`