@@ -20,7 +20,7 @@ public class RemoteJSDataStreamTest
20
20
private static readonly TestRemoteJSRuntime _jsRuntime = new ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
21
21
22
22
[ Fact ]
23
- public async void CreateRemoteJSDataStreamAsync_CreatesStream ( )
23
+ public async Task CreateRemoteJSDataStreamAsync_CreatesStream ( )
24
24
{
25
25
// Arrange
26
26
var jsStreamReference = Mock . Of < IJSStreamReference > ( ) ;
@@ -33,7 +33,7 @@ public async void CreateRemoteJSDataStreamAsync_CreatesStream()
33
33
}
34
34
35
35
[ Fact ]
36
- public async void ReceiveData_DoesNotFindStream ( )
36
+ public async Task ReceiveData_DoesNotFindStream ( )
37
37
{
38
38
// Arrange
39
39
var chunk = new byte [ ] { 3 , 5 , 6 , 7 } ;
@@ -47,7 +47,7 @@ public async void ReceiveData_DoesNotFindStream()
47
47
}
48
48
49
49
[ Fact ]
50
- public async void ReceiveData_SuccessReadsBackStream ( )
50
+ public async Task ReceiveData_SuccessReadsBackStream ( )
51
51
{
52
52
// Arrange
53
53
var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
@@ -75,7 +75,35 @@ public async void ReceiveData_SuccessReadsBackStream()
75
75
}
76
76
77
77
[ Fact ]
78
- public async void ReceiveData_WithError ( )
78
+ public async Task ReceiveData_SuccessReadsBackPipeReader ( )
79
+ {
80
+ // Arrange
81
+ var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
82
+ var remoteJSDataStream = await CreateRemoteJSDataStreamAsync ( jsRuntime ) ;
83
+ var streamId = GetStreamId ( remoteJSDataStream , jsRuntime ) ;
84
+ var chunk = new byte [ 100 ] ;
85
+ var random = new Random ( ) ;
86
+ random . NextBytes ( chunk ) ;
87
+
88
+ var sendDataTask = Task . Run ( async ( ) =>
89
+ {
90
+ // Act 1
91
+ var success = await RemoteJSDataStream . ReceiveData ( jsRuntime , streamId , chunkId : 0 , chunk , error : null ) ;
92
+ return success ;
93
+ } ) ;
94
+
95
+ // Act & Assert 2
96
+ using var memoryStream = new MemoryStream ( ) ;
97
+ await remoteJSDataStream . PipeReader . CopyToAsync ( memoryStream ) ;
98
+ Assert . Equal ( chunk , memoryStream . ToArray ( ) ) ;
99
+
100
+ // Act & Assert 3
101
+ var sendDataCompleted = await sendDataTask ;
102
+ Assert . True ( sendDataCompleted ) ;
103
+ }
104
+
105
+ [ Fact ]
106
+ public async Task ReceiveData_WithError ( )
79
107
{
80
108
// Arrange
81
109
var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
@@ -93,7 +121,7 @@ public async void ReceiveData_WithError()
93
121
}
94
122
95
123
[ Fact ]
96
- public async void ReceiveData_WithZeroLengthChunk ( )
124
+ public async Task ReceiveData_WithZeroLengthChunk ( )
97
125
{
98
126
// Arrange
99
127
var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
@@ -112,7 +140,7 @@ public async void ReceiveData_WithZeroLengthChunk()
112
140
}
113
141
114
142
[ Fact ]
115
- public async void ReceiveData_ProvidedWithMoreBytesThanRemaining ( )
143
+ public async Task ReceiveData_ProvidedWithMoreBytesThanRemaining ( )
116
144
{
117
145
// Arrange
118
146
var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
@@ -132,7 +160,7 @@ public async void ReceiveData_ProvidedWithMoreBytesThanRemaining()
132
160
}
133
161
134
162
[ Fact ]
135
- public async void ReceiveData_ProvidedWithOutOfOrderChunk_SimulatesSignalRDisconnect ( )
163
+ public async Task ReceiveData_ProvidedWithOutOfOrderChunk_SimulatesSignalRDisconnect ( )
136
164
{
137
165
// Arrange
138
166
var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
@@ -156,7 +184,7 @@ public async void ReceiveData_ProvidedWithOutOfOrderChunk_SimulatesSignalRDiscon
156
184
}
157
185
158
186
[ Fact ]
159
- public async void ReceiveData_NoDataProvidedBeforeTimeout_StreamDisposed ( )
187
+ public async Task ReceiveData_NoDataProvidedBeforeTimeout_StreamDisposed ( )
160
188
{
161
189
// Arrange
162
190
var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
@@ -190,7 +218,7 @@ public async void ReceiveData_NoDataProvidedBeforeTimeout_StreamDisposed()
190
218
// Confirm exception also raised on pipe reader
191
219
using var mem = new MemoryStream ( ) ;
192
220
var ex = await Assert . ThrowsAsync < TimeoutException > ( async ( ) => await remoteJSDataStream . CopyToAsync ( mem ) ) ;
193
- Assert . Equal ( "Did not receive any data in the alloted time." , ex . Message ) ;
221
+ Assert . Equal ( "Did not receive any data in the allotted time." , ex . Message ) ;
194
222
195
223
// Act & Assert 3
196
224
// Ensures stream is disposed after the timeout and any additional chunks aren't accepted
@@ -199,14 +227,14 @@ public async void ReceiveData_NoDataProvidedBeforeTimeout_StreamDisposed()
199
227
}
200
228
201
229
[ Fact ]
202
- public async void ReceiveData_ReceivesDataThenTimesout_StreamDisposed ( )
230
+ public async Task ReceiveData_ReceivesDataThenTimesout_StreamDisposed ( )
203
231
{
204
232
// Arrange
205
233
var jsRuntime = new TestRemoteJSRuntime ( Options . Create ( new CircuitOptions ( ) ) , Options . Create ( new HubOptions ( ) ) , Mock . Of < ILogger < RemoteJSRuntime > > ( ) ) ;
206
234
var timeoutExceptionRaisedSemaphore = new SemaphoreSlim ( initialCount : 0 , maxCount : 1 ) ;
207
235
jsRuntime . UnhandledException += ( _ , ex ) =>
208
236
{
209
- Assert . Equal ( "Did not receive any data in the alloted time." , ex . Message ) ;
237
+ Assert . Equal ( "Did not receive any data in the allotted time." , ex . Message ) ;
210
238
Assert . IsType < TimeoutException > ( ex ) ;
211
239
timeoutExceptionRaisedSemaphore . Release ( ) ;
212
240
} ;
0 commit comments