//-----------------------------------------------------------------------
//
// Copyright (c) Outercurve Foundation. All rights reserved.
//
//-----------------------------------------------------------------------
namespace DotNetOpenAuth.Test.OpenId.Extensions.ProviderAuthenticationPolicy {
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.Messaging.Reflection;
using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy;
using NUnit.Framework;
[TestFixture]
public class PolicyRequestTests : OpenIdTestBase {
[Test]
public void Ctor() {
PolicyRequest req = new PolicyRequest();
Assert.IsNull(req.MaximumAuthenticationAge);
Assert.IsNotNull(req.PreferredPolicies);
Assert.AreEqual(0, req.PreferredPolicies.Count);
}
[Test]
public void MaximumAuthenticationAgeTest() {
PolicyRequest req = new PolicyRequest();
req.MaximumAuthenticationAge = TimeSpan.FromHours(1);
Assert.IsNotNull(req.MaximumAuthenticationAge);
Assert.AreEqual(TimeSpan.FromHours(1), req.MaximumAuthenticationAge);
req.MaximumAuthenticationAge = null;
Assert.IsNull(req.MaximumAuthenticationAge);
}
[Test]
public void AddPolicies() {
PolicyRequest resp = new PolicyRequest();
resp.PreferredPolicies.Add(AuthenticationPolicies.MultiFactor);
resp.PreferredPolicies.Add(AuthenticationPolicies.PhishingResistant);
Assert.AreEqual(2, resp.PreferredPolicies.Count);
Assert.AreEqual(AuthenticationPolicies.MultiFactor, resp.PreferredPolicies[0]);
Assert.AreEqual(AuthenticationPolicies.PhishingResistant, resp.PreferredPolicies[1]);
}
[Test]
public void AddPolicyMultipleTimes() {
// Although this isn't really the desired behavior (we'd prefer to see an
// exception thrown), since we're using a List internally we can't
// expect anything better (for now). But if this is ever fixed, by all means
// change this test to expect an exception or something else.
PolicyRequest resp = new PolicyRequest();
resp.PreferredPolicies.Add(AuthenticationPolicies.MultiFactor);
resp.PreferredPolicies.Add(AuthenticationPolicies.MultiFactor);
Assert.AreEqual(2, resp.PreferredPolicies.Count);
}
[Test]
public void AddAuthLevelTypes() {
PolicyRequest req = new PolicyRequest();
req.PreferredAuthLevelTypes.Add(Constants.AssuranceLevels.NistTypeUri);
Assert.AreEqual(1, req.PreferredAuthLevelTypes.Count);
Assert.IsTrue(req.PreferredAuthLevelTypes.Contains(Constants.AssuranceLevels.NistTypeUri));
}
[Test]
public void EqualsTest() {
PolicyRequest req = new PolicyRequest();
PolicyRequest req2 = new PolicyRequest();
Assert.AreEqual(req, req2);
Assert.AreNotEqual(req, null);
Assert.AreNotEqual(null, req);
// Test PreferredPolicies list comparison
req.PreferredPolicies.Add(AuthenticationPolicies.PhishingResistant);
Assert.AreNotEqual(req, req2);
req2.PreferredPolicies.Add(AuthenticationPolicies.MultiFactor);
Assert.AreNotEqual(req, req2);
req2.PreferredPolicies.Clear();
req2.PreferredPolicies.Add(AuthenticationPolicies.PhishingResistant);
Assert.AreEqual(req, req2);
// Test PreferredPolicies list comparison when that list is not in the same order.
req.PreferredPolicies.Add(AuthenticationPolicies.MultiFactor);
Assert.AreNotEqual(req, req2);
req2.PreferredPolicies.Insert(0, AuthenticationPolicies.MultiFactor);
Assert.AreEqual(req, req2);
// Test MaximumAuthenticationAge comparison.
req.MaximumAuthenticationAge = TimeSpan.FromHours(1);
Assert.AreNotEqual(req, req2);
req2.MaximumAuthenticationAge = req.MaximumAuthenticationAge;
Assert.AreEqual(req, req2);
// Test PreferredAuthLevelTypes comparison.
req.PreferredAuthLevelTypes.Add("authlevel1");
Assert.AreNotEqual(req, req2);
req2.PreferredAuthLevelTypes.Add("authlevel2");
Assert.AreNotEqual(req, req2);
req.PreferredAuthLevelTypes.Add("authlevel2");
req2.PreferredAuthLevelTypes.Add("authlevel1");
Assert.AreEqual(req, req2);
}
[Test]
public void Serialize() {
PolicyRequest req = new PolicyRequest();
IMessageWithEvents reqEvents = req;
var fields = this.MessageDescriptions.GetAccessor(req);
reqEvents.OnSending();
Assert.AreEqual(1, fields.Count);
Assert.IsTrue(fields.ContainsKey("preferred_auth_policies"));
Assert.AreEqual(string.Empty, fields["preferred_auth_policies"]);
req.MaximumAuthenticationAge = TimeSpan.FromHours(1);
reqEvents.OnSending();
Assert.AreEqual(2, fields.Count);
Assert.IsTrue(fields.ContainsKey("max_auth_age"));
Assert.AreEqual(TimeSpan.FromHours(1).TotalSeconds.ToString(CultureInfo.InvariantCulture), fields["max_auth_age"]);
req.PreferredPolicies.Add("http://pol1/");
reqEvents.OnSending();
Assert.AreEqual("http://pol1/", fields["preferred_auth_policies"]);
req.PreferredPolicies.Add("http://pol2/");
reqEvents.OnSending();
Assert.AreEqual("http://pol1/ http://pol2/", fields["preferred_auth_policies"]);
req.PreferredAuthLevelTypes.Add("http://authtype1/");
reqEvents.OnSending();
Assert.AreEqual(4, fields.Count);
Assert.IsTrue(fields.ContainsKey("auth_level.ns.alias1"));
Assert.AreEqual("http://authtype1/", fields["auth_level.ns.alias1"]);
Assert.IsTrue(fields.ContainsKey("preferred_auth_level_types"));
Assert.AreEqual("alias1", fields["preferred_auth_level_types"]);
req.PreferredAuthLevelTypes.Add(Constants.AssuranceLevels.NistTypeUri);
reqEvents.OnSending();
Assert.AreEqual(5, fields.Count);
Assert.IsTrue(fields.ContainsKey("auth_level.ns.alias2"));
Assert.AreEqual("http://authtype1/", fields["auth_level.ns.alias2"]);
Assert.IsTrue(fields.ContainsKey("auth_level.ns.nist"));
Assert.AreEqual(Constants.AssuranceLevels.NistTypeUri, fields["auth_level.ns.nist"]);
Assert.AreEqual("alias2 nist", fields["preferred_auth_level_types"]);
}
}
}