| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using System;
- using System.Threading;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- using Renci.SshNet.Common;
- using Renci.SshNet.Tests.Common;
- namespace Renci.SshNet.Tests.Classes.Common
- {
- [TestClass]
- public class PipeStream_Close_BlockingWrite : TripleATestBase
- {
- private PipeStream _pipeStream;
- private Exception _writeException;
- private Thread _writehread;
- protected override void Arrange()
- {
- _pipeStream = new PipeStream { MaxBufferLength = 3 };
- _writehread = new Thread(() =>
- {
- _pipeStream.WriteByte(10);
- _pipeStream.WriteByte(13);
- _pipeStream.WriteByte(25);
- // attempting to write more bytes than the max. buffer length should block
- // until bytes are read or the stream is closed
- try
- {
- _pipeStream.WriteByte(35);
- }
- catch (Exception ex)
- {
- _writeException = ex;
- }
- });
- _writehread.Start();
- // ensure we've started writing
- Assert.IsFalse(_writehread.Join(50));
- }
- protected override void Act()
- {
- _pipeStream.Close();
- // give write time to complete
- _ = _writehread.Join(100);
- }
- [TestMethod]
- public void BlockingWriteShouldHaveBeenInterrupted()
- {
- Assert.AreEqual(ThreadState.Stopped, _writehread.ThreadState);
- }
- [TestMethod]
- public void WriteShouldHaveThrownObjectDisposedException()
- {
- Assert.IsNotNull(_writeException);
- Assert.AreEqual(typeof(ObjectDisposedException), _writeException.GetType());
- }
- }
- }
|