@@ -472,259 +472,6 @@ def test_dont_pause_writing(self):
472
472
self .assertFalse (self .protocol .pause_writing .called )
473
473
474
474
475
- @unittest .skip ('FIXME: bpo-33694: these tests are too close '
476
- 'to the implementation and should be refactored or removed' )
477
- class ProactorSocketTransportBufferedProtoTests (test_utils .TestCase ):
478
-
479
- def setUp (self ):
480
- super ().setUp ()
481
- self .loop = self .new_test_loop ()
482
- self .addCleanup (self .loop .close )
483
- self .proactor = mock .Mock ()
484
- self .loop ._proactor = self .proactor
485
-
486
- self .protocol = test_utils .make_test_protocol (asyncio .BufferedProtocol )
487
- self .buf = bytearray (1 )
488
- self .protocol .get_buffer .side_effect = lambda hint : self .buf
489
-
490
- self .sock = mock .Mock (socket .socket )
491
-
492
- def socket_transport (self , waiter = None ):
493
- transport = _ProactorSocketTransport (self .loop , self .sock ,
494
- self .protocol , waiter = waiter )
495
- self .addCleanup (close_transport , transport )
496
- return transport
497
-
498
- def test_ctor (self ):
499
- fut = self .loop .create_future ()
500
- tr = self .socket_transport (waiter = fut )
501
- test_utils .run_briefly (self .loop )
502
- self .assertIsNone (fut .result ())
503
- self .protocol .connection_made (tr )
504
- self .proactor .recv_into .assert_called_with (self .sock , self .buf )
505
-
506
- def test_loop_reading (self ):
507
- tr = self .socket_transport ()
508
- tr ._loop_reading ()
509
- self .loop ._proactor .recv_into .assert_called_with (self .sock , self .buf )
510
- self .assertTrue (self .protocol .get_buffer .called )
511
- self .assertFalse (self .protocol .buffer_updated .called )
512
- self .assertFalse (self .protocol .eof_received .called )
513
-
514
- def test_get_buffer_error (self ):
515
- transport = self .socket_transport ()
516
- transport ._fatal_error = mock .Mock ()
517
-
518
- self .loop .call_exception_handler = mock .Mock ()
519
- self .protocol .get_buffer .side_effect = LookupError ()
520
-
521
- transport ._loop_reading ()
522
-
523
- self .assertTrue (transport ._fatal_error .called )
524
- self .assertTrue (self .protocol .get_buffer .called )
525
- self .assertFalse (self .protocol .buffer_updated .called )
526
-
527
- def test_get_buffer_zerosized (self ):
528
- transport = self .socket_transport ()
529
- transport ._fatal_error = mock .Mock ()
530
-
531
- self .loop .call_exception_handler = mock .Mock ()
532
- self .protocol .get_buffer .side_effect = lambda hint : bytearray (0 )
533
-
534
- transport ._loop_reading ()
535
-
536
- self .assertTrue (transport ._fatal_error .called )
537
- self .assertTrue (self .protocol .get_buffer .called )
538
- self .assertFalse (self .protocol .buffer_updated .called )
539
-
540
- def test_proto_type_switch (self ):
541
- self .protocol = test_utils .make_test_protocol (asyncio .Protocol )
542
- tr = self .socket_transport ()
543
-
544
- res = self .loop .create_future ()
545
- res .set_result (b'data' )
546
-
547
- tr = self .socket_transport ()
548
- tr ._read_fut = res
549
- tr ._loop_reading (res )
550
- self .loop ._proactor .recv .assert_called_with (self .sock , 32768 )
551
- self .protocol .data_received .assert_called_with (b'data' )
552
-
553
- # switch protocol to a BufferedProtocol
554
-
555
- buf_proto = test_utils .make_test_protocol (asyncio .BufferedProtocol )
556
- buf = bytearray (4 )
557
- buf_proto .get_buffer .side_effect = lambda hint : buf
558
-
559
- tr .set_protocol (buf_proto )
560
- test_utils .run_briefly (self .loop )
561
- res = self .loop .create_future ()
562
- res .set_result (4 )
563
-
564
- tr ._read_fut = res
565
- tr ._loop_reading (res )
566
- self .loop ._proactor .recv_into .assert_called_with (self .sock , buf )
567
- buf_proto .buffer_updated .assert_called_with (4 )
568
-
569
- @unittest .skip ('FIXME: bpo-33694: this test is too close to the '
570
- 'implementation and should be refactored or removed' )
571
- def test_proto_buf_switch (self ):
572
- tr = self .socket_transport ()
573
- test_utils .run_briefly (self .loop )
574
- self .protocol .get_buffer .assert_called_with (- 1 )
575
-
576
- # switch protocol to *another* BufferedProtocol
577
-
578
- buf_proto = test_utils .make_test_protocol (asyncio .BufferedProtocol )
579
- buf = bytearray (4 )
580
- buf_proto .get_buffer .side_effect = lambda hint : buf
581
- tr ._read_fut .done .side_effect = lambda : False
582
- tr .set_protocol (buf_proto )
583
- self .assertFalse (buf_proto .get_buffer .called )
584
- test_utils .run_briefly (self .loop )
585
- buf_proto .get_buffer .assert_called_with (- 1 )
586
-
587
- def test_buffer_updated_error (self ):
588
- transport = self .socket_transport ()
589
- transport ._fatal_error = mock .Mock ()
590
-
591
- self .loop .call_exception_handler = mock .Mock ()
592
- self .protocol .buffer_updated .side_effect = LookupError ()
593
-
594
- res = self .loop .create_future ()
595
- res .set_result (10 )
596
- transport ._read_fut = res
597
- transport ._loop_reading (res )
598
-
599
- self .assertTrue (transport ._fatal_error .called )
600
- self .assertFalse (self .protocol .get_buffer .called )
601
- self .assertTrue (self .protocol .buffer_updated .called )
602
-
603
- def test_loop_eof_received_error (self ):
604
- res = self .loop .create_future ()
605
- res .set_result (0 )
606
-
607
- self .protocol .eof_received .side_effect = LookupError ()
608
-
609
- tr = self .socket_transport ()
610
- tr ._fatal_error = mock .Mock ()
611
-
612
- tr .close = mock .Mock ()
613
- tr ._read_fut = res
614
- tr ._loop_reading (res )
615
- self .assertFalse (self .loop ._proactor .recv_into .called )
616
- self .assertTrue (self .protocol .eof_received .called )
617
- self .assertTrue (tr ._fatal_error .called )
618
-
619
- def test_loop_reading_data (self ):
620
- res = self .loop .create_future ()
621
- res .set_result (4 )
622
-
623
- tr = self .socket_transport ()
624
- tr ._read_fut = res
625
- tr ._loop_reading (res )
626
- self .loop ._proactor .recv_into .assert_called_with (self .sock , self .buf )
627
- self .protocol .buffer_updated .assert_called_with (4 )
628
-
629
- def test_loop_reading_no_data (self ):
630
- res = self .loop .create_future ()
631
- res .set_result (0 )
632
-
633
- tr = self .socket_transport ()
634
- self .assertRaises (AssertionError , tr ._loop_reading , res )
635
-
636
- tr .close = mock .Mock ()
637
- tr ._read_fut = res
638
- tr ._loop_reading (res )
639
- self .assertFalse (self .loop ._proactor .recv_into .called )
640
- self .assertTrue (self .protocol .eof_received .called )
641
- self .assertTrue (tr .close .called )
642
-
643
- def test_loop_reading_aborted (self ):
644
- err = self .loop ._proactor .recv_into .side_effect = \
645
- ConnectionAbortedError ()
646
-
647
- tr = self .socket_transport ()
648
- tr ._fatal_error = mock .Mock ()
649
- tr ._loop_reading ()
650
- tr ._fatal_error .assert_called_with (
651
- err , 'Fatal read error on pipe transport' )
652
-
653
- def test_loop_reading_aborted_closing (self ):
654
- self .loop ._proactor .recv .side_effect = ConnectionAbortedError ()
655
-
656
- tr = self .socket_transport ()
657
- tr ._closing = True
658
- tr ._fatal_error = mock .Mock ()
659
- tr ._loop_reading ()
660
- self .assertFalse (tr ._fatal_error .called )
661
-
662
- def test_loop_reading_aborted_is_fatal (self ):
663
- self .loop ._proactor .recv_into .side_effect = ConnectionAbortedError ()
664
- tr = self .socket_transport ()
665
- tr ._closing = False
666
- tr ._fatal_error = mock .Mock ()
667
- tr ._loop_reading ()
668
- self .assertTrue (tr ._fatal_error .called )
669
-
670
- def test_loop_reading_conn_reset_lost (self ):
671
- err = self .loop ._proactor .recv_into .side_effect = ConnectionResetError ()
672
-
673
- tr = self .socket_transport ()
674
- tr ._closing = False
675
- tr ._fatal_error = mock .Mock ()
676
- tr ._force_close = mock .Mock ()
677
- tr ._loop_reading ()
678
- self .assertFalse (tr ._fatal_error .called )
679
- tr ._force_close .assert_called_with (err )
680
-
681
- def test_loop_reading_exception (self ):
682
- err = self .loop ._proactor .recv_into .side_effect = OSError ()
683
-
684
- tr = self .socket_transport ()
685
- tr ._fatal_error = mock .Mock ()
686
- tr ._loop_reading ()
687
- tr ._fatal_error .assert_called_with (
688
- err , 'Fatal read error on pipe transport' )
689
-
690
- def test_pause_resume_reading (self ):
691
- tr = self .socket_transport ()
692
- futures = []
693
- for msg in [10 , 20 , 30 , 40 , 0 ]:
694
- f = self .loop .create_future ()
695
- f .set_result (msg )
696
- futures .append (f )
697
-
698
- self .loop ._proactor .recv_into .side_effect = futures
699
- self .loop ._run_once ()
700
- self .assertFalse (tr ._paused )
701
- self .assertTrue (tr .is_reading ())
702
- self .loop ._run_once ()
703
- self .protocol .buffer_updated .assert_called_with (10 )
704
- self .loop ._run_once ()
705
- self .protocol .buffer_updated .assert_called_with (20 )
706
-
707
- tr .pause_reading ()
708
- tr .pause_reading ()
709
- self .assertTrue (tr ._paused )
710
- self .assertFalse (tr .is_reading ())
711
- for i in range (10 ):
712
- self .loop ._run_once ()
713
- self .protocol .buffer_updated .assert_called_with (20 )
714
-
715
- tr .resume_reading ()
716
- tr .resume_reading ()
717
- self .assertFalse (tr ._paused )
718
- self .assertTrue (tr .is_reading ())
719
- self .loop ._run_once ()
720
- self .protocol .buffer_updated .assert_called_with (30 )
721
- self .loop ._run_once ()
722
- self .protocol .buffer_updated .assert_called_with (40 )
723
- tr .close ()
724
-
725
- self .assertFalse (tr .is_reading ())
726
-
727
-
728
475
class ProactorDatagramTransportTests (test_utils .TestCase ):
729
476
730
477
def setUp (self ):
0 commit comments