1
//-----------------------------------------------------------------------
2 // <copyright file="PolicyRequestTests.cs" company="Andrew Arnott">
3 // Copyright (c) Andrew Arnott. All rights reserved.
5 //-----------------------------------------------------------------------
7 namespace DotNetOpenAuth
.Test
.OpenId
.Extensions
.ProviderAuthenticationPolicy
{
9 using System
.Collections
.Generic
;
10 using System
.Globalization
;
13 using DotNetOpenAuth
.Messaging
;
14 using DotNetOpenAuth
.Messaging
.Reflection
;
15 using DotNetOpenAuth
.OpenId
.Extensions
.ProviderAuthenticationPolicy
;
16 using Microsoft
.VisualStudio
.TestTools
.UnitTesting
;
19 public class PolicyRequestTests
: OpenIdTestBase
{
22 PolicyRequest req
= new PolicyRequest();
23 Assert
.IsNull(req
.MaximumAuthenticationAge
);
24 Assert
.IsNotNull(req
.PreferredPolicies
);
25 Assert
.AreEqual(0, req
.PreferredPolicies
.Count
);
29 public void MaximumAuthenticationAgeTest() {
30 PolicyRequest req
= new PolicyRequest();
31 req
.MaximumAuthenticationAge
= TimeSpan
.FromHours(1);
32 Assert
.IsNotNull(req
.MaximumAuthenticationAge
);
33 Assert
.AreEqual(TimeSpan
.FromHours(1), req
.MaximumAuthenticationAge
);
34 req
.MaximumAuthenticationAge
= null;
35 Assert
.IsNull(req
.MaximumAuthenticationAge
);
39 public void AddPolicies() {
40 PolicyRequest resp
= new PolicyRequest();
41 resp
.PreferredPolicies
.Add(AuthenticationPolicies
.MultiFactor
);
42 resp
.PreferredPolicies
.Add(AuthenticationPolicies
.PhishingResistant
);
43 Assert
.AreEqual(2, resp
.PreferredPolicies
.Count
);
44 Assert
.AreEqual(AuthenticationPolicies
.MultiFactor
, resp
.PreferredPolicies
[0]);
45 Assert
.AreEqual(AuthenticationPolicies
.PhishingResistant
, resp
.PreferredPolicies
[1]);
49 public void AddPolicyMultipleTimes() {
50 // Although this isn't really the desired behavior (we'd prefer to see an
51 // exception thrown), since we're using a List<string> internally we can't
52 // expect anything better (for now). But if this is ever fixed, by all means
53 // change this test to expect an exception or something else.
54 PolicyRequest resp
= new PolicyRequest();
55 resp
.PreferredPolicies
.Add(AuthenticationPolicies
.MultiFactor
);
56 resp
.PreferredPolicies
.Add(AuthenticationPolicies
.MultiFactor
);
57 Assert
.AreEqual(2, resp
.PreferredPolicies
.Count
);
61 public void AddAuthLevelTypes() {
62 PolicyRequest req
= new PolicyRequest();
63 req
.PreferredAuthLevelTypes
.Add(Constants
.AssuranceLevels
.NistTypeUri
);
64 Assert
.AreEqual(1, req
.PreferredAuthLevelTypes
.Count
);
65 Assert
.IsTrue(req
.PreferredAuthLevelTypes
.Contains(Constants
.AssuranceLevels
.NistTypeUri
));
69 public void EqualsTest() {
70 PolicyRequest req
= new PolicyRequest();
71 PolicyRequest req2
= new PolicyRequest();
72 Assert
.AreEqual(req
, req2
);
73 Assert
.AreNotEqual(req
, null);
74 Assert
.AreNotEqual(null, req
);
76 // Test PreferredPolicies list comparison
77 req
.PreferredPolicies
.Add(AuthenticationPolicies
.PhishingResistant
);
78 Assert
.AreNotEqual(req
, req2
);
79 req2
.PreferredPolicies
.Add(AuthenticationPolicies
.MultiFactor
);
80 Assert
.AreNotEqual(req
, req2
);
81 req2
.PreferredPolicies
.Clear();
82 req2
.PreferredPolicies
.Add(AuthenticationPolicies
.PhishingResistant
);
83 Assert
.AreEqual(req
, req2
);
85 // Test PreferredPolicies list comparison when that list is not in the same order.
86 req
.PreferredPolicies
.Add(AuthenticationPolicies
.MultiFactor
);
87 Assert
.AreNotEqual(req
, req2
);
88 req2
.PreferredPolicies
.Insert(0, AuthenticationPolicies
.MultiFactor
);
89 Assert
.AreEqual(req
, req2
);
91 // Test MaximumAuthenticationAge comparison.
92 req
.MaximumAuthenticationAge
= TimeSpan
.FromHours(1);
93 Assert
.AreNotEqual(req
, req2
);
94 req2
.MaximumAuthenticationAge
= req
.MaximumAuthenticationAge
;
95 Assert
.AreEqual(req
, req2
);
97 // Test PreferredAuthLevelTypes comparison.
98 req
.PreferredAuthLevelTypes
.Add("authlevel1");
99 Assert
.AreNotEqual(req
, req2
);
100 req2
.PreferredAuthLevelTypes
.Add("authlevel2");
101 Assert
.AreNotEqual(req
, req2
);
102 req
.PreferredAuthLevelTypes
.Add("authlevel2");
103 req2
.PreferredAuthLevelTypes
.Add("authlevel1");
104 Assert
.AreEqual(req
, req2
);
108 public void Serialize() {
109 PolicyRequest req
= new PolicyRequest();
110 IMessageWithEvents reqEvents
= req
;
112 var fields
= new MessageDictionary(req
);
113 reqEvents
.OnSending();
114 Assert
.AreEqual(1, fields
.Count
);
115 Assert
.IsTrue(fields
.ContainsKey("preferred_auth_policies"));
116 Assert
.AreEqual(string.Empty
, fields
["preferred_auth_policies"]);
118 req
.MaximumAuthenticationAge
= TimeSpan
.FromHours(1);
119 reqEvents
.OnSending();
120 Assert
.AreEqual(2, fields
.Count
);
121 Assert
.IsTrue(fields
.ContainsKey("max_auth_age"));
122 Assert
.AreEqual(TimeSpan
.FromHours(1).TotalSeconds
.ToString(CultureInfo
.InvariantCulture
), fields
["max_auth_age"]);
124 req
.PreferredPolicies
.Add("http://pol1/");
125 reqEvents
.OnSending();
126 Assert
.AreEqual("http://pol1/", fields
["preferred_auth_policies"]);
128 req
.PreferredPolicies
.Add("http://pol2/");
129 reqEvents
.OnSending();
130 Assert
.AreEqual("http://pol1/ http://pol2/", fields
["preferred_auth_policies"]);
132 req
.PreferredAuthLevelTypes
.Add("http://authtype1/");
133 reqEvents
.OnSending();
134 Assert
.AreEqual(4, fields
.Count
);
135 Assert
.IsTrue(fields
.ContainsKey("auth_level.ns.alias1"));
136 Assert
.AreEqual("http://authtype1/", fields
["auth_level.ns.alias1"]);
137 Assert
.IsTrue(fields
.ContainsKey("preferred_auth_level_types"));
138 Assert
.AreEqual("alias1", fields
["preferred_auth_level_types"]);
140 req
.PreferredAuthLevelTypes
.Add(Constants
.AssuranceLevels
.NistTypeUri
);
141 reqEvents
.OnSending();
142 Assert
.AreEqual(5, fields
.Count
);
143 Assert
.IsTrue(fields
.ContainsKey("auth_level.ns.alias2"));
144 Assert
.AreEqual("http://authtype1/", fields
["auth_level.ns.alias2"]);
145 Assert
.IsTrue(fields
.ContainsKey("auth_level.ns.nist"));
146 Assert
.AreEqual(Constants
.AssuranceLevels
.NistTypeUri
, fields
["auth_level.ns.nist"]);
147 Assert
.AreEqual("alias2 nist", fields
["preferred_auth_level_types"]);