summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/DotNetOpenAuth.Test/AutoRedirectHandler.cs33
-rw-r--r--src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj1
-rw-r--r--src/DotNetOpenAuth.Test/MockingHostFactories.cs2
-rw-r--r--src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs13
-rw-r--r--src/DotNetOpenAuth.Test/OpenId/DiscoveryServices/UriDiscoveryServiceTests.cs19
5 files changed, 65 insertions, 3 deletions
diff --git a/src/DotNetOpenAuth.Test/AutoRedirectHandler.cs b/src/DotNetOpenAuth.Test/AutoRedirectHandler.cs
new file mode 100644
index 0000000..3f67259
--- /dev/null
+++ b/src/DotNetOpenAuth.Test/AutoRedirectHandler.cs
@@ -0,0 +1,33 @@
+namespace DotNetOpenAuth.Test {
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Net;
+ using System.Net.Http;
+ using System.Text;
+ using System.Threading.Tasks;
+
+ using DotNetOpenAuth.Messaging;
+
+ internal class AutoRedirectHandler : DelegatingHandler {
+ internal AutoRedirectHandler(HttpMessageHandler innerHandler)
+ : base(innerHandler) {
+ }
+
+ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) {
+ HttpResponseMessage response = null;
+ do {
+ if (response != null) {
+ var modifiedRequest = MessagingUtilities.Clone(request);
+ modifiedRequest.RequestUri = new Uri(request.RequestUri, response.Headers.Location);
+ request = modifiedRequest;
+ }
+
+ response = await base.SendAsync(request, cancellationToken);
+ }
+ while (response.StatusCode == HttpStatusCode.Redirect);
+
+ return response;
+ }
+ }
+}
diff --git a/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj b/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj
index 0e5a898..ab90935 100644
--- a/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj
+++ b/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj
@@ -104,6 +104,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
+ <Compile Include="AutoRedirectHandler.cs" />
<Compile Include="Configuration\SectionTests.cs" />
<Compile Include="Hosting\AspNetHost.cs" />
<Compile Include="Hosting\HostingTests.cs" />
diff --git a/src/DotNetOpenAuth.Test/MockingHostFactories.cs b/src/DotNetOpenAuth.Test/MockingHostFactories.cs
index a05fcdf..5dd09e2 100644
--- a/src/DotNetOpenAuth.Test/MockingHostFactories.cs
+++ b/src/DotNetOpenAuth.Test/MockingHostFactories.cs
@@ -28,7 +28,7 @@ namespace DotNetOpenAuth.Test {
public CookieContainer CookieContainer { get; set; }
public HttpMessageHandler CreateHttpMessageHandler() {
- return new CookieDelegatingHandler(new ForwardingMessageHandler(this.handlers, this), this.CookieContainer);
+ return new AutoRedirectHandler(new CookieDelegatingHandler(new ForwardingMessageHandler(this.handlers, this), this.CookieContainer));
}
public HttpClient CreateHttpClient(HttpMessageHandler handler = null) {
diff --git a/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs b/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs
index 87faac2..349be56 100644
--- a/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs
+++ b/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs
@@ -131,8 +131,21 @@ namespace DotNetOpenAuth.Test.Mocks {
}
internal static void RegisterMockResponse(this TestBase test, Uri requestUri, Uri responseUri, string contentType, WebHeaderCollection headers, string content) {
+ Requires.NotNull(requestUri, "requestUri");
+ Requires.NotNull(responseUri, "responseUri");
+ Requires.NotNullOrEmpty(contentType, "contentType");
+
test.Handle(requestUri).By(req => {
var response = new HttpResponseMessage();
+ response.RequestMessage = req;
+
+ if (requestUri != responseUri) {
+ // Simulate having followed redirects to get the final response.
+ var clonedRequest = MessagingUtilities.Clone(req);
+ clonedRequest.RequestUri = responseUri;
+ response.RequestMessage = clonedRequest;
+ }
+
response.CopyHeadersFrom(headers);
response.Content = new StringContent(content, Encoding.Default, contentType);
return response;
diff --git a/src/DotNetOpenAuth.Test/OpenId/DiscoveryServices/UriDiscoveryServiceTests.cs b/src/DotNetOpenAuth.Test/OpenId/DiscoveryServices/UriDiscoveryServiceTests.cs
index 0dfb880..3c54d98 100644
--- a/src/DotNetOpenAuth.Test/OpenId/DiscoveryServices/UriDiscoveryServiceTests.cs
+++ b/src/DotNetOpenAuth.Test/OpenId/DiscoveryServices/UriDiscoveryServiceTests.cs
@@ -9,6 +9,7 @@ namespace DotNetOpenAuth.Test.OpenId.DiscoveryServices {
using System.Collections.Generic;
using System.Linq;
using System.Net;
+ using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -237,11 +238,25 @@ namespace DotNetOpenAuth.Test.OpenId.DiscoveryServices {
await this.DiscoverAsync(url, version, expectedLocalId, providerEndpoint, expectSreg, useRedirect, null);
}
+ private string RegisterDiscoveryRedirector(Uri baseUrl) {
+ var redirectorUrl = new Uri(baseUrl, "Discovery/htmldiscovery/redirect.aspx");
+ this.Handle(redirectorUrl).By(req => {
+ string redirectTarget = HttpUtility.ParseQueryString(req.RequestUri.Query)["target"];
+ var response = new HttpResponseMessage(HttpStatusCode.Redirect);
+ response.Headers.Location = new Uri(redirectTarget, UriKind.RelativeOrAbsolute);
+ response.RequestMessage = req;
+ return response;
+ });
+
+ return redirectorUrl.AbsoluteUri + "?target=";
+ }
+
private async Task DiscoverAsync(string url, ProtocolVersion version, Identifier expectedLocalId, string providerEndpoint, bool expectSreg, bool useRedirect, WebHeaderCollection headers) {
Protocol protocol = Protocol.Lookup(version);
Uri baseUrl = new Uri("http://localhost/");
+ string redirectBase = this.RegisterDiscoveryRedirector(baseUrl);
UriIdentifier claimedId = new Uri(baseUrl, url);
- UriIdentifier userSuppliedIdentifier = new Uri(baseUrl, "Discovery/htmldiscovery/redirect.aspx?target=" + url);
+ UriIdentifier userSuppliedIdentifier = new Uri(redirectBase + Uri.EscapeDataString(url));
if (expectedLocalId == null) {
expectedLocalId = claimedId;
}
@@ -255,7 +270,7 @@ namespace DotNetOpenAuth.Test.OpenId.DiscoveryServices {
} else {
throw new InvalidOperationException();
}
- this.RegisterMockResponse(new Uri(idToDiscover), claimedId, contentType, headers ?? new WebHeaderCollection(), LoadEmbeddedFile(url));
+ this.RegisterMockResponse(claimedId, claimedId, contentType, headers ?? new WebHeaderCollection(), LoadEmbeddedFile(url));
IdentifierDiscoveryResult expected = IdentifierDiscoveryResult.CreateForClaimedIdentifier(
claimedId,