Skip to content

Commit

Permalink
[release/6.0.4xx] Adjust a few tests to cope with broken networks. (#…
Browse files Browse the repository at this point in the history
…15077)

This is a backport of #14943 and #15018.
  • Loading branch information
rolfbjarne authored May 23, 2022
1 parent b02cfd9 commit 4273d32
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 23 deletions.
6 changes: 6 additions & 0 deletions tests/linker/ios/link all/LinkAllTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,12 @@ public void TrustUsingOldPolicy ()
// caching means it will be called at least for the first run, but it might not
// be called again in subsequent requests (unless it expires)
Assert.That (test_policy.CheckCount, Is.GreaterThan (0), "policy checked");
} catch (WebException we) {
// The remote server returned an error: (502) Bad Gateway.
// The remote server returned an error: (503) Service Unavailable.
if (we.Message.Contains ("(502)") || we.Message.Contains ("(503)"))
Assert.Inconclusive (we.Message);
throw;
} finally {
ServicePointManager.CertificatePolicy = old;
}
Expand Down
8 changes: 6 additions & 2 deletions tests/linker/ios/link sdk/CryptoTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ public void TrustUsingNewCallback ()
// caching means it will be called at least for the first run, but it might not
// be called again in subsequent requests (unless it expires)
Assert.That (trust_validation_callback, Is.GreaterThan (0), "validation done");
} catch (WebException we) {
// The remote server returned an error: (502) Bad Gateway.
// The remote server returned an error: (503) Service Unavailable.
if (we.Message.Contains ("(502)") || we.Message.Contains ("(503)"))
Assert.Inconclusive (we.Message);
throw;
}
finally {
ServicePointManager.ServerCertificateValidationCallback = null;
Expand All @@ -84,8 +90,6 @@ public void SSL_IP_5706 ()
Assert.Ignore ("WatchOS doesn't support BSD sockets, which our network stack currently requires.");
#endif
WebClient wc = new WebClient ();
// the certificate contains (several rules) the host name
Assert.NotNull (wc.DownloadString (NetworkResources.MicrosoftUrl));

// IP are (generally) not allowed
foreach (var ip in Dns.GetHostAddresses ("www.google.com")) {
Expand Down
17 changes: 14 additions & 3 deletions tests/linker/ios/link sdk/LinkSdkRegressionTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -671,10 +671,21 @@ public void WebClient_SSL_Leak ()
#if __WATCHOS__
Assert.Ignore ("WatchOS doesn't support BSD sockets, which our network stack currently requires.");
#endif
var exceptions = new List<string> ();
WebClient wc = new WebClient ();
// note: needs to be executed under Instrument to verify it does not leak
string s = wc.DownloadString (NetworkResources.MicrosoftUrl);
Assert.NotNull (s);
foreach (var url in NetworkResources.HttpsUrls) {
try {
// note: needs to be executed under Instrument to verify it does not leak
string s = wc.DownloadString (url);
Assert.NotNull (s);
return; // one url succeeded, that's enough
} catch (Exception e) {
var msg = $"Url '{url}' failed: {e.ToString ()}";
Console.WriteLine (msg); // If this keeps occurring locally for the same url, we might have to take it off the list of urls to test.
exceptions.Add (msg);
}
}
Assert.That (exceptions, Is.Empty, "At least one url should work");
}

#if !__TVOS__ && !__WATCHOS__ && !__MACOS__
Expand Down
59 changes: 42 additions & 17 deletions tests/linker/mac/LinkAnyTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography;
Expand Down Expand Up @@ -63,22 +64,35 @@ public void GetWebPageAsyncTest ()
}
}

[Test]
public void WebClientTest ()
void WebClientTest (string[] urls)
{
var wc = new WebClient ();
var data = wc.DownloadString (NetworkResources.MicrosoftUrl);
var exceptions = new List<string> ();
foreach (var url in urls) {
try {
var wc = new WebClient ();
var data = wc.DownloadString (url);

Assert.That (data, Is.Not.Empty, "Downloaded content");
return; // one url succeeded, that's enough
} catch (Exception e) {
var msg = $"Url '{url}' failed: {e.ToString ()}";
Console.WriteLine (msg); // If this keeps occurring locally for the same url, we might have to take it off the list of urls to test.
exceptions.Add (msg);
}
}
Assert.That (exceptions, Is.Empty, "At least one url should work");
}

