@@ -55,20 +55,25 @@ public async Task DuplexStream_SendLargeFileBatchedAndRecieveLargeFileBatched_Su
5555 const int BatchSize = 1024 * 64 ; // 64 KB
5656
5757 var writeCount = Math . Min ( data . Length - sent , BatchSize ) ;
58- var finalWrite = sent + writeCount == data . Length ;
58+
5959 await call . RequestStream . WriteAsync ( new DataMessage
6060 {
61- Data = ByteString . CopyFrom ( data , sent , writeCount ) ,
62- FinalSegment = finalWrite
61+ Data = ByteString . CopyFrom ( data , sent , writeCount )
6362 } ) . DefaultTimeout ( ) ;
6463
6564 sent += writeCount ;
65+
66+ Logger . LogInformation ( $ "Sent { sent } bytes") ;
6667 }
6768
69+ await call . RequestStream . CompleteAsync ( ) . DefaultTimeout ( ) ;
70+
6871 var ms = new MemoryStream ( ) ;
6972 while ( await call . ResponseStream . MoveNext ( CancellationToken . None ) . DefaultTimeout ( ) )
7073 {
7174 ms . Write ( call . ResponseStream . Current . Data . Span ) ;
75+
76+ Logger . LogInformation ( $ "Received { ms . Length } bytes") ;
7277 }
7378
7479 // Assert
@@ -121,6 +126,7 @@ public async Task ClientStream_SendLargeFileBatchedAndRecieveLargeFileBatched_Su
121126 }
122127
123128 [ Test ]
129+ [ Ignore ( "Waiting on fix from https://github.com/dotnet/corefx/issues/39586" ) ]
124130 public async Task DuplexStream_SendToUnimplementedMethod_ThrowError ( )
125131 {
126132 SetExpectedErrorsFilter ( writeContext =>
@@ -157,5 +163,25 @@ await call.RequestStream.WriteAsync(new UnimplementeDataMessage
157163 // Assert
158164 Assert . AreEqual ( StatusCode . Cancelled , ex . StatusCode ) ;
159165 }
166+
167+ [ Test ]
168+ [ Ignore ( "Waiting on fix from https://github.com/dotnet/corefx/issues/39586" ) ]
169+ public async Task DuplexStream_SendToUnimplementedMethodAfterResponseReceived_Hang ( )
170+ {
171+ // Arrange
172+ var client = GrpcClient . Create < UnimplementedService . UnimplementedServiceClient > ( Fixture . Client , LoggerFactory ) ;
173+
174+ for ( int i = 0 ; i < 1000 ; i ++ )
175+ {
176+ Logger . LogInformation ( $ "ITERATION { i } ") ;
177+
178+ // Act
179+ var call = client . DuplexData ( ) ;
180+
181+ // Response will only be headers so the call is "done" on the server side
182+ await call . ResponseHeadersAsync . DefaultTimeout ( ) ;
183+ await call . RequestStream . CompleteAsync ( ) ;
184+ }
185+ }
160186 }
161187}
0 commit comments