| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | using System.Diagnostics;using Renci.SshNet.Common;namespace Renci.SshNet.IntegrationTests.OldIntegrationTests{    /// <summary>    /// Provides functionality for local port forwarding    /// </summary>    [TestClass]    public class ForwardedPortLocalTest : IntegrationTestBase    {        [TestMethod]        [WorkItem(713)]        [Owner("Kenneth_aa")]        [TestCategory("PortForwarding")]        [Description("Test if calling Stop on ForwardedPortLocal instance causes wait.")]        public void Test_PortForwarding_Local_Stop_Hangs_On_Wait()        {            using (var client = new SshClient(SshServerHostName, SshServerPort, User.UserName, User.Password))            {                client.Connect();                using var port1 = new ForwardedPortLocal("localhost", 8085, "www.google.com", 80);                client.AddForwardedPort(port1);                port1.Exception += delegate (object sender, ExceptionEventArgs e)                {                    Assert.Fail(e.Exception.ToString());                };                port1.Start();                var hasTestedTunnel = false;                _ = ThreadPool.QueueUserWorkItem(delegate (object state)                {                    try                    {                        var url = "http://www.google.com/";                        Debug.WriteLine("Starting web request to \"" + url + "\"");#if NET6_0_OR_GREATER                        var httpClient = new HttpClient();                        var response = httpClient.GetAsync(url)                                                 .ConfigureAwait(false)                                                 .GetAwaiter()                                                 .GetResult();#else                            var request = (HttpWebRequest) WebRequest.Create(url);                            var response = (HttpWebResponse) request.GetResponse();#endif // NET6_0_OR_GREATER                        Assert.IsNotNull(response);                        Debug.WriteLine("Http Response status code: " + response.StatusCode.ToString());                        response.Dispose();                        hasTestedTunnel = true;                    }                    catch (Exception ex)                    {                        Assert.Fail(ex.ToString());                    }                });                // Wait for the web request to complete.                while (!hasTestedTunnel)                {                    Thread.Sleep(1000);                }                try                {                    // Try stop the port forwarding, wait 3 seconds and fail if it is still started.                    _ = ThreadPool.QueueUserWorkItem(delegate (object state)                    {                        Debug.WriteLine("Trying to stop port forward.");                        port1.Stop();                        Debug.WriteLine("Port forwarding stopped.");                    });                    Thread.Sleep(3000);                    if (port1.IsStarted)                    {                        Assert.Fail("Port forwarding not stopped.");                    }                }                catch (Exception ex)                {                    Assert.Fail(ex.ToString());                }                client.RemoveForwardedPort(port1);                client.Disconnect();                Debug.WriteLine("Success.");            }        }        [TestMethod]        [ExpectedException(typeof(SshConnectionException))]        public void Test_PortForwarding_Local_Without_Connecting()        {            using (var client = new SshClient(SshServerHostName, SshServerPort, User.UserName, User.Password))            {                using var port1 = new ForwardedPortLocal("localhost", 8084, "www.renci.org", 80);                client.AddForwardedPort(port1);                port1.Exception += delegate (object sender, ExceptionEventArgs e)                {                    Assert.Fail(e.Exception.ToString());                };                port1.Start();                var test = Parallel.For(0,                                 100,                                 counter =>                                 {                                     var start = DateTime.Now;#if NET6_0_OR_GREATER                                     var httpClient = new HttpClient();                                     using (var response = httpClient.GetAsync("http://localhost:8084").GetAwaiter().GetResult())                                     {                                         var data = ReadStream(response.Content.ReadAsStream());#else                                        var request = (HttpWebRequest) WebRequest.Create("http://localhost:8084");                                        using (var response = (HttpWebResponse) request.GetResponse())                                        {                                            var data = ReadStream(response.GetResponseStream());#endif // NET6_0_OR_GREATER                                         var end = DateTime.Now;                                         Debug.WriteLine(string.Format("Request# {2}: Lenght: {0} Time: {1}", data.Length, end - start, counter));                                     }                                 });            }        }        private static byte[] ReadStream(Stream stream)        {            var buffer = new byte[1024];            using (var ms = new MemoryStream())            {                while (true)                {                    var read = stream.Read(buffer, 0, buffer.Length);                    if (read > 0)                    {                        ms.Write(buffer, 0, read);                    }                    else                    {                        return ms.ToArray();                    }                }            }        }    }}
 |