Răsfoiți Sursa

Harden test.

drieseng 9 ani în urmă
părinte
comite
e6b0e33727

+ 20 - 1
src/Renci.SshNet.Tests/Classes/ForwardedPortDynamicTest_Started_SocketVersionNotSupported.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
+using System.Threading;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Moq;
 using Renci.SshNet.Channels;
@@ -20,6 +21,7 @@ namespace Renci.SshNet.Tests.Classes
         private Socket _client;
         private IList<EventArgs> _closingRegister;
         private IList<ExceptionEventArgs> _exceptionRegister;
+        private ManualResetEvent _exceptionFired;
         private TimeSpan _connectionTimeout;
 
         [TestInitialize]
@@ -38,17 +40,25 @@ namespace Renci.SshNet.Tests.Classes
                 _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(5));
                 _forwardedPort.Stop();
             }
+
             if (_client != null)
             {
                 _client.Close();
                 _client = null;
             }
+
+            if (_exceptionFired != null)
+            {
+                _exceptionFired.Dispose();
+                _exceptionFired = null;
+            }
         }
 
         private void SetupData()
         {
             _closingRegister = new List<EventArgs>();
             _exceptionRegister = new List<ExceptionEventArgs>();
+            _exceptionFired = new ManualResetEvent(false);
             _connectionTimeout = TimeSpan.FromSeconds(5);
         }
 
@@ -70,6 +80,7 @@ namespace Renci.SshNet.Tests.Classes
             _channelMock.InSequence(seq).Setup(p => p.Close());
             _channelMock.InSequence(seq).Setup(p => p.Dispose());
         }
+
         private void Arrange()
         {
             SetupData();
@@ -78,7 +89,11 @@ namespace Renci.SshNet.Tests.Classes
 
             _forwardedPort = new ForwardedPortDynamic(8122);
             _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args);
-            _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args);
+            _forwardedPort.Exception += (sender, args) =>
+                {
+                    _exceptionRegister.Add(args);
+                    _exceptionFired.Set();
+                };
             _forwardedPort.Session = _sessionMock.Object;
             _forwardedPort.Start();
 
@@ -92,6 +107,10 @@ namespace Renci.SshNet.Tests.Classes
         {
             var buffer = new byte[] {0x07};
             _client.Send(buffer, 0, buffer.Length, SocketFlags.None);
+
+            // wait for Exception event to be fired as a way to ensure that SOCKS
+            // request has been handled completely
+            _exceptionFired.WaitOne(TimeSpan.FromMilliseconds(200));
         }
 
         [TestMethod]