BaseClientTest_Connected_KeepAliveInterval_NotNegativeOne.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. Thread.Sleep(200);
  52. }
  53. [TestMethod]
  54. public void KeepAliveIntervalShouldReturnConfiguredValue()
  55. {
  56. Assert.AreEqual(_keepAliveInterval, _client.KeepAliveInterval);
  57. }
  58. [TestMethod]
  59. public void CreateSocketFactoryOnServiceFactoryShouldBeInvokedOnce()
  60. {
  61. ServiceFactoryMock.Verify(p => p.CreateSocketFactory(), Times.Once);
  62. }
  63. [TestMethod]
  64. public void CreateSessionOnServiceFactoryShouldBeInvokedOnce()
  65. {
  66. ServiceFactoryMock.Verify(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object),
  67. Times.Once);
  68. }
  69. [TestMethod]
  70. public void ConnectOnSessionShouldBeInvokedOnce()
  71. {
  72. SessionMock.Verify(p => p.Connect(), Times.Once);
  73. }
  74. [TestMethod]
  75. public void IsConnectedOnSessionShouldBeInvokedOnce()
  76. {
  77. SessionMock.Verify(p => p.IsConnected, Times.Once);
  78. }
  79. [TestMethod]
  80. public void SendMessageOnSessionShouldBeInvokedThreeTimes()
  81. {
  82. #pragma warning disable IDE0002 // Name can be simplified; "Ambiguous reference between Moq.Range and System.Range"
  83. SessionMock.Verify(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()), Times.Between(2, 4, Moq.Range.Inclusive));
  84. #pragma warning restore IDE0002
  85. }
  86. private class MyClient : BaseClient
  87. {
  88. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  89. {
  90. }
  91. }
  92. }
  93. }