| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | 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());        }    }}
 |