| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using System;
- using System.Linq;
- using System.Threading;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- using Moq;
- using Renci.SshNet.Common;
- using Renci.SshNet.Security;
- using Renci.SshNet.Tests.Common;
- namespace Renci.SshNet.Tests.Classes
- {
- [TestClass]
- public class BaseClientTest_Connect_OnConnectedThrowsException : BaseClientTestBase
- {
- private MyClient _client;
- private ConnectionInfo _connectionInfo;
- private ApplicationException _onConnectException;
- private ApplicationException _actualException;
- protected override void SetupData()
- {
- _connectionInfo = new ConnectionInfo("host", "user", new PasswordAuthenticationMethod("user", "pwd"));
- _onConnectException = new ApplicationException();
- }
- protected override void SetupMocks()
- {
- ServiceFactoryMock.Setup(p => p.CreateSocketFactory())
- .Returns(SocketFactoryMock.Object);
- ServiceFactoryMock.Setup(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object))
- .Returns(SessionMock.Object);
- SessionMock.Setup(p => p.Connect());
- SessionMock.Setup(p => p.Dispose());
- }
- protected override void TearDown()
- {
- if (_client != null)
- {
- SessionMock.Setup(p => p.OnDisconnecting());
- SessionMock.Setup(p => p.Dispose());
- _client.Dispose();
- }
- }
- protected override void Arrange()
- {
- base.Arrange();
- _client = new MyClient(_connectionInfo, false, ServiceFactoryMock.Object)
- {
- OnConnectedException = _onConnectException
- };
- }
- protected override void Act()
- {
- try
- {
- _client.Connect();
- Assert.Fail();
- }
- catch (ApplicationException ex)
- {
- _actualException = ex;
- }
- }
- [TestMethod]
- public void ConnectShouldRethrowExceptionThrownByOnConnect()
- {
- Assert.IsNotNull(_actualException);
- Assert.AreSame(_onConnectException, _actualException);
- }
- [TestMethod]
- public void CreateSocketFactoryOnServiceFactoryShouldBeInvokedOnce()
- {
- ServiceFactoryMock.Verify(p => p.CreateSocketFactory(), Times.Once);
- }
- [TestMethod]
- public void CreateSessionOnServiceFactoryShouldBeInvokedOnce()
- {
- ServiceFactoryMock.Verify(p => p.CreateSession(_connectionInfo, SocketFactoryMock.Object),
- Times.Once);
- }
- [TestMethod]
- public void ConnectOnSessionShouldBeInvokedOnce()
- {
- SessionMock.Verify(p => p.Connect(), Times.Once);
- }
- [TestMethod]
- public void DisposeOnSessionShouldBeInvokedOnce()
- {
- SessionMock.Verify(p => p.Dispose(), Times.Once);
- }
- [TestMethod]
- public void ErrorOccuredOnSessionShouldNoLongerBeSignaledViaErrorOccurredOnBaseClient()
- {
- var errorOccurredSignalCount = 0;
- _client.ErrorOccurred += (sender, args) => Interlocked.Increment(ref errorOccurredSignalCount);
- SessionMock.Raise(p => p.ErrorOccured += null, new ExceptionEventArgs(new Exception()));
- Assert.AreEqual(0, errorOccurredSignalCount);
- }
- [TestMethod]
- public void HostKeyReceivedOnSessionShouldNoLongerBeSignaledViaHostKeyReceivedOnBaseClient()
- {
- var hostKeyReceivedSignalCount = 0;
- _client.HostKeyReceived += (sender, args) => Interlocked.Increment(ref hostKeyReceivedSignalCount);
- SessionMock.Raise(p => p.HostKeyReceived += null, new HostKeyEventArgs(GetKeyHostAlgorithm()));
- Assert.AreEqual(0, hostKeyReceivedSignalCount);
- }
- [TestMethod]
- public void SessionShouldBeNull()
- {
- Assert.IsNull(_client.Session);
- }
- [TestMethod]
- public void IsConnectedShouldReturnFalse()
- {
- Assert.IsFalse(_client.IsConnected);
- }
- private static KeyHostAlgorithm GetKeyHostAlgorithm()
- {
- using (var s = TestBase.GetData("Key.RSA.txt"))
- {
- var privateKey = new PrivateKeyFile(s);
- return (KeyHostAlgorithm) privateKey.HostKeyAlgorithms.First();
- }
- }
- private class MyClient : BaseClient
- {
- private int _onConnectedCount;
- public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
- {
- }
- public Exception OnConnectedException { get; set; }
- protected override void OnConnected()
- {
- base.OnConnected();
- Interlocked.Increment(ref _onConnectedCount);
- if (OnConnectedException != null)
- {
- throw OnConnectedException;
- }
- }
- }
- }
- }
|