Skip to content

Commit c83188a

Browse files
committed
Harden test.
1 parent 6fd1cc7 commit c83188a

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

src/Renci.SshNet.Tests/Classes/BaseClientTest_Connected_KeepAlivesNotSentConcurrently.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ public class BaseClientTest_Connected_KeepAlivesNotSentConcurrently
1111
{
1212
private Mock<IServiceFactory> _serviceFactoryMock;
1313
private Mock<ISession> _sessionMock;
14+
private MockSequence _mockSequence;
1415
private BaseClient _client;
1516
private ConnectionInfo _connectionInfo;
17+
private ManualResetEvent _keepAliveSent;
1618

1719
[TestInitialize]
1820
public void Setup()
@@ -24,20 +26,33 @@ public void Setup()
2426
[TestCleanup]
2527
public void Cleanup()
2628
{
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+
}
2735
}
2836

2937
protected void Arrange()
3038
{
3139
_connectionInfo = new ConnectionInfo("host", "user", new PasswordAuthenticationMethod("user", "pwd"));
40+
_keepAliveSent = new ManualResetEvent(false);
3241

3342
_serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
3443
_sessionMock = new Mock<ISession>(MockBehavior.Strict);
3544

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>()))
3950
.Returns(true)
40-
.Callback(() => Thread.Sleep(300));
51+
.Callback(() =>
52+
{
53+
Thread.Sleep(300);
54+
_keepAliveSent.Set();
55+
});
4156

4257
_client = new MyClient(_connectionInfo, false, _serviceFactoryMock.Object)
4358
{
@@ -51,6 +66,12 @@ protected void Act()
5166
// should keep-alive message be sent concurrently, then multiple keep-alive
5267
// message would be sent during this sleep period
5368
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));
5475
}
5576

5677
[TestMethod]

0 commit comments

Comments
 (0)