Parcourir la source

Stabilise some more tests (#1438)

* Stabilise some more tests

* just increase the timeout
Rob Hague il y a 1 an
Parent
commit
5ab8f3edcb

+ 4 - 8
test/Renci.SshNet.Tests/Classes/BaseClientTest_Connected_KeepAliveInterval_NotNegativeOne.cs

@@ -59,13 +59,7 @@ namespace Renci.SshNet.Tests.Classes
         {
             _client.KeepAliveInterval = _keepAliveInterval;
 
-            // allow keep-alive to be sent a few times. .NET 8 is faster and
-            // we need to wait less because we want exactly three messages in a session.
-#if NETFRAMEWORK
-            Thread.Sleep(195);
-#else
-            Thread.Sleep(170);
-#endif
+            Thread.Sleep(200);
         }
 
         [TestMethod]
@@ -102,7 +96,9 @@ namespace Renci.SshNet.Tests.Classes
         [TestMethod]
         public void SendMessageOnSessionShouldBeInvokedThreeTimes()
         {
-            SessionMock.Verify(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()), Times.Exactly(3));
+#pragma warning disable IDE0002 // Name can be simplified; "Ambiguous reference between Moq.Range and System.Range"
+            SessionMock.Verify(p => p.TrySendMessage(It.IsAny<IgnoreMessage>()), Times.Between(2, 4, Moq.Range.Inclusive));
+#pragma warning restore IDE0002
         }
 
         private class MyClient : BaseClient

+ 12 - 17
test/Renci.SshNet.Tests/Classes/Channels/ChannelForwardedTcpipTest_Dispose_SessionIsConnectedAndChannelIsOpen.cs

@@ -30,7 +30,6 @@ namespace Renci.SshNet.Tests.Classes.Channels
         private TimeSpan _channelCloseTimeout;
         private IPEndPoint _remoteEndpoint;
         private AsyncSocketListener _remoteListener;
-        private EventWaitHandle _channelBindFinishedWaitHandle;
         private Exception _channelException;
         private IList<Socket> _connectedRegister;
         private IList<Socket> _disconnectedRegister;
@@ -76,7 +75,6 @@ namespace Renci.SshNet.Tests.Classes.Channels
             _remoteWindowSize = (uint)random.Next(0, int.MaxValue);
             _remotePacketSize = (uint)random.Next(100, 200);
             _channelCloseTimeout = TimeSpan.FromSeconds(random.Next(10, 20));
-            _channelBindFinishedWaitHandle = new ManualResetEvent(false);
             _channelException = null;
             _connectedRegister = new List<Socket>();
             _disconnectedRegister = new List<Socket>();
@@ -148,29 +146,27 @@ namespace Renci.SshNet.Tests.Classes.Channels
                                                  _remotePacketSize);
 
             _channelThread = new Thread(() =>
+            {
+                try
+                {
+                    _channel.Bind(_remoteEndpoint, _forwardedPortMock.Object);
+                }
+                catch (Exception ex)
                 {
-                    try
-                    {
-                        _channel.Bind(_remoteEndpoint, _forwardedPortMock.Object);
-                    }
-                    catch (Exception ex)
-                    {
-                        _channelException = ex;
-                    }
-                    finally
-                    {
-                        _ = _channelBindFinishedWaitHandle.Set();
-                    }
-                });
+                    _channelException = ex;
+                }
+            });
             _channelThread.Start();
 
             // give channel time to bind to remote endpoint
-            Thread.Sleep(100);
+            Thread.Sleep(300);
         }
 
         private void Act()
         {
             _channel.Dispose();
+
+            Assert.IsTrue(_channelThread.Join(TimeSpan.FromSeconds(1)));
         }
 
         [TestMethod]
@@ -185,7 +181,6 @@ namespace Renci.SshNet.Tests.Classes.Channels
         public void BindShouldHaveFinishedWithoutException()
         {
             Assert.IsNull(_channelException, _channelException?.ToString());
-            Assert.IsTrue(_channelBindFinishedWaitHandle.WaitOne(0));
         }
 
         [TestMethod]

+ 20 - 7
test/Renci.SshNet.Tests/Classes/SessionTest_Connected.cs

@@ -47,16 +47,29 @@ namespace Renci.SshNet.Tests.Classes
         [TestMethod]
         public void ShouldNotIncludeStrictKexPseudoAlgorithmInSubsequentKex()
         {
-            ServerBytesReceivedRegister.Clear();
-            Session.SendMessage(Session.ClientInitMessage);
+            using var kexReceived = new ManualResetEventSlim();
+            bool kexContainsPseudoAlg = true;
 
-            Thread.Sleep(100);
+            ServerListener.BytesReceived += ServerListener_BytesReceived;
 
-            Assert.IsTrue(ServerBytesReceivedRegister.Count > 0);
+            void ServerListener_BytesReceived(byte[] bytesReceived, System.Net.Sockets.Socket socket)
+            {
+                if (bytesReceived.Length > 5 && bytesReceived[5] == 20)
+                {
+                    // SSH_MSG_KEXINIT = 20
+                    var kexInitMessage = new KeyExchangeInitMessage();
+                    kexInitMessage.Load(bytesReceived, 6, bytesReceived.Length - 6);
+                    kexContainsPseudoAlg = kexInitMessage.KeyExchangeAlgorithms.Contains("kex-strict-c-v00@openssh.com");
+                    kexReceived.Set();
+                }
+            }
 
-            var kexInitMessage = new KeyExchangeInitMessage();
-            kexInitMessage.Load(ServerBytesReceivedRegister[0], 4 + 1 + 1, ServerBytesReceivedRegister[0].Length - 4 - 1 - 1);
-            Assert.IsFalse(kexInitMessage.KeyExchangeAlgorithms.Contains("kex-strict-c-v00@openssh.com"));
+            Session.SendMessage(Session.ClientInitMessage);
+
+            Assert.IsTrue(kexReceived.Wait(1000));
+            Assert.IsFalse(kexContainsPseudoAlg);
+
+            ServerListener.BytesReceived -= ServerListener_BytesReceived;
         }
 
         [TestMethod]