ScpClientTest.NET40.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Renci.SshNet.Common;
  3. using Renci.SshNet.Tests.Properties;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. namespace Renci.SshNet.Tests.Classes
  8. {
  9. /// <summary>
  10. /// Provides SCP client functionality.
  11. /// </summary>
  12. public partial class ScpClientTest
  13. {
  14. [TestMethod]
  15. [TestCategory("Scp")]
  16. public void Test_Scp_File_20_Parallel_Upload_Download()
  17. {
  18. using (var scp = new ScpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  19. {
  20. scp.Connect();
  21. var uploadFilenames = new string[20];
  22. for (int i = 0; i < uploadFilenames.Length; i++)
  23. {
  24. uploadFilenames[i] = Path.GetTempFileName();
  25. this.CreateTestFile(uploadFilenames[i], 1);
  26. }
  27. Parallel.ForEach(uploadFilenames,
  28. (filename) =>
  29. {
  30. scp.Upload(new FileInfo(filename), Path.GetFileName(filename));
  31. });
  32. Parallel.ForEach(uploadFilenames,
  33. (filename) =>
  34. {
  35. scp.Download(Path.GetFileName(filename), new FileInfo(string.Format("{0}.down", filename)));
  36. });
  37. var result = from file in uploadFilenames
  38. where
  39. CalculateMD5(file) == CalculateMD5(string.Format("{0}.down", file))
  40. select file;
  41. scp.Disconnect();
  42. Assert.IsTrue(result.Count() == uploadFilenames.Length);
  43. }
  44. }
  45. [TestMethod]
  46. [TestCategory("Scp")]
  47. public void Test_Scp_File_Upload_Download_Events()
  48. {
  49. using (var scp = new ScpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  50. {
  51. scp.Connect();
  52. var uploadFilenames = new string[10];
  53. for (int i = 0; i < uploadFilenames.Length; i++)
  54. {
  55. uploadFilenames[i] = Path.GetTempFileName();
  56. this.CreateTestFile(uploadFilenames[i], 1);
  57. }
  58. var uploadedFiles = uploadFilenames.ToDictionary((filename) => Path.GetFileName(filename), (filename) => 0L);
  59. var downloadedFiles = uploadFilenames.ToDictionary((filename) => string.Format("{0}.down", Path.GetFileName(filename)), (filename) => 0L);
  60. scp.Uploading += delegate(object sender, ScpUploadEventArgs e)
  61. {
  62. uploadedFiles[e.Filename] = e.Uploaded;
  63. };
  64. scp.Downloading += delegate(object sender, ScpDownloadEventArgs e)
  65. {
  66. downloadedFiles[string.Format("{0}.down", e.Filename)] = e.Downloaded;
  67. };
  68. Parallel.ForEach(uploadFilenames,
  69. (filename) =>
  70. {
  71. scp.Upload(new FileInfo(filename), Path.GetFileName(filename));
  72. });
  73. Parallel.ForEach(uploadFilenames,
  74. (filename) =>
  75. {
  76. scp.Download(Path.GetFileName(filename), new FileInfo(string.Format("{0}.down", filename)));
  77. });
  78. var result = from uf in uploadedFiles
  79. from df in downloadedFiles
  80. where
  81. string.Format("{0}.down", uf.Key) == df.Key
  82. && uf.Value == df.Value
  83. select uf;
  84. scp.Disconnect();
  85. Assert.IsTrue(result.Count() == uploadFilenames.Length && uploadFilenames.Length == uploadedFiles.Count && uploadedFiles.Count == downloadedFiles.Count);
  86. }
  87. }
  88. }
  89. }