| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | using System;using System.Collections.Generic;using System.Globalization;using System.Text;using Microsoft.VisualStudio.TestTools.UnitTesting;using Moq;using Renci.SshNet.Channels;using Renci.SshNet.Common;namespace Renci.SshNet.Tests.Classes{    [TestClass]    public class SubsystemSession_Connect_Disposed    {        private Mock<ISession> _sessionMock;        private Mock<IChannelSession> _channelMock;        private string _subsystemName;        private SubsystemSessionStub _subsystemSession;        private TimeSpan _operationTimeout;        private Encoding _encoding;        private IList<EventArgs> _disconnectedRegister;        private IList<ExceptionEventArgs> _errorOccurredRegister;        private ObjectDisposedException _actualException;        [TestInitialize]        public void Setup()        {            Arrange();            Act();        }        protected void Arrange()        {            var random = new Random();            _subsystemName = random.Next().ToString(CultureInfo.InvariantCulture);            _operationTimeout = TimeSpan.FromSeconds(30);            _encoding = Encoding.UTF8;            _disconnectedRegister = new List<EventArgs>();            _errorOccurredRegister = new List<ExceptionEventArgs>();            _sessionMock = new Mock<ISession>(MockBehavior.Strict);            _channelMock = new Mock<IChannelSession>(MockBehavior.Strict);            var sequence = new MockSequence();            _sessionMock.InSequence(sequence).Setup(p => p.CreateChannelSession()).Returns(_channelMock.Object);            _channelMock.InSequence(sequence).Setup(p => p.Open());            _channelMock.InSequence(sequence).Setup(p => p.SendSubsystemRequest(_subsystemName)).Returns(true);            _subsystemSession = new SubsystemSessionStub(                _sessionMock.Object,                _subsystemName,                _operationTimeout,                _encoding);            _subsystemSession.Disconnected += (sender, args) => _disconnectedRegister.Add(args);            _subsystemSession.ErrorOccurred += (sender, args) => _errorOccurredRegister.Add(args);            _subsystemSession.Dispose();        }        protected void Act()        {            try            {                _subsystemSession.Connect();            }            catch (ObjectDisposedException ex)            {                _actualException = ex;            }        }        [TestMethod]        public void ConnectShouldThrowObjectDisposedException()        {            Assert.IsNotNull(_actualException);            Assert.AreEqual(string.Format("Cannot access a disposed object.{0}Object name: '{1}'.", Environment.NewLine, _actualException.ObjectName),_actualException.Message);            Assert.AreEqual(typeof(SubsystemSessionStub).FullName, _actualException.ObjectName);        }        [TestMethod]        public void DisconnectHasNeverFired()        {            Assert.AreEqual(0, _disconnectedRegister.Count);        }        [TestMethod]        public void ErrorOccurredHasNeverFired()        {            Assert.AreEqual(0, _errorOccurredRegister.Count);        }        [TestMethod]        public void IsOpenShouldReturnFalse()        {            Assert.IsFalse(_subsystemSession.IsOpen);        }    }}
 |