Commit 267bce16 authored by Marc Gravell's avatar Marc Gravell

Merge pull request #306 from JonCole/master

Set AbortConnectOnFailure to false for Azure
parents 33072cb8 cf91c206
......@@ -176,6 +176,49 @@ public void CreateDisconnectedNonsenseConnection_DNS()
}
}
[Test]
public void AbortConnectFalseForAzure()
{
var options = ConfigurationOptions.Parse("contoso.redis.cache.windows.net");
Assert.IsFalse(options.AbortOnConnectFail);
}
[Test]
public void AbortConnectTrueForAzureWhenSpecified()
{
var options = ConfigurationOptions.Parse("contoso.redis.cache.windows.net,abortConnect=true");
Assert.IsTrue(options.AbortOnConnectFail);
}
[Test]
public void AbortConnectFalseForAzureChina()
{
// added a few upper case chars to validate comparison
var options = ConfigurationOptions.Parse("contoso.REDIS.CACHE.chinacloudapi.cn");
Assert.IsFalse(options.AbortOnConnectFail);
}
[Test]
public void AbortConnectFalseForAzureUSGov()
{
var options = ConfigurationOptions.Parse("contoso.redis.cache.usgovcloudapi.net");
Assert.IsFalse(options.AbortOnConnectFail);
}
[Test]
public void AbortConnectTrueForNonAzure()
{
var options = ConfigurationOptions.Parse("redis.contoso.com");
Assert.IsTrue(options.AbortOnConnectFail);
}
[Test]
public void AbortConnectDefaultWhenNoEndpointsSpecifiedYet()
{
var options = new ConfigurationOptions();
Assert.IsTrue(options.AbortOnConnectFail);
}
internal static void AssertNearlyEqual(double x, double y)
{
if (Math.Abs(x - y) > 0.00001) Assert.AreEqual(x, y);
......
......@@ -129,7 +129,7 @@ public static string TryNormalize(string value)
/// <summary>
/// Gets or sets whether connect/configuration timeouts should be explicitly notified via a TimeoutException
/// </summary>
public bool AbortOnConnectFail { get { return abortOnConnectFail ?? true; } set { abortOnConnectFail = value; } }
public bool AbortOnConnectFail { get { return abortOnConnectFail ?? GetDefaultAbortOnConnectFailSetting(); } set { abortOnConnectFail = value; } }
/// <summary>
/// Indicates whether admin operations should be allowed
......@@ -609,6 +609,38 @@ private void DoParse(string configuration, bool ignoreUnknown)
}
}
private bool GetDefaultAbortOnConnectFailSetting()
{
// Microsoft Azure team wants abortConnect=false by default
if (IsAzureEndpoint())
return false;
return true;
}
private bool IsAzureEndpoint()
{
var result = false;
var dnsEndpoints = endpoints.Select(endpoint => endpoint as DnsEndPoint).Where(ep => ep != null);
foreach(var ep in dnsEndpoints)
{
int firstDot = ep.Host.IndexOf('.');
if (firstDot >= 0)
{
var domain = ep.Host.Substring(firstDot).ToLowerInvariant();
switch(domain)
{
case ".redis.cache.windows.net":
case ".redis.cache.chinacloudapi.cn":
case ".redis.cache.usgovcloudapi.net":
return true;
}
}
}
return result;
}
private string InferSslHostFromEndpoints() {
var dnsEndpoints = endpoints.Select(endpoint => endpoint as DnsEndPoint);
string dnsHost = dnsEndpoints.First() != null ? dnsEndpoints.First().Host : null;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment