PipeStream_Flush_NoBytesRemainingAfterRead.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Threading;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Renci.SshNet.Common;
  4. using Renci.SshNet.Tests.Common;
  5. namespace Renci.SshNet.Tests.Classes.Common
  6. {
  7. [TestClass]
  8. public class PipeStream_Flush_NoBytesRemainingAfterRead : TripleATestBase
  9. {
  10. private PipeStream _pipeStream;
  11. private byte[] _readBuffer;
  12. private int _bytesRead;
  13. private Thread _readThread;
  14. protected override void Arrange()
  15. {
  16. _pipeStream = new PipeStream();
  17. _pipeStream.WriteByte(10);
  18. _pipeStream.WriteByte(13);
  19. _bytesRead = 0;
  20. _readBuffer = new byte[4];
  21. _readThread = new Thread(() => _bytesRead = _pipeStream.Read(_readBuffer, 0, _readBuffer.Length));
  22. _readThread.Start();
  23. // ensure we've started reading
  24. Assert.IsFalse(_readThread.Join(50));
  25. }
  26. protected override void Act()
  27. {
  28. _pipeStream.Flush();
  29. // give async read time to complete
  30. _ = _readThread.Join(100);
  31. }
  32. [TestMethod]
  33. public void AsyncReadShouldHaveFinished()
  34. {
  35. Assert.AreEqual(ThreadState.Stopped, _readThread.ThreadState);
  36. }
  37. [TestMethod]
  38. public void ReadShouldReturnNumberOfBytesAvailableThatAreWrittenToBuffer()
  39. {
  40. Assert.AreEqual(2, _bytesRead);
  41. }
  42. [TestMethod]
  43. public void BytesAvailableInStreamShouldHaveBeenWrittenToBuffer()
  44. {
  45. Assert.AreEqual(10, _readBuffer[0]);
  46. Assert.AreEqual(13, _readBuffer[1]);
  47. Assert.AreEqual(0, _readBuffer[2]);
  48. Assert.AreEqual(0, _readBuffer[3]);
  49. }
  50. }
  51. }