Bläddra i källkod

Update test as PipeStream.Flush is no longer invoked after every write, and as such PipeStream.ReadByte is blocking (unless stream is closed).

PipeStream.ReadByte returning -1 is now considered an error (stream closed).
drieseng 9 år sedan
förälder
incheckning
21dd66c1cc

+ 24 - 18
src/Renci.SshNet.Tests/Classes/ScpClientTest_Upload_FileInfoAndPath_Success.cs

@@ -45,9 +45,10 @@ namespace Renci.SshNet.Tests.Classes
             }
         }
 
-        protected void Arrange()
+        private void SetupData()
         {
             var random = new Random();
+
             _bufferSize = random.Next(5, 15);
             _fileSize = _bufferSize + 2; //force uploading 2 chunks
             _fileContent = CreateContent(_fileSize);
@@ -56,12 +57,18 @@ namespace Renci.SshNet.Tests.Classes
             _fileInfo = new FileInfo(_fileName);
             _path = random.Next().ToString(CultureInfo.InvariantCulture);
             _uploadingRegister = new List<ScpUploadEventArgs>();
+        }
 
+        private void CreateMocks()
+        {
             _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
             _sessionMock = new Mock<ISession>(MockBehavior.Strict);
             _channelSessionMock = new Mock<IChannelSession>(MockBehavior.Strict);
             _pipeStreamMock = new Mock<PipeStream>(MockBehavior.Strict);
+        }
 
+        private void SetupMocks()
+        {
             var sequence = new MockSequence();
             _serviceFactoryMock.InSequence(sequence)
                 .Setup(p => p.CreateSession(_connectionInfo))
@@ -73,22 +80,16 @@ namespace Renci.SshNet.Tests.Classes
             _channelSessionMock.InSequence(sequence)
                 .Setup(
                     p => p.SendExecRequest(string.Format("scp -t \"{0}\"", _path))).Returns(true);
-            for (var i = 0; i < random.Next(1, 3); i++)
-                _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(-1);
             _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(0);
             _channelSessionMock.InSequence(sequence).Setup(p => p.SendData(It.IsAny<byte[]>()));
-            for (var i = 0; i < random.Next(1, 3); i++)
-                _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(-1);
             _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(0);
             _channelSessionMock.InSequence(sequence)
                 .Setup(p => p.SendData(It.Is<byte[]>(b => b.SequenceEqual(CreateData(
-                                                                            string.Format("C0644 {0} {1}\n",
-                                                                                          _fileInfo.Length,
-                                                                                           Path.GetFileName(_fileName)
-                                                                                         )
-                                                                                     )))));
-            for (var i = 0; i < random.Next(1, 3); i++)
-                _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(-1);
+                    string.Format("C0644 {0} {1}\n",
+                        _fileInfo.Length,
+                        Path.GetFileName(_fileName)
+                        )
+                    )))));
             _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(0);
             _channelSessionMock.InSequence(sequence)
                 .Setup(
@@ -98,13 +99,18 @@ namespace Renci.SshNet.Tests.Classes
                     p => p.SendData(It.Is<byte[]>(b => b.Take(0, _fileContent.Length - _bufferSize).SequenceEqual(_fileContent.Take(_bufferSize, _fileContent.Length - _bufferSize))), 0, _fileContent.Length - _bufferSize));
             _channelSessionMock.InSequence(sequence)
                 .Setup(
-                    p => p.SendData(It.Is<byte[]>(b => b.SequenceEqual(new byte[] { 0 }))));
-            for (var i = 0; i < random.Next(1, 3); i++)
-                _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(-1);
+                    p => p.SendData(It.Is<byte[]>(b => b.SequenceEqual(new byte[] {0}))));
             _pipeStreamMock.InSequence(sequence).Setup(p => p.ReadByte()).Returns(0);
             _channelSessionMock.InSequence(sequence).Setup(p => p.Close());
             _channelSessionMock.InSequence(sequence).Setup(p => p.Dispose());
             _pipeStreamMock.As<IDisposable>().InSequence(sequence).Setup(p => p.Dispose());
+        }
+
+        protected void Arrange()
+        {
+            SetupData();
+            CreateMocks();
+            SetupMocks();
 
             _scpClient = new ScpClient(_connectionInfo, false, _serviceFactoryMock.Object)
                 {
@@ -161,12 +167,12 @@ namespace Renci.SshNet.Tests.Classes
             Assert.AreEqual(_fileSize, uploading.Uploaded);
         }
 
-        private IEnumerable<byte> CreateData(string command)
+        private static IEnumerable<byte> CreateData(string command)
         {
             return Encoding.Default.GetBytes(command);
         }
 
-        private byte[] CreateContent(int length)
+        private static byte[] CreateContent(int length)
         {
             var random = new Random();
             var content = new byte[length];
@@ -176,7 +182,7 @@ namespace Renci.SshNet.Tests.Classes
             return content;
         }
 
-        private string CreateTemporaryFile(byte[] content)
+        private static string CreateTemporaryFile(byte[] content)
         {
             var tempFile = Path.GetTempFileName();
             using (var fs = File.OpenWrite(tempFile))