BaseClientTest_Connected_KeepAliveInterval_NegativeOne.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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_NegativeOne : 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 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)
  29. .Returns(true);
  30. _ = SessionMock.Setup(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()))
  31. .Returns(true)
  32. .Callback(() => Interlocked.Increment(ref _keepAliveCount));
  33. }
  34. protected override void Arrange()
  35. {
  36. base.Arrange();
  37. _client = new MyClient(_connectionInfo, false, ServiceFactoryMock.Object);
  38. _client.Connect();
  39. _client.KeepAliveInterval = _keepAliveInterval;
  40. }
  41. protected override void TearDown()
  42. {
  43. if (_client != null)
  44. {
  45. SessionMock.Setup(p => p.OnDisconnecting());
  46. SessionMock.Setup(p => p.Dispose());
  47. _client.Dispose();
  48. }
  49. }
  50. protected override void Act()
  51. {
  52. // allow keep-alive to be sent once
  53. Thread.Sleep(150);
  54. // disable keep-alive
  55. _client.KeepAliveInterval = TimeSpan.FromMilliseconds(-1);
  56. }
  57. [TestMethod]
  58. public void KeepAliveIntervalShouldReturnConfiguredValue()
  59. {
  60. Assert.AreEqual(TimeSpan.FromMilliseconds(-1), _client.KeepAliveInterval);
  61. }
  62. [TestMethod]
  63. public void CreateSocketFactoryOnServiceFactoryShouldBeInvokedOnce()
  64. {
  65. ServiceFactoryMock.Verify(p => p.CreateSocketFactory(), Times.Once);
  66. }
  67. [TestMethod]
  68. public void CreateSessionOnServiceFactoryShouldBeInvokedOnce()
  69. {
  70. ServiceFactoryMock.Verify(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object), Times.Once);
  71. }
  72. [TestMethod]
  73. public void ConnectOnSessionShouldBeInvokedOnce()
  74. {
  75. SessionMock.Verify(p => p.Connect(), Times.Once);
  76. }
  77. [TestMethod]
  78. public void IsConnectedOnSessionShouldBeInvokedOnce()
  79. {
  80. SessionMock.Verify(p => p.IsConnected, Times.Once);
  81. }
  82. [TestMethod]
  83. public void SendMessageOnSessionShouldBeInvokedOneTime()
  84. {
  85. // allow keep-alive to be sent once
  86. Thread.Sleep(100);
  87. SessionMock.Verify(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()), Times.Exactly(1));
  88. }
  89. private class MyClient : BaseClient
  90. {
  91. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  92. {
  93. }
  94. }
  95. }
  96. }