diff options
Diffstat (limited to 'src/DotNetOpenAuth.Test/OpenId/NonIdentityTests.cs')
-rw-r--r-- | src/DotNetOpenAuth.Test/OpenId/NonIdentityTests.cs | 91 |
1 files changed, 61 insertions, 30 deletions
diff --git a/src/DotNetOpenAuth.Test/OpenId/NonIdentityTests.cs b/src/DotNetOpenAuth.Test/OpenId/NonIdentityTests.cs index 393239b..11463c7 100644 --- a/src/DotNetOpenAuth.Test/OpenId/NonIdentityTests.cs +++ b/src/DotNetOpenAuth.Test/OpenId/NonIdentityTests.cs @@ -5,53 +5,84 @@ //----------------------------------------------------------------------- namespace DotNetOpenAuth.Test.OpenId { + using System; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + + using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.Provider; using DotNetOpenAuth.OpenId.RelyingParty; using NUnit.Framework; + using System.Net; [TestFixture] public class NonIdentityTests : OpenIdTestBase { [Test] - public void ExtensionOnlyChannelLevel() { + public async Task ExtensionOnlyChannelLevel() { Protocol protocol = Protocol.V20; - AuthenticationRequestMode mode = AuthenticationRequestMode.Setup; - - var coordinator = new OpenIdCoordinator( - rp => { - var request = new SignedResponseRequest(protocol.Version, OPUri, mode); - rp.Channel.Respond(request); - }, - op => { - var request = op.Channel.ReadFromRequest<SignedResponseRequest>(); + var mode = AuthenticationRequestMode.Setup; + + HandleProvider( + async (op, req) => { + var request = await op.Channel.ReadFromRequestAsync<SignedResponseRequest>(req, CancellationToken.None); Assert.IsNotInstanceOf<CheckIdRequest>(request); + return new HttpResponseMessage(); }); - coordinator.Run(); + + { + var rp = this.CreateRelyingParty(); + var request = new SignedResponseRequest(protocol.Version, OPUri, mode); + var authRequest = await rp.Channel.PrepareResponseAsync(request); + using (var httpClient = rp.Channel.HostFactories.CreateHttpClient()) { + using (var response = await httpClient.GetAsync(authRequest.Headers.Location)) { + response.EnsureSuccessStatusCode(); + } + } + } } [Test] - public void ExtensionOnlyFacadeLevel() { + public async Task ExtensionOnlyFacadeLevel() { Protocol protocol = Protocol.V20; - var coordinator = new OpenIdCoordinator( - rp => { - var request = rp.CreateRequest(GetMockIdentifier(protocol.ProtocolVersion), RPRealmUri, RPUri); - - request.IsExtensionOnly = true; - rp.Channel.Respond(request.RedirectingResponse.OriginalMessage); - IAuthenticationResponse response = rp.GetResponse(); - Assert.AreEqual(AuthenticationStatus.ExtensionsOnly, response.Status); - }, - op => { - var assocRequest = op.GetRequest(); - op.Respond(assocRequest); - - var request = (IAnonymousRequest)op.GetRequest(); - request.IsApproved = true; - Assert.IsNotInstanceOf<CheckIdRequest>(request); - op.Respond(request); + int opStep = 0; + HandleProvider( + async (op, req) => { + switch (++opStep) { + case 1: + var assocRequest = await op.GetRequestAsync(req); + return await op.PrepareResponseAsync(assocRequest); + case 2: + var request = (IAnonymousRequest)await op.GetRequestAsync(req); + request.IsApproved = true; + Assert.IsNotInstanceOf<CheckIdRequest>(request); + return await op.PrepareResponseAsync(request); + default: + throw Assumes.NotReachable(); + } }); - coordinator.Run(); + + { + var rp = this.CreateRelyingParty(); + var request = await rp.CreateRequestAsync(GetMockIdentifier(protocol.ProtocolVersion), RPRealmUri, RPUri); + + request.IsExtensionOnly = true; + var redirectRequest = await request.GetRedirectingResponseAsync(); + Uri redirectResponseUrl; + this.HostFactories.AllowAutoRedirects = false; + using (var httpClient = this.HostFactories.CreateHttpClient()) { + using (var redirectResponse = await httpClient.GetAsync(redirectRequest.Headers.Location)) { + Assert.That(redirectResponse.StatusCode, Is.EqualTo(HttpStatusCode.Redirect)); + redirectResponseUrl = redirectResponse.Headers.Location; + } + } + + IAuthenticationResponse response = + await rp.GetResponseAsync(new HttpRequestMessage(HttpMethod.Get, redirectResponseUrl)); + Assert.AreEqual(AuthenticationStatus.ExtensionsOnly, response.Status); + } } } } |