BaseClientTest_ConnectAsync_Timeout.cs 2.4 KB

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