2
// AsyncTests.HttpClientTests.Test.Post
5
// Martin Baulig (martin.baulig@gmail.com)
7
// Copyright 2012 Xamarin Inc. (http://www.xamarin.com)
10
// Permission is hereby granted, free of charge, to any person obtaining
11
// a copy of this software and associated documentation files (the
12
// "Software"), to deal in the Software without restriction, including
13
// without limitation the rights to use, copy, modify, merge, publish,
14
// distribute, sublicense, and/or sell copies of the Software, and to
15
// permit persons to whom the Software is furnished to do so, subject to
16
// the following conditions:
18
// The above copyright notice and this permission notice shall be
19
// included in all copies or substantial portions of the Software.
21
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
using System.IO.Pipes;
35
using System.Threading;
36
using System.Threading.Tasks;
37
using System.Net.Http;
38
using System.Net.Http.Headers;
39
using NUnit.Framework;
40
using NUnit.Framework.Constraints;
41
using NUnit.Framework.SyntaxHelpers;
43
namespace AsyncTests.HttpClientTests.Test {
49
[HttpClientTestFixture]
51
const string Text = "Hello Uploaded Text";
52
const long UploadSize = 2000000;
55
public static void Post_Handler (ServerContext ctx)
57
ctx.Expect (ctx.Request.HttpMethod, Is.EqualTo ("POST"), "#1");
60
using (var reader = new StreamReader (ctx.Request.InputStream))
61
text = reader.ReadToEnd ();
63
ctx.Expect (text, Is.EqualTo (Text), "#3");
64
ctx.Response.StatusCode = 200;
67
[HttpClientTest (ThreadingMode = ThreadingMode.MainThread | ThreadingMode.ExitContext |
68
ThreadingMode.ThreadPool)]
69
public async Task Simple (HttpClientTestContext ctx,
70
CancellationToken cancellationToken)
72
var uri = Server.GetUri (Post_Handler);
74
var request = new HttpRequestMessage (HttpMethod.Post, uri);
75
request.Content = new StringContent (Text);
77
HttpResponseMessage response;
78
var task = ctx.Client.SendAsync (request, cancellationToken);
79
if (ctx.ThreadingMode == ThreadingMode.MainThread)
80
response = await task;
82
response = await task.ConfigureAwait (false);
83
if (ctx.ThreadingMode == ThreadingMode.ThreadPool)
86
ctx.AutoDispose (response);
87
Server.CheckException (response);
89
ctx.Assert (response.IsSuccessStatusCode, Is.True, "#100");
93
public static void Upload_Handler (ServerContext ctx)
95
ctx.Expect (ctx.Request.HttpMethod, Is.EqualTo ("POST"), "#1");
101
var buffer = new byte [20000];
102
ret = ctx.Request.InputStream.Read (buffer, 0, buffer.Length);
107
ctx.Expect (totalSize, Is.EqualTo (UploadSize), "#2");
108
ctx.Response.StatusCode = 200;
112
public async Task Upload (HttpClientTestContext ctx,
113
CancellationToken cancellationToken)
115
var uri = Server.GetUri (Upload_Handler);
117
var upload = new RandomDataStream (UploadSize);
119
var request = new HttpRequestMessage (HttpMethod.Post, uri);
120
request.Content = new StreamContent (upload);
122
HttpResponseMessage response;
123
var task = ctx.Client.SendAsync (request, cancellationToken);
124
if (ctx.ThreadingMode == ThreadingMode.MainThread)
125
response = await task;
127
response = await task.ConfigureAwait (false);
128
if (ctx.ThreadingMode == ThreadingMode.ThreadPool)
131
ctx.AutoDispose (response);
132
Server.CheckException (response);
134
ctx.Assert (response.IsSuccessStatusCode, Is.True, "#100");