2
0

BaseClientTest_Disconnected_Connect.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using Microsoft.Extensions.Logging.Abstractions;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Moq;
  4. using Renci.SshNet.Connection;
  5. namespace Renci.SshNet.Tests.Classes
  6. {
  7. [TestClass]
  8. public class BaseClientTest_Disconnected_Connect : BaseClientTestBase
  9. {
  10. private Mock<ISocketFactory> _socketFactory2Mock;
  11. private Mock<ISession> _session2Mock;
  12. private BaseClient _client;
  13. private ConnectionInfo _connectionInfo;
  14. protected override void SetupData()
  15. {
  16. _connectionInfo = new ConnectionInfo("host", "user", new PasswordAuthenticationMethod("user", "pwd"));
  17. }
  18. protected override void CreateMocks()
  19. {
  20. base.CreateMocks();
  21. _socketFactory2Mock = new Mock<ISocketFactory>(MockBehavior.Strict);
  22. _session2Mock = new Mock<ISession>(MockBehavior.Strict);
  23. _session2Mock.Setup(p => p.SessionLoggerFactory).Returns(NullLoggerFactory.Instance);
  24. }
  25. protected override void SetupMocks()
  26. {
  27. var sequence = new MockSequence();
  28. ServiceFactoryMock.InSequence(sequence)
  29. .Setup(p => p.CreateSocketFactory())
  30. .Returns(SocketFactoryMock.Object);
  31. ServiceFactoryMock.InSequence(sequence)
  32. .Setup(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object))
  33. .Returns(SessionMock.Object);
  34. SessionMock.InSequence(sequence)
  35. .Setup(p => p.Connect());
  36. SessionMock.InSequence(sequence)
  37. .Setup(p => p.OnDisconnecting());
  38. SessionMock.InSequence(sequence)
  39. .Setup(p => p.Dispose());
  40. ServiceFactoryMock.InSequence(sequence)
  41. .Setup(p => p.CreateSocketFactory())
  42. .Returns(_socketFactory2Mock.Object);
  43. ServiceFactoryMock.InSequence(sequence)
  44. .Setup(p => p.CreateSession(_connectionInfo, _socketFactory2Mock.Object))
  45. .Returns(_session2Mock.Object);
  46. _session2Mock.InSequence(sequence)
  47. .Setup(p => p.Connect());
  48. }
  49. protected override void Arrange()
  50. {
  51. base.Arrange();
  52. _client = new MyClient(_connectionInfo, false, ServiceFactoryMock.Object);
  53. _client.Connect();
  54. _client.Disconnect();
  55. }
  56. protected override void TearDown()
  57. {
  58. if (_client != null)
  59. {
  60. _session2Mock.Setup(p => p.OnDisconnecting());
  61. _session2Mock.Setup(p => p.Dispose());
  62. _client.Dispose();
  63. }
  64. }
  65. protected override void Act()
  66. {
  67. _client.Connect();
  68. }
  69. [TestMethod]
  70. public void CreateSocketFactoryOnServiceFactoryShouldBeInvokedTwice()
  71. {
  72. ServiceFactoryMock.Verify(p => p.CreateSocketFactory(), Times.Exactly(2));
  73. }
  74. [TestMethod]
  75. public void CreateSessionOnServiceFactoryShouldBeInvokedTwice()
  76. {
  77. ServiceFactoryMock.Verify(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object),
  78. Times.Once);
  79. ServiceFactoryMock.Verify(p => p.CreateSession(_connectionInfo, _socketFactory2Mock.Object),
  80. Times.Once);
  81. }
  82. [TestMethod]
  83. public void ConnectOnSessionShouldBeInvokedTwice()
  84. {
  85. SessionMock.Verify(p => p.Connect(), Times.Once);
  86. _session2Mock.Verify(p => p.Connect(), Times.Once);
  87. }
  88. private class MyClient : BaseClient
  89. {
  90. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  91. {
  92. }
  93. }
  94. }
  95. }