2
// AsyncTests.HttpClientTests.Test.Redirection
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.
32
using System.Diagnostics;
33
using System.Threading;
34
using System.Threading.Tasks;
35
using System.Net.Http;
36
using NUnit.Framework;
37
using NUnit.Framework.Constraints;
38
using NUnit.Framework.SyntaxHelpers;
40
namespace AsyncTests.HttpClientTests.Test {
45
[HttpClientTestFixture (ReuseContext = false)]
46
public class Redirection {
47
public const string Text = "Hello World";
50
public static void HandleRequest (ServerContext ctx)
52
var simple = Server.GetUri (Simple.SimpleHtml_Handler);
53
ctx.Response.StatusCode = (int)HttpStatusCode.Moved;
54
ctx.Response.RedirectLocation = simple.AbsolutePath;
58
public async Task TestRedirection (HttpClientTestContext ctx)
60
var uri = Server.GetUri (HandleRequest);
61
ctx.Handler.AllowAutoRedirect = true;
62
var result = await ctx.Client.GetStringAsync (uri).ConfigureAwait (false);
63
ctx.Assert (result, Is.EqualTo (Text));
67
[ExpectedException (typeof (HttpRequestException))]
68
public async Task TestNoRedirection (HttpClientTestContext ctx)
70
var uri = Server.GetUri (HandleRequest);
71
ctx.Handler.AllowAutoRedirect = false;
72
await ctx.Client.GetStringAsync (uri).ConfigureAwait (false);
76
public async Task TestStatusCode (HttpClientTestContext ctx,
77
CancellationToken cancellationToken)
79
var uri = Server.GetUri (HandleRequest);
80
ctx.Handler.AllowAutoRedirect = false;
81
var response = await ctx.Client.GetAsync (
82
uri, HttpCompletionOption.ResponseHeadersRead,
83
cancellationToken).ConfigureAwait (false);
85
ctx.AutoDispose (response);
86
ctx.Assert (response.StatusCode, Is.EqualTo (HttpStatusCode.Moved));