BaseClientTest_ConnectAsync_Timeout.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using Microsoft.Extensions.Logging.Abstractions;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using Moq;
  7. #if !NET
  8. using Renci.SshNet.Abstractions;
  9. #endif
  10. using Renci.SshNet.Common;
  11. using Renci.SshNet.Connection;
  12. namespace Renci.SshNet.Tests.Classes
  13. {
  14. [TestClass]
  15. public class BaseClientTest_ConnectAsync_Timeout
  16. {
  17. private BaseClient _client;
  18. [TestInitialize]
  19. public void Init()
  20. {
  21. var sessionMock = new Mock<ISession>();
  22. sessionMock.Setup(p => p.SessionLoggerFactory).Returns(NullLoggerFactory.Instance);
  23. var serviceFactoryMock = new Mock<IServiceFactory>();
  24. var socketFactoryMock = new Mock<ISocketFactory>();
  25. sessionMock.Setup(p => p.ConnectAsync(It.IsAny<CancellationToken>()))
  26. .Returns<CancellationToken>(c => Task.Delay(Timeout.Infinite, c));
  27. serviceFactoryMock.Setup(p => p.CreateSocketFactory())
  28. .Returns(socketFactoryMock.Object);
  29. var connectionInfo = new ConnectionInfo("host", "user", new PasswordAuthenticationMethod("user", "pwd"))
  30. {
  31. Timeout = TimeSpan.FromSeconds(1)
  32. };
  33. serviceFactoryMock.Setup(p => p.CreateSession(connectionInfo, socketFactoryMock.Object))
  34. .Returns(sessionMock.Object);
  35. _client = new MyClient(connectionInfo, false, serviceFactoryMock.Object);
  36. }
  37. [TestMethod]
  38. public async Task ConnectAsyncWithTimeoutThrowsSshTimeoutException()
  39. {
  40. await Assert.ThrowsExceptionAsync<SshOperationTimeoutException>(() => _client.ConnectAsync(CancellationToken.None));
  41. }
  42. [TestMethod]
  43. public async Task ConnectAsyncWithCancelledTokenThrowsOperationCancelledException()
  44. {
  45. using var cancellationTokenSource = new CancellationTokenSource();
  46. await cancellationTokenSource.CancelAsync();
  47. await Assert.ThrowsExceptionAsync<OperationCanceledException>(() => _client.ConnectAsync(cancellationTokenSource.Token));
  48. }
  49. [TestCleanup]
  50. public void Cleanup()
  51. {
  52. _client?.Dispose();
  53. }
  54. private class MyClient : BaseClient
  55. {
  56. public MyClient(ConnectionInfo connectionInfo, bool ownsConnectionInfo, IServiceFactory serviceFactory) : base(connectionInfo, ownsConnectionInfo, serviceFactory)
  57. {
  58. }
  59. }
  60. }
  61. }