BaseClientTest_Connect_OnConnectedThrowsException.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using Moq;
  6. using Renci.SshNet.Common;
  7. using Renci.SshNet.Security;
  8. using Renci.SshNet.Tests.Common;
  9. namespace Renci.SshNet.Tests.Classes
  10. {
  11. [TestClass]
  12. public class BaseClientTest_Connect_OnConnectedThrowsException : BaseClientTestBase
  13. {
  14. private MyClient _client;
  15. private ConnectionInfo _connectionInfo;
  16. private ApplicationException _onConnectException;
  17. private ApplicationException _actualException;
  18. protected override void SetupData()
  19. {
  20. _connectionInfo = new ConnectionInfo("host", "user", new PasswordAuthenticationMethod("user", "pwd"));
  21. _onConnectException = new ApplicationException();
  22. }
  23. protected override void SetupMocks()
  24. {
  25. ServiceFactoryMock.Setup(p => p.CreateSocketFactory())
  26. .Returns(SocketFactoryMock.Object);
  27. ServiceFactoryMock.Setup(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object))
  28. .Returns(SessionMock.Object);
  29. SessionMock.Setup(p => p.Connect());
  30. SessionMock.Setup(p => p.Dispose());
  31. }
  32. protected override void TearDown()
  33. {
  34. if (_client != null)
  35. {
  36. SessionMock.Setup(p => p.OnDisconnecting());
  37. SessionMock.Setup(p => p.Dispose());
  38. _client.Dispose();
  39. }
  40. }
  41. protected override void Arrange()
  42. {
  43. base.Arrange();
  44. _client = new MyClient(_connectionInfo, false, ServiceFactoryMock.Object)
  45. {
  46. OnConnectedException = _onConnectException
  47. };
  48. }
  49. protected override void Act()
  50. {
  51. try
  52. {
  53. _client.Connect();
  54. Assert.Fail();
  55. }
  56. catch (ApplicationException ex)
  57. {
  58. _actualException = ex;
  59. }
  60. }
  61. [TestMethod]
  62. public void ConnectShouldRethrowExceptionThrownByOnConnect()
  63. {
  64. Assert.IsNotNull(_actualException);
  65. Assert.AreSame(_onConnectException, _actualException);
  66. }
  67. [TestMethod]
  68. public void CreateSocketFactoryOnServiceFactoryShouldBeInvokedOnce()
  69. {
  70. ServiceFactoryMock.Verify(p => p.CreateSocketFactory(), Times.Once);
  71. }
  72. [TestMethod]
  73. public void CreateSessionOnServiceFactoryShouldBeInvokedOnce()
  74. {
  75. ServiceFactoryMock.Verify(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object),
  76. Times.Once);
  77. }
  78. [TestMethod]
  79. public void ConnectOnSessionShouldBeInvokedOnce()
  80. {
  81. SessionMock.Verify(p => p.Connect(), Times.Once);
  82. }
  83. [TestMethod]
  84. public void DisposeOnSessionShouldBeInvokedOnce()
  85. {
  86. SessionMock.Verify(p => p.Dispose(), Times.Once);
  87. }
  88. [TestMethod]
  89. public void ErrorOccuredOnSessionShouldNoLongerBeSignaledViaErrorOccurredOnBaseClient()
  90. {
  91. var errorOccurredSignalCount = 0;
  92. _client.ErrorOccurred += (sender, args) => Interlocked.Increment(ref errorOccurredSignalCount);
  93. SessionMock.Raise(p => p.ErrorOccured += null, new ExceptionEventArgs(new Exception()));
  94. Assert.AreEqual(0, errorOccurredSignalCount);
  95. }
  96. [TestMethod]
  97. public void HostKeyReceivedOnSessionShouldNoLongerBeSignaledViaHostKeyReceivedOnBaseClient()
  98. {
  99. var hostKeyReceivedSignalCount = 0;
  100. _client.HostKeyReceived += (sender, args) => Interlocked.Increment(ref hostKeyReceivedSignalCount);
  101. SessionMock.Raise(p => p.HostKeyReceived += null, new HostKeyEventArgs(GetKeyHostAlgorithm()));
  102. Assert.AreEqual(0, hostKeyReceivedSignalCount);
  103. }
  104. [TestMethod]
  105. public void SessionShouldBeNull()
  106. {
  107. Assert.IsNull(_client.Session);
  108. }
  109. [TestMethod]
  110. public void IsConnectedShouldReturnFalse()
  111. {
  112. Assert.IsFalse(_client.IsConnected);
  113. }
  114. private static KeyHostAlgorithm GetKeyHostAlgorithm()
  115. {
  116. using (var s = TestBase.GetData("Key.RSA.txt"))
  117. {
  118. var privateKey = new PrivateKeyFile(s);
  119. return (KeyHostAlgorithm) privateKey.HostKeyAlgorithms.First();
  120. }
  121. }
  122. private class MyClient : BaseClient
  123. {
  124. private int _onConnectedCount;
  125. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  126. {
  127. }
  128. public Exception OnConnectedException { get; set; }
  129. protected override void OnConnected()
  130. {
  131. base.OnConnected();
  132. Interlocked.Increment(ref _onConnectedCount);
  133. if (OnConnectedException != null)
  134. {
  135. throw OnConnectedException;
  136. }
  137. }
  138. }
  139. }
  140. }