-
-
Notifications
You must be signed in to change notification settings - Fork 979
Expand file tree
/
Copy pathHttpConnectorTest_Connect_TimeoutConnectingToProxy.cs
More file actions
134 lines (115 loc) · 4.53 KB
/
HttpConnectorTest_Connect_TimeoutConnectingToProxy.cs
File metadata and controls
134 lines (115 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using System.Diagnostics;
using System.Globalization;
using System.Net;
using System.Net.Sockets;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using Renci.SshNet.Common;
namespace Renci.SshNet.Tests.Classes.Connection
{
[TestClass]
public class HttpConnectorTest_Connect_TimeoutConnectingToProxy : HttpConnectorTestBase
{
private ConnectionInfo _connectionInfo;
private Exception _actualException;
private Socket _clientSocket;
private Stopwatch _stopWatch;
protected override void SetupData()
{
base.SetupData();
var random = new Random();
_connectionInfo = new ConnectionInfo(IPAddress.Loopback.ToString(),
777,
"user",
ProxyTypes.Http,
IPAddress.Loopback.ToString(),
8122,
"proxyUser",
"proxyPwd",
new KeyboardInteractiveAuthenticationMethod("user"))
{
Timeout = TimeSpan.FromMilliseconds(random.Next(50, 200))
};
_stopWatch = new Stopwatch();
_actualException = null;
_clientSocket = SocketFactory.Create(SocketType.Stream, ProtocolType.Tcp);
}
protected override void SetupMocks()
{
_ = SocketFactoryMock.Setup(p => p.Create(SocketType.Stream, ProtocolType.Tcp))
.Returns(_clientSocket);
}
protected override void TearDown()
{
base.TearDown();
_clientSocket?.Dispose();
}
protected override void Act()
{
_stopWatch.Start();
try
{
_ = Connector.Connect(_connectionInfo);
Assert.Fail();
}
catch (SshOperationTimeoutException ex)
{
_actualException = ex;
}
catch (SocketException ex)
{
_actualException = ex;
}
finally
{
_stopWatch.Stop();
}
}
[TestMethod]
[OSCondition(OperatingSystems.Windows)]
public void ConnectShouldHaveThrownSshOperationTimeoutExceptionOnWindows()
{
Assert.IsNull(_actualException.InnerException);
Assert.IsInstanceOfType<SshOperationTimeoutException>(_actualException);
Assert.AreEqual(string.Format(CultureInfo.InvariantCulture, "Connection failed to establish within {0} milliseconds.", _connectionInfo.Timeout.TotalMilliseconds), _actualException.Message);
}
[TestMethod]
[OSCondition(OperatingSystems.Linux)]
public void ConnectShouldHaveThrownSshOperationTimeoutExceptionOnLinux()
{
Assert.IsNull(_actualException.InnerException);
Assert.IsInstanceOfType<SocketException>(_actualException);
Assert.AreEqual("Connection refused", _actualException.Message);
}
[TestMethod]
[OSCondition(OperatingSystems.Windows)]
public void ConnectShouldHaveRespectedTimeoutOnWindows()
{
var errorText = string.Format("Elapsed: {0}, Timeout: {1}",
_stopWatch.ElapsedMilliseconds,
_connectionInfo.Timeout.TotalMilliseconds);
// Compare elapsed time with configured timeout, allowing for a margin of error
Assert.IsGreaterThanOrEqualTo(_connectionInfo.Timeout.TotalMilliseconds - 10, _stopWatch.ElapsedMilliseconds, errorText);
Assert.IsLessThan(_connectionInfo.Timeout.TotalMilliseconds + 100, _stopWatch.ElapsedMilliseconds, errorText);
}
[TestMethod]
public void ClientSocketShouldHaveBeenDisposed()
{
try
{
_ = _clientSocket.Receive(new byte[0]);
Assert.Fail();
}
catch (ObjectDisposedException)
{
}
}
[TestMethod]
public void CreateOnSocketFactoryShouldHaveBeenInvokedOnce()
{
SocketFactoryMock.Verify(p => p.Create(SocketType.Stream, ProtocolType.Tcp),
Times.Once());
}
}
}