BaseClientTest_Connected_KeepAliveInterval_NotNegativeOne.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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_Connected_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(50d);
  19. _keepAliveCount = 0;
  20. }
  21. protected override void SetupMocks()
  22. {
  23. ServiceFactoryMock.Setup(p => p.CreateSocketFactory())
  24. .Returns(SocketFactoryMock.Object);
  25. ServiceFactoryMock.Setup(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object))
  26. .Returns(SessionMock.Object);
  27. SessionMock.Setup(p => p.Connect());
  28. SessionMock.Setup(p => p.IsConnected).Returns(true);
  29. SessionMock.Setup(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()))
  30. .Returns(true)
  31. .Callback(() => Interlocked.Increment(ref _keepAliveCount));
  32. }
  33. protected override void Arrange()
  34. {
  35. base.Arrange();
  36. _client = new MyClient(_connectionInfo, false, ServiceFactoryMock.Object);
  37. _client.Connect();
  38. }
  39. protected override void TearDown()
  40. {
  41. if (_client != null)
  42. {
  43. SessionMock.Setup(p => p.OnDisconnecting());
  44. SessionMock.Setup(p => p.Dispose());
  45. _client.Dispose();
  46. }
  47. }
  48. protected override void Act()
  49. {
  50. _client.KeepAliveInterval = _keepAliveInterval;
  51. // allow keep-alive to be sent a few times. .NET 8 is faster and
  52. // we need to wait less because we want exactly three messages in a session.
  53. #if NETFRAMEWORK
  54. Thread.Sleep(195);
  55. #else
  56. Thread.Sleep(170);
  57. #endif
  58. }
  59. [TestMethod]
  60. public void KeepAliveIntervalShouldReturnConfiguredValue()
  61. {
  62. Assert.AreEqual(_keepAliveInterval, _client.KeepAliveInterval);
  63. }
  64. [TestMethod]
  65. public void CreateSocketFactoryOnServiceFactoryShouldBeInvokedOnce()
  66. {
  67. ServiceFactoryMock.Verify(p => p.CreateSocketFactory(), Times.Once);
  68. }
  69. [TestMethod]
  70. public void CreateSessionOnServiceFactoryShouldBeInvokedOnce()
  71. {
  72. ServiceFactoryMock.Verify(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object),
  73. Times.Once);
  74. }
  75. [TestMethod]
  76. public void ConnectOnSessionShouldBeInvokedOnce()
  77. {
  78. SessionMock.Verify(p => p.Connect(), Times.Once);
  79. }
  80. [TestMethod]
  81. public void IsConnectedOnSessionShouldBeInvokedOnce()
  82. {
  83. SessionMock.Verify(p => p.IsConnected, Times.Once);
  84. }
  85. [TestMethod]
  86. public void SendMessageOnSessionShouldBeInvokedThreeTimes()
  87. {
  88. SessionMock.Verify(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()), Times.Exactly(3));
  89. }
  90. private class MyClient : BaseClient
  91. {
  92. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  93. {
  94. }
  95. }
  96. }
  97. }