ScpClientBenchmark.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System.Text;
  2. using BenchmarkDotNet.Attributes;
  3. using Renci.SshNet.IntegrationTests.TestsFixtures;
  4. namespace Renci.SshNet.IntegrationBenchmarks
  5. {
  6. [MemoryDiagnoser]
  7. [SimpleJob]
  8. public class ScpClientBenchmark : IntegrationBenchmarkBase
  9. {
  10. private readonly InfrastructureFixture _infrastructureFixture;
  11. private readonly string _file = $"/tmp/{Guid.NewGuid()}.txt";
  12. private ScpClient? _scpClient;
  13. private MemoryStream? _uploadStream;
  14. public ScpClientBenchmark()
  15. {
  16. _infrastructureFixture = InfrastructureFixture.Instance;
  17. }
  18. [GlobalSetup]
  19. public async Task Setup()
  20. {
  21. await GlobalSetup().ConfigureAwait(false);
  22. _scpClient = new ScpClient(_infrastructureFixture.SshServerHostName, _infrastructureFixture.SshServerPort, _infrastructureFixture.User.UserName, _infrastructureFixture.User.Password);
  23. await _scpClient.ConnectAsync(CancellationToken.None).ConfigureAwait(false);
  24. var fileContent = "File content !@#$%^&*()_+{}:,./<>[];'\\|";
  25. _uploadStream = new MemoryStream(Encoding.UTF8.GetBytes(fileContent));
  26. }
  27. [GlobalCleanup]
  28. public async Task Cleanup()
  29. {
  30. await GlobalCleanup().ConfigureAwait(false);
  31. await _uploadStream!.DisposeAsync().ConfigureAwait(false);
  32. }
  33. [Benchmark]
  34. public void Connect()
  35. {
  36. using var scpClient = new ScpClient(_infrastructureFixture.SshServerHostName, _infrastructureFixture.SshServerPort, _infrastructureFixture.User.UserName, _infrastructureFixture.User.Password);
  37. scpClient.Connect();
  38. }
  39. [Benchmark]
  40. public async Task ConnectAsync()
  41. {
  42. using var scpClient = new ScpClient(_infrastructureFixture.SshServerHostName, _infrastructureFixture.SshServerPort, _infrastructureFixture.User.UserName, _infrastructureFixture.User.Password);
  43. await scpClient.ConnectAsync(CancellationToken.None).ConfigureAwait(false);
  44. }
  45. [Benchmark]
  46. public string ConnectUploadAndDownload()
  47. {
  48. using var scpClient = new ScpClient(_infrastructureFixture.SshServerHostName, _infrastructureFixture.SshServerPort, _infrastructureFixture.User.UserName, _infrastructureFixture.User.Password);
  49. scpClient.Connect();
  50. _uploadStream!.Position = 0;
  51. scpClient.Upload(_uploadStream, _file);
  52. using var downloadStream = new MemoryStream();
  53. scpClient.Download(_file, downloadStream);
  54. return Encoding.UTF8.GetString(downloadStream.ToArray());
  55. }
  56. [Benchmark]
  57. public string UploadAndDownload()
  58. {
  59. _uploadStream!.Position = 0;
  60. _scpClient!.Upload(_uploadStream, _file);
  61. using var downloadStream = new MemoryStream();
  62. _scpClient.Download(_file, downloadStream);
  63. return Encoding.UTF8.GetString(downloadStream.ToArray());
  64. }
  65. }
  66. }