summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.Test/OpenId/NonIdentityTests.cs
blob: 21b1d0bcc8d1bd8c505515342e2e965e902d8357 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//-----------------------------------------------------------------------
// <copyright file="NonIdentityTests.cs" company="Outercurve Foundation">
//     Copyright (c) Outercurve Foundation. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------

namespace DotNetOpenAuth.Test.OpenId {
	using System;
	using System.Net.Http;
	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;

	[TestFixture]
	public class NonIdentityTests : OpenIdTestBase {
		[Test]
		public async Task ExtensionOnlyChannelLevel() {
			Protocol protocol = Protocol.V20;
			var mode = AuthenticationRequestMode.Setup;

			await CoordinatorBase.RunAsync(
				CoordinatorBase.RelyingPartyDriver(async (rp, ct) => {
					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, ct)) {
							response.EnsureSuccessStatusCode();
						}
					}
				}),
				CoordinatorBase.HandleProvider(async (op, req, ct) => {
					var request = await op.Channel.ReadFromRequestAsync<SignedResponseRequest>(req, ct);
					Assert.IsNotInstanceOf<CheckIdRequest>(request);
					return new HttpResponseMessage();
				}));
		}

		[Test]
		public async Task ExtensionOnlyFacadeLevel() {
			Protocol protocol = Protocol.V20;
			int opStep = 0;
			await CoordinatorBase.RunAsync(
				CoordinatorBase.RelyingPartyDriver(async (rp, ct) => {
					var request = await rp.CreateRequestAsync(GetMockIdentifier(protocol.ProtocolVersion), RPRealmUri, RPUri, ct);

					request.IsExtensionOnly = true;
					var redirectRequest = await request.GetRedirectingResponseAsync(ct);
					Uri redirectResponseUrl;
					using (var httpClient = rp.Channel.HostFactories.CreateHttpClient()) {
						using (var redirectResponse = await httpClient.GetAsync(redirectRequest.Headers.Location, ct)) {
							redirectResponse.EnsureSuccessStatusCode();
							redirectResponseUrl = redirectRequest.Headers.Location;
						}
					}

					IAuthenticationResponse response = await rp.GetResponseAsync(new HttpRequestMessage(HttpMethod.Get, redirectResponseUrl));
					Assert.AreEqual(AuthenticationStatus.ExtensionsOnly, response.Status);
				}),
				CoordinatorBase.HandleProvider(async (op, req, ct) => {
					switch (++opStep) {
						case 1:
							var assocRequest = await op.GetRequestAsync(req, ct);
							return await op.PrepareResponseAsync(assocRequest, ct);
						case 2:
							var request = (IAnonymousRequest)await op.GetRequestAsync(req, ct);
							request.IsApproved = true;
							Assert.IsNotInstanceOf<CheckIdRequest>(request);
							return await op.PrepareResponseAsync(request, ct);
						default:
							throw Assumes.NotReachable();
					}
				}));
		}
	}
}