Assert.That (data, Is.Not.Empty, "Downloaded content");
[Test]
public void WebClientTest_Http ()
{
WebClientTest (NetworkResources.HttpUrls);
}

[Test]
public void WebClientTest_Https ()
{
var wc = new WebClient ();
var data = wc.DownloadString (NetworkResources.MicrosoftUrl);

Assert.That (data, Is.Not.Empty, "Downloaded content");
WebClientTest (NetworkResources.HttpsUrls);
}

[Test]
Expand All @@ -91,15 +105,26 @@ public void WebClientTest_Async ()

string data = null;

async Task GetWebPage (string url)
{
var wc = new WebClient ();
var task = wc.DownloadStringTaskAsync (new Uri (url));
data = await task;
var exceptions = new List<string> ();
foreach (var url in NetworkResources.HttpsUrls) {
try {
async Task GetWebPage (string url)
{
var wc = new WebClient ();
var task = wc.DownloadStringTaskAsync (new Uri (url));
data = await task;
}

GetWebPage (url).Wait ();
Assert.That (data, Is.Not.Empty, "Downloaded content");
return; // one url succeeded, that's enough
} catch (Exception e) {
var msg = $"Url '{url}' failed: {e.ToString ()}";
Console.WriteLine (msg); // If this keeps occurring locally for the same url, we might have to take it off the list of urls to test.
exceptions.Add (msg);
}
}

GetWebPage (NetworkResources.MicrosoftUrl).Wait ();
Assert.That (data, Is.Not.Empty, "Downloaded content");
Assert.That (exceptions, Is.Empty, "At least one url should work");
} finally {
SynchronizationContext.SetSynchronizationContext (current_sc);

Expand Down
13 changes: 12 additions & 1 deletion tests/monotouch-test/System.Net.Http/NetworkResources.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,22 @@ public static class NetworkResources
{
public static readonly string MicrosoftUrl = "https://www.microsoft.com";
public static readonly Uri MicrosoftUri = new Uri (MicrosoftUrl);
public static readonly string MicrosoftHttpUrl = "http://www.microsoft.com";
public static readonly string XamarinUrl = "https://dotnet.microsoft.com/apps/xamarin";
public static readonly string XamarinHttpUrl = "http://dotnet.microsoft.com/apps/xamarin";
public static readonly Uri XamarinUri = new Uri (XamarinUrl);
public static readonly string StatsUrl = "https://api.imgur.com/2/stats";

public static readonly string [] Urls = {
public static readonly string [] HttpsUrls = {
MicrosoftUrl,
XamarinUrl,
Httpbin.Url,
};

public static readonly string [] HttpUrls = {
MicrosoftHttpUrl,
XamarinHttpUrl,
Httpbin.HttpUrl,
};

// Robots urls, useful when we want to get a small file
Expand Down Expand Up @@ -43,6 +53,7 @@ public static class Httpbin {
public static readonly string PostUrl = "https://httpbin.org/post";
public static readonly string PutUrl = "https://httpbin.org/put";
public static readonly string CookiesUrl = $"https://httpbin.org/cookies";
public static readonly string HttpUrl = "http://httpbin.org";


public static string GetAbsoluteRedirectUrl (int count) => $"https://httpbin.org/absolute-redirect/{count}";
Expand Down

5 comments on commit 4273d32

@vs-mobiletools-engineering-service2

This comment was marked as outdated.

@vs-mobiletools-engineering-service2

This comment was marked as outdated.

@vs-mobiletools-engineering-service2

This comment was marked as outdated.

@vs-mobiletools-engineering-service2

This comment was marked as outdated.

@vs-mobiletools-engineering-service2

This comment was marked as outdated.

Please sign in to comment.