BaseClientTest_Connected_KeepAlivesNotSentConcurrently.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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_KeepAlivesNotSentConcurrently
  10. {
  11. private Mock<IServiceFactory> _serviceFactoryMock;
  12. private Mock<ISession> _sessionMock;
  13. private BaseClient _client;
  14. private ConnectionInfo _connectionInfo;
  15. [TestInitialize]
  16. public void Setup()
  17. {
  18. Arrange();
  19. Act();
  20. }
  21. [TestCleanup]
  22. public void Cleanup()
  23. {
  24. }
  25. protected void Arrange()
  26. {
  27. _connectionInfo = new ConnectionInfo("host", "user", new PasswordAuthenticationMethod("user", "pwd"));
  28. _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
  29. _sessionMock = new Mock<ISession>(MockBehavior.Strict);
  30. _serviceFactoryMock.Setup(p => p.CreateSession(_connectionInfo)).Returns(_sessionMock.Object);
  31. _sessionMock.Setup(p => p.Connect());
  32. _sessionMock.Setup(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()))
  33. .Returns(true)
  34. .Callback(() => Thread.Sleep(300));
  35. _client = new MyClient(_connectionInfo, false, _serviceFactoryMock.Object)
  36. {
  37. KeepAliveInterval = TimeSpan.FromMilliseconds(50d)
  38. };
  39. _client.Connect();
  40. }
  41. protected void Act()
  42. {
  43. // should keep-alive message be sent concurrently, then multiple keep-alive
  44. // message would be sent during this sleep period
  45. Thread.Sleep(200);
  46. }
  47. [TestMethod]
  48. public void SendMessageOnSessionShouldBeInvokedOnce()
  49. {
  50. _sessionMock.Verify(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()), Times.Once);
  51. }
  52. private class MyClient : BaseClient
  53. {
  54. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  55. {
  56. }
  57. }
  58. }
  59. }