@@ -472,259 +472,6 @@ def test_dont_pause_writing(self):
472472 self .assertFalse (self .protocol .pause_writing .called )
473473
474474
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-
728475class ProactorDatagramTransportTests (test_utils .TestCase ):
729476
730477 def setUp (self ):
0 commit comments