@@ -791,12 +791,13 @@ describe(QUICStream.name, () => {
791791 await client . destroy ( { force : true } ) ;
792792 await server . stop ( { force : true } ) ;
793793 } ) ;
794- test ( 'streams can be cancelled' , async ( ) => {
794+ test ( 'streams can be cancelled after data sent ' , async ( ) => {
795795 const cancelReason = Symbol ( 'CancelReason' ) ;
796796 const connectionEventProm =
797797 utils . promise < events . QUICServerConnectionEvent > ( ) ;
798798 const tlsConfig1 = await generateConfig ( defaultType ) ;
799799 const tlsConfig2 = await generateConfig ( defaultType ) ;
800+ const reasonConverters = testsUtils . createReasonConverters ( ) ;
800801 const server = new QUICServer ( {
801802 crypto : {
802803 key,
@@ -809,6 +810,7 @@ describe(QUICStream.name, () => {
809810 verifyPeer : true ,
810811 ca : tlsConfig2 . ca ,
811812 } ,
813+ ...reasonConverters ,
812814 } ) ;
813815 testsUtils . extractSocket ( server , sockets ) ;
814816 server . addEventListener (
@@ -831,6 +833,7 @@ describe(QUICStream.name, () => {
831833 key : tlsConfig2 . key ,
832834 cert : tlsConfig2 . cert ,
833835 } ,
836+ ...reasonConverters ,
834837 } ) ;
835838 testsUtils . extractSocket ( client , sockets ) ;
836839 const conn = ( await connectionEventProm . p ) . detail ;
@@ -848,19 +851,28 @@ describe(QUICStream.name, () => {
848851 const writer = clientStream . writable . getWriter ( ) ;
849852 await writer . write ( message ) ;
850853 writer . releaseLock ( ) ;
851- await serverStreamProm . p ;
852854 clientStream . cancel ( cancelReason ) ;
853855 await expect ( clientStream . readable . getReader ( ) . read ( ) ) . rejects . toBe (
854856 cancelReason ,
855857 ) ;
856858 await expect ( clientStream . writable . getWriter ( ) . write ( ) ) . rejects . toBe (
857859 cancelReason ,
858860 ) ;
861+
859862 // Let's check that the server side ended
860863 const serverStream = await serverStreamProm . p ;
861- await expect (
862- serverStream . readable . pipeTo ( serverStream . writable ) ,
863- ) . rejects . toThrow ( ) ;
864+ const serverReadProm = ( async ( ) => {
865+ for await ( const _ of serverStream . readable ) {
866+ // Just consume until stream throws
867+ }
868+ } ) ( ) ;
869+ await expect ( serverReadProm ) . rejects . toBe ( cancelReason ) ;
870+ const serverWriter = serverStream . writable . getWriter ( ) ;
871+ // Should throw
872+ await expect ( serverWriter . write ( Buffer . from ( 'hello' ) ) ) . rejects . toBe (
873+ cancelReason ,
874+ ) ;
875+
864876 // And client stream should've cleaned up
865877 await testsUtils . sleep ( 100 ) ;
866878 expect ( clientStream [ destroyed ] ) . toBeTrue ( ) ;
@@ -873,6 +885,7 @@ describe(QUICStream.name, () => {
873885 utils . promise < events . QUICServerConnectionEvent > ( ) ;
874886 const tlsConfig1 = await generateConfig ( defaultType ) ;
875887 const tlsConfig2 = await generateConfig ( defaultType ) ;
888+ const reasonConverters = testsUtils . createReasonConverters ( ) ;
876889 const server = new QUICServer ( {
877890 crypto : {
878891 key,
@@ -885,6 +898,7 @@ describe(QUICStream.name, () => {
885898 verifyPeer : true ,
886899 ca : tlsConfig2 . ca ,
887900 } ,
901+ ...reasonConverters ,
888902 } ) ;
889903 testsUtils . extractSocket ( server , sockets ) ;
890904 server . addEventListener (
@@ -907,6 +921,7 @@ describe(QUICStream.name, () => {
907921 key : tlsConfig2 . key ,
908922 cert : tlsConfig2 . cert ,
909923 } ,
924+ ...reasonConverters ,
910925 } ) ;
911926 testsUtils . extractSocket ( client , sockets ) ;
912927 const conn = ( await connectionEventProm . p ) . detail ;
@@ -921,25 +936,34 @@ describe(QUICStream.name, () => {
921936 // Let's make a new streams.
922937 const clientStream = await client . connection . streamNew ( ) ;
923938 clientStream . cancel ( cancelReason ) ;
924-
925939 await expect ( clientStream . readable . getReader ( ) . read ( ) ) . rejects . toBe (
926940 cancelReason ,
927941 ) ;
928942 await expect ( clientStream . writable . getWriter ( ) . write ( ) ) . rejects . toBe (
929943 cancelReason ,
930944 ) ;
945+
931946 // Let's check that the server side ended
932947 const serverStream = await serverStreamProm . p ;
933- await expect (
934- serverStream . readable . pipeTo ( serverStream . writable ) ,
935- ) . rejects . toThrow ( 'recv 0' ) ;
948+ const serverReadProm = ( async ( ) => {
949+ for await ( const _ of serverStream . readable ) {
950+ // Just consume until stream throws
951+ }
952+ } ) ( ) ;
953+ await expect ( serverReadProm ) . rejects . toBe ( cancelReason ) ;
954+ const serverWriter = serverStream . writable . getWriter ( ) ;
955+ // Should throw
956+ await expect ( serverWriter . write ( Buffer . from ( 'hello' ) ) ) . rejects . toBe (
957+ cancelReason ,
958+ ) ;
959+
936960 // And client stream should've cleaned up
937961 await testsUtils . sleep ( 100 ) ;
938962 expect ( clientStream [ destroyed ] ) . toBeTrue ( ) ;
939963 await client . destroy ( { force : true } ) ;
940964 await server . stop ( { force : true } ) ;
941965 } ) ;
942- test ( 'Stream will end when waiting for more data' , async ( ) => {
966+ test ( 'stream will end when waiting for more data' , async ( ) => {
943967 // Needed to check that the pull based reading of data doesn't break when we
944968 // temporarily run out of data to read
945969 const connectionEventProm =
@@ -1008,7 +1032,7 @@ describe(QUICStream.name, () => {
10081032 await client . destroy ( { force : true } ) ;
10091033 await server . stop ( { force : true } ) ;
10101034 } ) ;
1011- test ( 'Stream can error when blocked on data' , async ( ) => {
1035+ test ( 'stream can error when blocked on data' , async ( ) => {
10121036 // This checks that if the readable web-stream is full and not pulling data,
10131037 // we will still respond to an error in the readable stream
10141038
0 commit comments