BaseClientTest_NotConnected_KeepAliveInterval_NotNegativeOne.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Threading;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using Moq;
  5. using Renci.SshNet.Messages.Transport;
  6. namespace Renci.SshNet.Tests.Classes
  7. {
  8. [TestClass]
  9. public class BaseClientTest_NotConnected_KeepAliveInterval_NotNegativeOne : BaseClientTestBase
  10. {
  11. private BaseClient _client;
  12. private ConnectionInfo _connectionInfo;
  13. private TimeSpan _keepAliveInterval;
  14. private int _keepAliveCount;
  15. protected override void SetupData()
  16. {
  17. _connectionInfo = new ConnectionInfo("host", "user", new PasswordAuthenticationMethod("user", "pwd"));
  18. _keepAliveInterval = TimeSpan.FromMilliseconds(100d);
  19. _keepAliveCount = 0;
  20. }
  21. protected override void Arrange()
  22. {
  23. base.Arrange();
  24. _client = new MyClient(_connectionInfo, false, ServiceFactoryMock.Object);
  25. }
  26. protected override void TearDown()
  27. {
  28. if (_client != null)
  29. {
  30. SessionMock.Setup(p => p.OnDisconnecting());
  31. SessionMock.Setup(p => p.Dispose());
  32. _client.Dispose();
  33. }
  34. }
  35. protected override void Act()
  36. {
  37. _client.KeepAliveInterval = _keepAliveInterval;
  38. // allow keep-alive to be sent at least once
  39. Thread.Sleep(150);
  40. }
  41. [TestMethod]
  42. public void KeepAliveIntervalShouldReturnConfiguredValue()
  43. {
  44. Assert.AreEqual(_keepAliveInterval, _client.KeepAliveInterval);
  45. }
  46. [TestMethod]
  47. public void ConnectShouldActivateKeepAliveIfSessionIs()
  48. {
  49. ServiceFactoryMock.Setup(p => p.CreateSocketFactory())
  50. .Returns(SocketFactoryMock.Object);
  51. ServiceFactoryMock.Setup(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object))
  52. .Returns(SessionMock.Object);
  53. SessionMock.Setup(p => p.Connect());
  54. SessionMock.Setup(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()))
  55. .Returns(true)
  56. .Callback(() => Interlocked.Increment(ref _keepAliveCount));
  57. _client.Connect();
  58. // allow keep-alive to be sent at least twice with some margin for error
  59. Thread.Sleep(5 * (int)_keepAliveInterval.TotalMilliseconds);
  60. // At least two keep-alives should be sent
  61. SessionMock.Verify(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()), Times.AtLeast(2));
  62. }
  63. private class MyClient : BaseClient
  64. {
  65. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  66. {
  67. }
  68. }
  69. }
  70. }