ServiceFactoryTest_CreateConnector.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System;
  2. using Microsoft.Extensions.Logging.Abstractions;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using Moq;
  5. using Renci.SshNet.Connection;
  6. namespace Renci.SshNet.Tests.Classes
  7. {
  8. [TestClass]
  9. public class ServiceFactoryTest_CreateConnector
  10. {
  11. private ServiceFactory _serviceFactory;
  12. private Mock<IConnectionInfo> _connectionInfoMock;
  13. private Mock<ISocketFactory> _socketFactoryMock;
  14. [TestInitialize]
  15. public void Setup()
  16. {
  17. _serviceFactory = new ServiceFactory();
  18. _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
  19. _connectionInfoMock.Setup(p => p.LoggerFactory).Returns(NullLoggerFactory.Instance);
  20. _socketFactoryMock = new Mock<ISocketFactory>(MockBehavior.Strict);
  21. }
  22. [TestMethod]
  23. public void ConnectionInfoIsNull()
  24. {
  25. const IConnectionInfo connectionInfo = null;
  26. try
  27. {
  28. _serviceFactory.CreateConnector(connectionInfo, _socketFactoryMock.Object);
  29. Assert.Fail();
  30. }
  31. catch (ArgumentNullException ex)
  32. {
  33. Assert.IsNull(ex.InnerException);
  34. Assert.AreEqual("connectionInfo", ex.ParamName);
  35. }
  36. }
  37. [TestMethod]
  38. public void SocketFactoryIsNull()
  39. {
  40. const ISocketFactory socketFactory = null;
  41. try
  42. {
  43. _serviceFactory.CreateConnector(_connectionInfoMock.Object, socketFactory);
  44. Assert.Fail();
  45. }
  46. catch (ArgumentNullException ex)
  47. {
  48. Assert.IsNull(ex.InnerException);
  49. Assert.AreEqual("socketFactory", ex.ParamName);
  50. }
  51. }
  52. [TestMethod]
  53. public void ProxyType_Http()
  54. {
  55. _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.Http);
  56. var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object, _socketFactoryMock.Object);
  57. Assert.IsNotNull(actual);
  58. Assert.AreEqual(typeof(HttpConnector), actual.GetType());
  59. var httpConnector = (HttpConnector)actual;
  60. Assert.AreSame(_socketFactoryMock.Object, httpConnector.SocketFactory);
  61. _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
  62. }
  63. [TestMethod]
  64. public void ProxyType_None()
  65. {
  66. _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.None);
  67. var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object, _socketFactoryMock.Object);
  68. Assert.IsNotNull(actual);
  69. Assert.AreEqual(typeof(DirectConnector), actual.GetType());
  70. var directConnector = (DirectConnector)actual;
  71. Assert.AreSame(_socketFactoryMock.Object, directConnector.SocketFactory);
  72. _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
  73. }
  74. [TestMethod]
  75. public void ProxyType_Socks4()
  76. {
  77. _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.Socks4);
  78. var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object, _socketFactoryMock.Object);
  79. Assert.IsNotNull(actual);
  80. Assert.AreEqual(typeof(Socks4Connector), actual.GetType());
  81. var socks4Connector = (Socks4Connector)actual;
  82. Assert.AreSame(_socketFactoryMock.Object, socks4Connector.SocketFactory);
  83. _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
  84. }
  85. [TestMethod]
  86. public void ProxyType_Socks5()
  87. {
  88. _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.Socks5);
  89. var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object, _socketFactoryMock.Object);
  90. Assert.IsNotNull(actual);
  91. Assert.AreEqual(typeof(Socks5Connector), actual.GetType());
  92. var socks5Connector = (Socks5Connector)actual;
  93. Assert.AreSame(_socketFactoryMock.Object, socks5Connector.SocketFactory);
  94. _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
  95. }
  96. [TestMethod]
  97. public void ProxyType_Undefined()
  98. {
  99. _connectionInfoMock.Setup(p => p.ProxyType).Returns((ProxyTypes)666);
  100. try
  101. {
  102. _serviceFactory.CreateConnector(_connectionInfoMock.Object, _socketFactoryMock.Object);
  103. Assert.Fail();
  104. }
  105. catch (NotSupportedException ex)
  106. {
  107. Assert.IsNull(ex.InnerException);
  108. Assert.AreEqual("ProxyTypes '666' is not supported.", ex.Message);
  109. }
  110. _connectionInfoMock.Verify(p => p.ProxyType, Times.Exactly(2));
  111. }
  112. }
  113. }