@@ -20,9 +20,9 @@ public class ChannelTest_Close_SessionIsConnectedAndChannelIsOpen_EofReceived
20
20
private uint _remoteWindowSize ;
21
21
private uint _remotePacketSize ;
22
22
private ChannelStub _channel ;
23
- private Stopwatch _closeTimer ;
24
23
private List < ChannelEventArgs > _channelClosedRegister ;
25
24
private IList < ExceptionEventArgs > _channelExceptionRegister ;
25
+ private ManualResetEvent _channelClosedReceived ;
26
26
27
27
[ TestInitialize ]
28
28
public void Initialize ( )
@@ -31,6 +31,16 @@ public void Initialize()
31
31
Act ( ) ;
32
32
}
33
33
34
+ [ TestCleanup ]
35
+ public void TearDown ( )
36
+ {
37
+ if ( _channelClosedReceived != null )
38
+ {
39
+ _channelClosedReceived . Dispose ( ) ;
40
+ _channelClosedReceived = null ;
41
+ }
42
+ }
43
+
34
44
private void Arrange ( )
35
45
{
36
46
var random = new Random ( ) ;
@@ -40,9 +50,9 @@ private void Arrange()
40
50
_remoteChannelNumber = ( uint ) random . Next ( 0 , int . MaxValue ) ;
41
51
_remoteWindowSize = ( uint ) random . Next ( 0 , int . MaxValue ) ;
42
52
_remotePacketSize = ( uint ) random . Next ( 0 , int . MaxValue ) ;
43
- _closeTimer = new Stopwatch ( ) ;
44
53
_channelClosedRegister = new List < ChannelEventArgs > ( ) ;
45
54
_channelExceptionRegister = new List < ExceptionEventArgs > ( ) ;
55
+ _channelClosedReceived = new ManualResetEvent ( false ) ;
46
56
47
57
_sessionMock = new Mock < ISession > ( MockBehavior . Strict ) ;
48
58
@@ -58,19 +68,16 @@ private void Arrange()
58
68
// raise ChannelCloseReceived event to set waithandle for receiving
59
69
// SSH_MSG_CHANNEL_CLOSE message from server which is waited on after
60
70
// sending the SSH_MSG_CHANNEL_CLOSE message to the server
61
- _sessionMock . Raise ( s => s . ChannelCloseReceived += null ,
62
- new MessageEventArgs < ChannelCloseMessage > (
63
- new ChannelCloseMessage ( _localChannelNumber ) ) ) ;
71
+ //
72
+ // we're mocking the wait on the ChannelCloseMessage, but we still want
73
+ // to get the channel in the state that it would have after actually receiving
74
+ // the ChannelCloseMessage
75
+ _sessionMock . Raise ( s => s . ChannelCloseReceived += null , new MessageEventArgs < ChannelCloseMessage > ( new ChannelCloseMessage ( _localChannelNumber ) ) ) ;
76
+ // signal that the ChannelCloseMessage was received; we use this to verify whether we've actually
77
+ // waited on the EventWaitHandle to be set
78
+ _channelClosedReceived . Set ( ) ;
64
79
} ) . Start ( ) ;
65
- _closeTimer . Start ( ) ;
66
- try
67
- {
68
- w . WaitOne ( ) ;
69
- }
70
- finally
71
- {
72
- _closeTimer . Stop ( ) ;
73
- }
80
+ w . WaitOne ( ) ;
74
81
} ) ;
75
82
76
83
_channel = new ChannelStub ( _sessionMock . Object , _localChannelNumber , _localWindowSize , _localPacketSize ) ;
@@ -120,7 +127,7 @@ public void WaitOnHandleOnSessionShouldBeInvokedOnce()
120
127
[ TestMethod ]
121
128
public void WaitOnHandleOnSessionShouldWaitForChannelCloseMessageToBeReceived ( )
122
129
{
123
- Assert . IsTrue ( _closeTimer . ElapsedMilliseconds >= 100 , "Elapsed milliseconds=" + _closeTimer . ElapsedMilliseconds ) ;
130
+ Assert . IsTrue ( _channelClosedReceived . WaitOne ( 0 ) ) ;
124
131
}
125
132
126
133
[ TestMethod ]
0 commit comments