Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bring HttpClient from CoreFX. #7346

Merged
merged 6 commits into from
Nov 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions builds/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ $(SDK_CONFIG):
echo "DISABLE_ANDROID=1" > $@
echo "DISABLE_DESKTOP=1" >> $@
echo "DISABLE_WASM=1" >> $@
echo "ENABLE_IOS=1" >> $@
echo "ENABLE_MAC=1" >> $@


ifdef DISABLE_BUILDS_MAKEFILE_DEP
BUILDS_MAKEFILE_DEP =
Expand Down
2 changes: 1 addition & 1 deletion mk/mono.mk
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ NEEDED_MONO_BRANCH := 2019-10


MONO_DIRECTORY := mono
MONO_MODULE := https://github.com/mono/mono
MONO_MODULE := https://github.com/monojenkins/mono
4 changes: 0 additions & 4 deletions src/Foundation/NSUrlSessionHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -831,11 +831,7 @@ protected override void Dispose (bool disposing)
base.Dispose (disposing);
}

#if __WATCHOS__
protected override Task SerializeToStreamAsync (Stream stream, TransportContext context)
#else
protected internal override Task SerializeToStreamAsync (Stream stream, TransportContext context)
#endif
{
if (contentCopied) {
if (!content.CanSeek) {
Expand Down
2 changes: 1 addition & 1 deletion src/System.Net.Http/CFContentStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public void Close ()
data_event.Set ();
}

protected internal override async Task SerializeToStreamAsync (Stream stream, TransportContext context)
protected override async Task SerializeToStreamAsync (Stream stream, TransportContext context)
{
while (data_event.WaitOne ()) {
data_mutex.WaitOne ();
Expand Down
2 changes: 1 addition & 1 deletion src/System.Net.Http/CFNetworkHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ void HandleHasBytesAvailableEvent (object sender, CFStream.StreamEventArgs e)
var key = entry.Key.ToString ();
var value = entry.Value == null ? string.Empty : entry.Value.ToString ();
HttpHeaders item_headers;
if (HttpHeaders.GetKnownHeaderKind (key) == Headers.HttpHeaderKind.Content) {
if (HeaderDescriptor.TryGet (key, out var descriptor) && descriptor.HeaderType == HttpHeaderType.Content) {
item_headers = response_msg.Content.Headers;
} else {
item_headers = response_msg.Headers;
Expand Down
1 change: 0 additions & 1 deletion tests/linker/ios/link sdk/HttpClientHandlerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ public void HttpClient ()
Assert.That (handler.AutomaticDecompression, Is.EqualTo (DecompressionMethods.None), "AutomaticDecompression");
Assert.That (handler.ClientCertificateOptions, Is.EqualTo (ClientCertificateOption.Manual), "ClientCertificateOptions");
Assert.That (handler.MaxAutomaticRedirections, Is.EqualTo (50), "MaxAutomaticRedirections");
Assert.That (handler.MaxRequestContentBufferSize, Is.EqualTo (Int32.MaxValue), "MaxRequestContentBufferSize");
Assert.Null (handler.Proxy, "Proxy");
Assert.True (handler.SupportsAutomaticDecompression, "SupportsAutomaticDecompression");
Assert.True (handler.SupportsProxy, "SupportsProxy");
Expand Down
4 changes: 2 additions & 2 deletions tests/mmptest/src/MMPTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -474,9 +474,9 @@ public void HttpClientHandler (string mmpHandler, string expectedHandler)
References = " <Reference Include=\"System.Net.Http\" />",
TestCode = $@"
var client = new System.Net.Http.HttpClient ();
var field = client.GetType ().BaseType.GetField (""handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var field = client.GetType ().BaseType.GetField (""_handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (field == null)
throw new System.Exception (""Could not find the field 'handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
throw new System.Exception (""Could not find the field '_handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
var fieldValue = field.GetValue (client);
if (fieldValue == null)
throw new System.Exception (""Unexpected null value found in 'HttpMessageInvoker.handler' field."");
Expand Down
34 changes: 22 additions & 12 deletions tests/monotouch-test/System.Net.Http/MessageHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

using NUnit.Framework;
using System.Net.Http.Headers;
using System.Security.Authentication;
using System.Text;
using Foundation;
#if MONOMAC
Expand Down Expand Up @@ -169,29 +170,35 @@ public void RejectSslCertificatesServicePointManager (Type handlerType)
TestRuntime.AssertSystemVersion (PlatformName.MacOSX, 10, 9, throwIfOtherPlatform: false);
TestRuntime.AssertSystemVersion (PlatformName.iOS, 7, 0, throwIfOtherPlatform: false);

#if __MACOS__
if (handlerType == typeof (NSUrlSessionHandler) && TestRuntime.CheckSystemVersion (PlatformName.MacOSX, 10, 10, 0) && !TestRuntime.CheckSystemVersion (PlatformName.MacOSX, 10, 11, 0))
Assert.Ignore ("Fails on macOS 10.10: https://github.com/xamarin/maccore/issues/1645");
#endif

bool servicePointManagerCbWasExcuted = false;
bool validationCbWasExecuted = false;
bool customValidationCbWasExecuted = false;
bool invalidServicePointManagerCbWasExcuted = false;
bool done = false;
Exception ex = null;
Type expectedExceptionType = null;
HttpResponseMessage result = null;

var handler = GetHandler (handlerType);
if (handler is NSUrlSessionHandler ns) {
ns.TrustOverride += (a,b) => {
servicePointManagerCbWasExcuted = true;
if (handler is HttpClientHandler ch) {
expectedExceptionType = typeof (AuthenticationException);
ch.ServerCertificateCustomValidationCallback = (sender, certificate, chain, errors) => {
validationCbWasExecuted = true;
// return false, since we want to test that the exception is raised
return false;
};
} else {
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => {
servicePointManagerCbWasExcuted = true;
invalidServicePointManagerCbWasExcuted = true;
return false;
};
} else if (handler is NSUrlSessionHandler ns) {
expectedExceptionType = typeof (WebException);
ns.TrustOverride += (a,b) => {
validationCbWasExecuted = true;
// return false, since we want to test that the exception is raised
return false;
};
} else {
Assert.Fail ($"Invalid HttpMessageHandler: '{handler.GetType ()}'.");
}

TestRuntime.RunAsync (DateTime.Now.AddSeconds (30), async () =>
Expand All @@ -213,11 +220,14 @@ public void RejectSslCertificatesServicePointManager (Type handlerType)
if (!done) { // timeouts happen in the bots due to dns issues, connection issues etc.. we do not want to fail
Assert.Inconclusive ("Request timedout.");
} else {
// the ServicePointManager.ServerCertificateValidationCallback will never be executed.
Assert.False(invalidServicePointManagerCbWasExcuted);
Assert.True(validationCbWasExecuted);
// assert the exception type
Assert.IsNotNull (ex, (result == null)? "Expected exception is missing and got no result" : $"Expected exception but got {result.Content.ReadAsStringAsync ().Result}");
Assert.IsInstanceOfType (typeof (HttpRequestException), ex);
Assert.IsNotNull (ex.InnerException);
Assert.IsInstanceOfType (typeof (WebException), ex.InnerException);
Assert.IsInstanceOfType (expectedExceptionType, ex.InnerException);
}
}

Expand Down
4 changes: 2 additions & 2 deletions tests/mtouch/MTouch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3940,9 +3940,9 @@ public class HandlerTest
public void Test ()
{{
var client = new System.Net.Http.HttpClient ();
var field = client.GetType ().BaseType.GetField (""handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var field = client.GetType ().BaseType.GetField (""_handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (field == null)
throw new System.Exception (""Could not find the field 'handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
throw new System.Exception (""Could not find the field '_handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
var fieldValue = field.GetValue (client);
if (fieldValue == null)
throw new System.Exception (""Unexpected null value found in 'HttpMessageInvoker.handler' field."");
Expand Down