@@ -791,4 +791,54 @@ describe('miscellaneous', function() {
791791 done ( ) ;
792792 } ) ;
793793 } ) ;
794+
795+ it ( 'handles drain correctly' , function ( done : Function ) {
796+ var queue = [ ] as any ;
797+ var sender : any ;
798+ server . on ( 'sender_open' , function ( context : rhea . EventContext ) {
799+ sender = context . sender ! ;
800+ } ) ;
801+ server . on ( 'sender_draining' , function ( context : rhea . EventContext ) {
802+ context . sender ! . set_drained ( queue . length === 0 ) ;
803+ } ) ;
804+ server . on ( 'receiver_open' , function ( context : rhea . EventContext ) {
805+ context . receiver ! . add_credit ( 100 ) ;
806+ } ) ;
807+ server . on ( 'message' , function ( context : rhea . EventContext ) {
808+ queue . push ( context . message ! . body ) ;
809+ while ( sender . sendable && queue . length ) {
810+ sender . send ( { body :queue . shift ( ) } ) ;
811+ }
812+ } ) ;
813+ server . on ( 'sendable' , function ( context : rhea . EventContext ) {
814+ while ( context . sender ! . sendable && queue . length ) {
815+ context . sender ! . send ( { body :queue . shift ( ) } ) ;
816+ }
817+ } ) ;
818+ var conn = client . connect ( listener . address ( ) as any ) ;
819+ var received : string ;
820+ var r = conn . open_receiver ( { credit_window :0 } ) as any ;
821+ var s = conn . open_sender ( ) as any ;
822+ r . on ( 'message' , function ( context : rhea . EventContext ) {
823+ received = context . message ! . body ;
824+ r . close ( ) ;
825+ } ) ;
826+ r . once ( 'receiver_drained' , function ( ) {
827+ s . send ( { body :'post-drain' } ) ;
828+ } ) ;
829+ r . drain = true ;
830+ r . flow ( 1 ) ;
831+ s . on ( 'accepted' , function ( ) {
832+ r . drain = true ;
833+ r . flow ( 1 ) ;
834+ } ) ;
835+ client . on ( 'receiver_close' , function ( context : rhea . EventContext ) {
836+ context . connection . close ( ) ;
837+ } ) ;
838+ client . on ( 'connection_close' , function ( context : rhea . EventContext ) {
839+ assert . deepEqual ( received , 'post-drain' ) ;
840+ done ( ) ;
841+ } ) ;
842+ } ) ;
843+
794844} ) ;
0 commit comments