@@ -16,6 +16,8 @@ namespace Smdn.Net.EchonetLite.Transport;
1616#pragma warning disable IDE0040
1717partial class EchonetLiteHandlerTests {
1818#pragma warning restore IDE0040
19+ private const int TimeoutInMillisecondsForReceiveOperationExpectedToSucceed = 5_000 ;
20+
1921 private class PseudoIncomingEchonetLiteHandler : EchonetLiteHandler {
2022 private readonly ConcurrentQueue < Func < IBufferWriter < byte > , CancellationToken , ValueTask < IPAddress > > > incomingActionQueue = new ( ) ;
2123
@@ -83,7 +85,8 @@ CancellationToken cancellationToken
8385 }
8486
8587 [ Test ]
86- public async Task ReceiveCallback ( )
88+ [ CancelAfter ( TimeoutInMillisecondsForReceiveOperationExpectedToSucceed ) ]
89+ public async Task ReceiveCallback ( CancellationToken cancellationToken )
8790 {
8891 var expectedFromAddress = IPAddress . Loopback ;
8992 var expectedData = new byte [ ] { 0x01 , 0x23 } ;
@@ -96,7 +99,7 @@ public async Task ReceiveCallback()
9699 var numberOfCallsToReceiveCallback = 0 ;
97100 Exception ? exceptionOccurredInReceiveCallback = null ;
98101
99- handler . ReceiveCallback = async ( address , data , cancellationToken ) => {
102+ handler . ReceiveCallback = async ( address , data , ct ) => {
100103 numberOfCallsToReceiveCallback ++ ;
101104
102105 try {
@@ -114,24 +117,23 @@ public async Task ReceiveCallback()
114117
115118 Assert . That ( handler . ReceiveCallback , Is . Not . Null ) ;
116119
117- handler . QueueIncomingAction ( ( writer , cancellationToken ) => {
120+ handler . QueueIncomingAction ( ( writer , ct ) => {
118121 writer . Write ( expectedData ) ;
119122
120123 return new ( expectedFromAddress ) ;
121124 } ) ;
122125
123- using var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 5 ) ) ;
124-
125- await handler . WaitUntilConsumedAsync ( cts . Token ) ;
126+ await handler . WaitUntilConsumedAsync ( cancellationToken ) ;
126127
127- callsToReceiveCallbackEvent . Wait ( cts . Token ) ;
128+ callsToReceiveCallbackEvent . Wait ( cancellationToken ) ;
128129
129130 Assert . That ( numberOfCallsToReceiveCallback , Is . EqualTo ( 1 ) ) ;
130131 Assert . That ( exceptionOccurredInReceiveCallback , Is . Null ) ;
131132 }
132133
133134 [ Test ]
134- public async Task ReceiveCallback_Null ( )
135+ [ CancelAfter ( TimeoutInMillisecondsForReceiveOperationExpectedToSucceed ) ]
136+ public async Task ReceiveCallback_Null ( CancellationToken cancellationToken )
135137 {
136138 var expectedFromAddress = IPAddress . Loopback ;
137139 var expectedData = new byte [ ] { 0x01 , 0x23 } ;
@@ -144,19 +146,18 @@ public async Task ReceiveCallback_Null()
144146
145147 Assert . That ( handler . ReceiveCallback , Is . Null ) ;
146148
147- handler . QueueIncomingAction ( ( writer , cancellationToken ) => {
149+ handler . QueueIncomingAction ( ( writer , ct ) => {
148150 writer . Write ( expectedData ) ;
149151
150152 return new ( expectedFromAddress ) ;
151153 } ) ;
152154
153- using var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 5 ) ) ;
154-
155- await handler . WaitUntilConsumedAsync ( cts . Token ) ;
155+ await handler . WaitUntilConsumedAsync ( cancellationToken ) ;
156156 }
157157
158158 [ Test ]
159- public async Task ReceiveEchonetLiteAsync_ReceiveFromNullAddress ( )
159+ [ CancelAfter ( TimeoutInMillisecondsForReceiveOperationExpectedToSucceed ) ]
160+ public async Task ReceiveEchonetLiteAsync_ReceiveFromNullAddress ( CancellationToken cancellationToken )
160161 {
161162 IPAddress nullFromAddress = null ! ;
162163 var expectedData = new byte [ ] { 0x01 , 0x23 } ;
@@ -170,7 +171,7 @@ public async Task ReceiveEchonetLiteAsync_ReceiveFromNullAddress()
170171 var numberOfCallsToReceiveTaskExceptionHandler = 0 ;
171172 Exception ? exceptionOccurredInReceiveEchonetLiteAsync = null ;
172173
173- handler . ReceiveCallback = ( address , data , cancellationToken ) => {
174+ handler . ReceiveCallback = ( address , data , ct ) => {
174175 numberOfCallsToReceiveCallback ++ ;
175176
176177 return default ;
@@ -186,26 +187,25 @@ public async Task ReceiveEchonetLiteAsync_ReceiveFromNullAddress()
186187 } ;
187188
188189 handler . QueueIncomingAction (
189- ( writer , cancellationToken ) => {
190+ ( writer , ct ) => {
190191 writer . Write ( expectedData ) ;
191192
192193 return new ( nullFromAddress ) ; // return null as a remote address
193194 }
194195 ) ;
195196
196- using var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 5 ) ) ;
197+ await handler . WaitUntilConsumedAsync ( cancellationToken ) ;
197198
198- await handler . WaitUntilConsumedAsync ( cts . Token ) ;
199-
200- callsToReceiveTaskExceptionHandlerEvent . Wait ( cts . Token ) ;
199+ callsToReceiveTaskExceptionHandlerEvent . Wait ( cancellationToken ) ;
201200
202201 Assert . That ( numberOfCallsToReceiveCallback , Is . Zero ) ;
203202 Assert . That ( numberOfCallsToReceiveTaskExceptionHandler , Is . EqualTo ( 1 ) ) ;
204203 Assert . That ( exceptionOccurredInReceiveEchonetLiteAsync , Is . InstanceOf < InvalidOperationException > ( ) ) ;
205204 }
206205
207206 [ Test ]
208- public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveAsyncCore ( )
207+ [ CancelAfter ( TimeoutInMillisecondsForReceiveOperationExpectedToSucceed ) ]
208+ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveAsyncCore ( CancellationToken cancellationToken )
209209 {
210210 using var callsToReceiveTaskExceptionHandlerEvent = new ManualResetEventSlim ( false ) ;
211211 using var handler = new PseudoIncomingEchonetLiteHandler ( ) ;
@@ -215,7 +215,7 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveAsyncCore()
215215 var numberOfCallsToReceiveCallback = 0 ;
216216 var numberOfCallsToReceiveTaskExceptionHandler = 0 ;
217217
218- handler . ReceiveCallback = ( address , data , cancellationToken ) => {
218+ handler . ReceiveCallback = ( address , data , ct ) => {
219219 numberOfCallsToReceiveCallback ++ ;
220220
221221 return default ;
@@ -234,11 +234,9 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveAsyncCore()
234234 ( writer , cancellationToken ) => throw new NotImplementedException ( )
235235 ) ;
236236
237- using var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 5 ) ) ;
238-
239- await handler . WaitUntilConsumedAsync ( cts . Token ) ;
237+ await handler . WaitUntilConsumedAsync ( cancellationToken ) ;
240238
241- callsToReceiveTaskExceptionHandlerEvent . Wait ( cts . Token ) ;
239+ callsToReceiveTaskExceptionHandlerEvent . Wait ( cancellationToken ) ;
242240
243241 Assert . That ( numberOfCallsToReceiveCallback , Is . Zero ) ;
244242 Assert . That ( numberOfCallsToReceiveTaskExceptionHandler , Is . EqualTo ( 1 ) ) ;
@@ -247,7 +245,7 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveAsyncCore()
247245 // following inputs must be processed successfully
248246 using var callsToReceiveCallbackEvent = new ManualResetEventSlim ( false ) ;
249247
250- handler . ReceiveCallback = ( address , data , cancellationToken ) => {
248+ handler . ReceiveCallback = ( address , data , ct ) => {
251249 numberOfCallsToReceiveCallback ++ ;
252250
253251 callsToReceiveCallbackEvent . Set ( ) ;
@@ -263,15 +261,16 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveAsyncCore()
263261 }
264262 ) ;
265263
266- await handler . WaitUntilConsumedAsync ( cts . Token ) ;
264+ await handler . WaitUntilConsumedAsync ( cancellationToken ) ;
267265
268- callsToReceiveCallbackEvent . Wait ( cts . Token ) ;
266+ callsToReceiveCallbackEvent . Wait ( cancellationToken ) ;
269267
270268 Assert . That ( numberOfCallsToReceiveCallback , Is . EqualTo ( 1 ) ) ;
271269 }
272270
273271 [ Test ]
274- public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveCallback ( )
272+ [ CancelAfter ( TimeoutInMillisecondsForReceiveOperationExpectedToSucceed ) ]
273+ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveCallback ( CancellationToken cancellationToken )
275274 {
276275 var expectedFromAddress = IPAddress . Loopback ;
277276 var expectedData = new byte [ ] { 0x01 , 0x23 } ;
@@ -285,7 +284,7 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveCallback()
285284 var numberOfCallsToReceiveCallback = 0 ;
286285 var numberOfCallsToReceiveTaskExceptionHandler = 0 ;
287286
288- handler . ReceiveCallback = ( address , data , cancellationToken ) => {
287+ handler . ReceiveCallback = ( address , data , ct ) => {
289288 numberOfCallsToReceiveCallback ++ ;
290289
291290 throw new NotImplementedException ( ) ;
@@ -307,11 +306,9 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveCallback()
307306 }
308307 ) ;
309308
310- using var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 5 ) ) ;
311-
312- await handler . WaitUntilConsumedAsync ( cts . Token ) ;
309+ await handler . WaitUntilConsumedAsync ( cancellationToken ) ;
313310
314- callsToReceiveTaskExceptionHandlerEvent . Wait ( cts . Token ) ;
311+ callsToReceiveTaskExceptionHandlerEvent . Wait ( cancellationToken ) ;
315312
316313 Assert . That ( numberOfCallsToReceiveCallback , Is . EqualTo ( 1 ) ) ;
317314 Assert . That ( numberOfCallsToReceiveTaskExceptionHandler , Is . EqualTo ( 1 ) ) ;
@@ -320,7 +317,7 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveCallback()
320317 // following inputs must be processed successfully
321318 using var callsToReceiveCallbackEvent = new ManualResetEventSlim ( false ) ;
322319
323- handler . ReceiveCallback = ( address , data , cancellationToken ) => {
320+ handler . ReceiveCallback = ( address , data , ct ) => {
324321 numberOfCallsToReceiveCallback ++ ;
325322
326323 callsToReceiveCallbackEvent . Set ( ) ;
@@ -336,9 +333,9 @@ public async Task ReceiveEchonetLiteAsync_ExceptionOccurredInReceiveCallback()
336333 }
337334 ) ;
338335
339- await handler . WaitUntilConsumedAsync ( cts . Token ) ;
336+ await handler . WaitUntilConsumedAsync ( cancellationToken ) ;
340337
341- callsToReceiveCallbackEvent . Wait ( cts . Token ) ;
338+ callsToReceiveCallbackEvent . Wait ( cancellationToken ) ;
342339
343340 Assert . That ( numberOfCallsToReceiveCallback , Is . EqualTo ( 2 ) ) ;
344341 }
0 commit comments