@@ -11,8 +11,10 @@ public class BaseClientTest_Connected_KeepAlivesNotSentConcurrently
11
11
{
12
12
private Mock < IServiceFactory > _serviceFactoryMock ;
13
13
private Mock < ISession > _sessionMock ;
14
+ private MockSequence _mockSequence ;
14
15
private BaseClient _client ;
15
16
private ConnectionInfo _connectionInfo ;
17
+ private ManualResetEvent _keepAliveSent ;
16
18
17
19
[ TestInitialize ]
18
20
public void Setup ( )
@@ -24,20 +26,33 @@ public void Setup()
24
26
[ TestCleanup ]
25
27
public void Cleanup ( )
26
28
{
29
+ if ( _client != null )
30
+ {
31
+ _sessionMock . InSequence ( _mockSequence ) . Setup ( p => p . OnDisconnecting ( ) ) ;
32
+ _sessionMock . InSequence ( _mockSequence ) . Setup ( p => p . Dispose ( ) ) ;
33
+ _client . Dispose ( ) ;
34
+ }
27
35
}
28
36
29
37
protected void Arrange ( )
30
38
{
31
39
_connectionInfo = new ConnectionInfo ( "host" , "user" , new PasswordAuthenticationMethod ( "user" , "pwd" ) ) ;
40
+ _keepAliveSent = new ManualResetEvent ( false ) ;
32
41
33
42
_serviceFactoryMock = new Mock < IServiceFactory > ( MockBehavior . Strict ) ;
34
43
_sessionMock = new Mock < ISession > ( MockBehavior . Strict ) ;
35
44
36
- _serviceFactoryMock . Setup ( p => p . CreateSession ( _connectionInfo ) ) . Returns ( _sessionMock . Object ) ;
37
- _sessionMock . Setup ( p => p . Connect ( ) ) ;
38
- _sessionMock . Setup ( p => p . TrySendMessage ( It . IsAny < IgnoreMessage > ( ) ) )
45
+ _mockSequence = new MockSequence ( ) ;
46
+
47
+ _serviceFactoryMock . InSequence ( _mockSequence ) . Setup ( p => p . CreateSession ( _connectionInfo ) ) . Returns ( _sessionMock . Object ) ;
48
+ _sessionMock . InSequence ( _mockSequence ) . Setup ( p => p . Connect ( ) ) ;
49
+ _sessionMock . InSequence ( _mockSequence ) . Setup ( p => p . TrySendMessage ( It . IsAny < IgnoreMessage > ( ) ) )
39
50
. Returns ( true )
40
- . Callback ( ( ) => Thread . Sleep ( 300 ) ) ;
51
+ . Callback ( ( ) =>
52
+ {
53
+ Thread . Sleep ( 300 ) ;
54
+ _keepAliveSent . Set ( ) ;
55
+ } ) ;
41
56
42
57
_client = new MyClient ( _connectionInfo , false , _serviceFactoryMock . Object )
43
58
{
@@ -51,6 +66,12 @@ protected void Act()
51
66
// should keep-alive message be sent concurrently, then multiple keep-alive
52
67
// message would be sent during this sleep period
53
68
Thread . Sleep ( 200 ) ;
69
+
70
+ // disable further keep-alives
71
+ _client . KeepAliveInterval = Session . InfiniteTimeSpan ;
72
+
73
+ // wait until keep-alive has been sent at least once
74
+ Assert . IsTrue ( _keepAliveSent . WaitOne ( 500 ) ) ;
54
75
}
55
76
56
77
[ TestMethod ]
0 commit comments