2
2
// The .NET Foundation licenses this file to you under the MIT license.
3
3
// See the LICENSE file in the project root for more information.
4
4
5
- using Microsoft . VisualStudio . TestTools . UnitTesting ;
6
- using MQTTnet . Implementations ;
7
5
using System ;
8
6
using System . Net ;
9
7
using System . Net . Sockets ;
10
8
using System . Threading ;
11
9
using System . Threading . Tasks ;
10
+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
11
+ using MQTTnet . Implementations ;
12
12
13
13
namespace MQTTnet . Tests
14
14
{
@@ -18,62 +18,68 @@ public class MqttTcpChannel_Tests
18
18
[ TestMethod ]
19
19
public async Task Dispose_Channel_While_Used ( )
20
20
{
21
- var ct = new CancellationTokenSource ( ) ;
22
- var serverSocket = new CrossPlatformSocket ( AddressFamily . InterNetwork , ProtocolType . Tcp ) ;
23
-
24
- try
21
+ using ( var ct = new CancellationTokenSource ( ) )
25
22
{
26
- serverSocket . Bind ( new IPEndPoint ( IPAddress . Any , 50001 ) ) ;
27
- serverSocket . Listen ( 0 ) ;
23
+ using ( var serverSocket = new CrossPlatformSocket ( AddressFamily . InterNetwork , ProtocolType . Tcp ) )
24
+ {
25
+ try
26
+ {
27
+ serverSocket . Bind ( new IPEndPoint ( IPAddress . Any , 50001 ) ) ;
28
+ serverSocket . Listen ( 0 ) ;
28
29
29
30
#pragma warning disable 4014
30
- Task . Run ( async ( ) =>
31
+ Task . Run (
32
+ async ( ) =>
31
33
#pragma warning restore 4014
32
- {
33
- while ( ! ct . IsCancellationRequested )
34
- {
35
- var client = await serverSocket . AcceptAsync ( ) ;
36
- var data = new byte [ ] { 128 } ;
37
- await client . SendAsync ( new ArraySegment < byte > ( data ) , SocketFlags . None ) ;
38
- }
39
- } , ct . Token ) ;
34
+ {
35
+ while ( ! ct . IsCancellationRequested )
36
+ {
37
+ var client = await serverSocket . AcceptAsync ( ct . Token ) ;
38
+ var data = new byte [ ] { 128 } ;
39
+ await client . SendAsync ( new ArraySegment < byte > ( data ) , SocketFlags . None ) ;
40
+ }
41
+ } ,
42
+ ct . Token ) ;
40
43
41
- var clientSocket = new CrossPlatformSocket ( AddressFamily . InterNetwork , ProtocolType . Tcp ) ;
42
- await clientSocket . ConnectAsync ( "localhost" , 50001 , CancellationToken . None ) ;
44
+ var clientSocket = new CrossPlatformSocket ( AddressFamily . InterNetwork , ProtocolType . Tcp ) ;
45
+ await clientSocket . ConnectAsync ( "localhost" , 50001 , CancellationToken . None ) ;
43
46
44
- var tcpChannel = new MqttTcpChannel ( clientSocket . GetStream ( ) , "test" , null ) ;
47
+ var tcpChannel = new MqttTcpChannel ( clientSocket . GetStream ( ) , "test" , null ) ;
45
48
46
- await Task . Delay ( 100 , ct . Token ) ;
49
+ await Task . Delay ( 100 , ct . Token ) ;
47
50
48
- var buffer = new byte [ 1 ] ;
49
- await tcpChannel . ReadAsync ( buffer , 0 , 1 , ct . Token ) ;
51
+ var buffer = new byte [ 1 ] ;
52
+ await tcpChannel . ReadAsync ( buffer , 0 , 1 , ct . Token ) ;
50
53
51
- Assert . AreEqual ( 128 , buffer [ 0 ] ) ;
54
+ Assert . AreEqual ( 128 , buffer [ 0 ] ) ;
52
55
53
- // This block should fail after dispose.
56
+ // This block should fail after dispose.
54
57
#pragma warning disable 4014
55
- Task . Run ( ( ) =>
58
+ Task . Run (
59
+ ( ) =>
56
60
#pragma warning restore 4014
57
- {
58
- Task . Delay ( 200 , ct . Token ) ;
59
- tcpChannel . Dispose ( ) ;
60
- } , ct . Token ) ;
61
+ {
62
+ Task . Delay ( 200 , ct . Token ) ;
63
+ tcpChannel . Dispose ( ) ;
64
+ } ,
65
+ ct . Token ) ;
61
66
62
- try
63
- {
64
- await tcpChannel . ReadAsync ( buffer , 0 , 1 , CancellationToken . None ) ;
65
- }
66
- catch ( Exception exception )
67
- {
68
- Assert . IsInstanceOfType ( exception , typeof ( SocketException ) ) ;
69
- Assert . AreEqual ( SocketError . OperationAborted , ( ( SocketException ) exception ) . SocketErrorCode ) ;
67
+ try
68
+ {
69
+ await tcpChannel . ReadAsync ( buffer , 0 , 1 , CancellationToken . None ) ;
70
+ }
71
+ catch ( Exception exception )
72
+ {
73
+ Assert . IsInstanceOfType ( exception , typeof ( SocketException ) ) ;
74
+ Assert . AreEqual ( SocketError . OperationAborted , ( ( SocketException ) exception ) . SocketErrorCode ) ;
75
+ }
76
+ }
77
+ finally
78
+ {
79
+ ct . Cancel ( false ) ;
80
+ }
70
81
}
71
82
}
72
- finally
73
- {
74
- ct . Cancel ( false ) ;
75
- serverSocket . Dispose ( ) ;
76
- }
77
83
}
78
84
}
79
- }
85
+ }
0 commit comments