diff options
Diffstat (limited to 'src')
4 files changed, 99 insertions, 30 deletions
diff --git a/src/DotNetOpenAuth.Test/Mocks/MockOpenIdExtension.cs b/src/DotNetOpenAuth.Test/Mocks/MockOpenIdExtension.cs index 915fbc3..2f9830a 100644 --- a/src/DotNetOpenAuth.Test/Mocks/MockOpenIdExtension.cs +++ b/src/DotNetOpenAuth.Test/Mocks/MockOpenIdExtension.cs @@ -9,12 +9,11 @@ namespace DotNetOpenAuth.Test.Mocks { using System.Collections.Generic;
using System.Linq;
using DotNetOpenAuth.Messaging;
- using DotNetOpenAuth.OpenId.Messages;
using DotNetOpenAuth.OpenId.Extensions;
+ using DotNetOpenAuth.OpenId.Messages;
internal class MockOpenIdExtension : IOpenIdMessageExtension {
- private IDictionary<string, string> extraData = new Dictionary<string, string>();
- private const string MockTypeUri = "http://mockextension";
+ internal const string MockTypeUri = "http://mockextension";
internal static readonly OpenIdExtensionFactory.CreateDelegate Factory = (typeUri, data, baseMessage) => {
if (typeUri == MockTypeUri) {
@@ -24,9 +23,16 @@ namespace DotNetOpenAuth.Test.Mocks { return null;
};
+ private IDictionary<string, string> extraData = new Dictionary<string, string>();
+
internal MockOpenIdExtension() {
}
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MockOpenIdExtension"/> class.
+ /// </summary>
+ /// <param name="partValue">The value of the 'Part' parameter.</param>
+ /// <param name="extraValue">The value of the 'data' parameter.</param>
internal MockOpenIdExtension(string partValue, string extraValue) {
this.Part = partValue;
this.Data = extraValue;
@@ -44,7 +50,7 @@ namespace DotNetOpenAuth.Test.Mocks { #endregion
- #region IMessage Members
+ #region IMessage Properties
public Version Version {
get { return new Version(1, 0); }
@@ -54,11 +60,23 @@ namespace DotNetOpenAuth.Test.Mocks { get { return this.extraData; }
}
- public void EnsureValidMessage() {
- }
-
#endregion
+ [MessagePart]
+ internal string Part { get; set; }
+
+ internal string Data {
+ get {
+ string data;
+ this.extraData.TryGetValue("data", out data);
+ return data;
+ }
+
+ set {
+ this.extraData["data"] = value;
+ }
+ }
+
public override bool Equals(object obj) {
MockOpenIdExtension other = obj as MockOpenIdExtension;
if (other == null) {
@@ -73,19 +91,11 @@ namespace DotNetOpenAuth.Test.Mocks { return 1; // mock doesn't need a good hash code algorithm
}
- [MessagePart]
- internal string Part { get; set; }
+ #region IMessage methods
- internal string Data {
- get {
- string data;
- this.extraData.TryGetValue("data", out data);
- return data;
- }
-
- set {
- this.extraData["data"] = value;
- }
+ public void EnsureValidMessage() {
}
+
+ #endregion
}
}
diff --git a/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs b/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs index 539b07d..6eafb13 100644 --- a/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs +++ b/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs @@ -8,23 +8,34 @@ namespace DotNetOpenAuth.Test.OpenId.ChannelElements { using System;
using System.Collections.Generic;
using System.Linq;
- using System.Text;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using System.Text.RegularExpressions;
+ using DotNetOpenAuth.Messaging;
+ using DotNetOpenAuth.OpenId;
+ using DotNetOpenAuth.OpenId.ChannelElements;
+ using DotNetOpenAuth.OpenId.Extensions;
using DotNetOpenAuth.OpenId.Messages;
using DotNetOpenAuth.Test.Mocks;
using DotNetOpenAuth.Test.OpenId.Extensions;
- using DotNetOpenAuth.OpenId;
- using DotNetOpenAuth.OpenId.Extensions;
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class ExtensionsBindingElementTests : OpenIdTestBase {
+ private OpenIdExtensionFactory factory;
+ private ExtensionsBindingElement element;
+ private IProtocolMessageWithExtensions request;
+
[TestInitialize]
public override void SetUp() {
base.SetUp();
+
+ this.factory = new OpenIdExtensionFactory();
+ this.factory.RegisterExtension(MockOpenIdExtension.Factory);
+ this.element = new ExtensionsBindingElement(this.factory);
+ this.request = new SignedResponseRequest(Protocol.Default.Version, OpenIdTestBase.ProviderUri, true);
}
[TestMethod]
- public void ExtensionTransportTest() {
+ public void RoundTripFullStackTest() {
IOpenIdMessageExtension request = new MockOpenIdExtension("requestPart", "requestData");
IOpenIdMessageExtension response = new MockOpenIdExtension("responsePart", "responseData");
ExtensionTestUtilities.Roundtrip(
@@ -32,5 +43,54 @@ namespace DotNetOpenAuth.Test.OpenId.ChannelElements { new IOpenIdMessageExtension[] { request },
new IOpenIdMessageExtension[] { response });
}
+
+ [TestMethod]
+ public void ExtensionFactory() {
+ Assert.AreSame(this.factory, this.element.ExtensionFactory);
+ }
+
+ [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+ public void PrepareMessageForSendingNull() {
+ this.element.PrepareMessageForSending(null);
+ }
+
+ /// <summary>
+ /// Verifies that false is returned when a non-extendable message is sent.
+ /// </summary>
+ [TestMethod]
+ public void PrepareMessageForSendingNonExtendableMessage() {
+ IProtocolMessage request = new AssociateDiffieHellmanRequest(Protocol.Default.Version, OpenIdTestBase.ProviderUri);
+ Assert.IsFalse(this.element.PrepareMessageForSending(request));
+ }
+
+ [TestMethod]
+ public void PrepareMessageForSending() {
+ this.request.Extensions.Add(new MockOpenIdExtension("part", "extra"));
+ Assert.IsTrue(this.element.PrepareMessageForSending(this.request));
+
+ string alias = GetAliases(this.request.ExtraData).Single();
+ Assert.AreEqual(MockOpenIdExtension.MockTypeUri, this.request.ExtraData["openid.ns." + alias]);
+ Assert.AreEqual("part", this.request.ExtraData["openid." + alias + ".Part"]);
+ Assert.AreEqual("extra", this.request.ExtraData["openid." + alias + ".data"]);
+ }
+
+ [TestMethod]
+ public void PrepareMessageForReceiving() {
+ this.request.ExtraData["openid.ns.mock"] = MockOpenIdExtension.MockTypeUri;
+ this.request.ExtraData["openid.mock.Part"] = "part";
+ this.request.ExtraData["openid.mock.data"] = "extra";
+ Assert.IsTrue(this.element.PrepareMessageForReceiving(this.request));
+ MockOpenIdExtension ext = this.request.Extensions.OfType<MockOpenIdExtension>().Single();
+ Assert.AreEqual("part", ext.Part);
+ Assert.AreEqual("extra", ext.Data);
+ }
+
+ private static IEnumerable<string> GetAliases(IDictionary<string, string> extraData) {
+ Regex regex = new Regex(@"^openid\.ns\.(\w+)");
+ return from key in extraData.Keys
+ let m = regex.Match(key)
+ where m.Success
+ select m.Groups[1].Value;
+ }
}
}
diff --git a/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestBase.cs b/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestBase.cs index b47ff55..fb9dfab 100644 --- a/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestBase.cs +++ b/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestBase.cs @@ -5,17 +5,14 @@ //-----------------------------------------------------------------------
namespace DotNetOpenAuth.Test.OpenId.Extensions {
- using System;
using System.Collections.Generic;
- using System.Collections.ObjectModel;
using System.Linq;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OpenId;
- using DotNetOpenAuth.OpenId.Messages;
- using DotNetOpenAuth.Test.Messaging;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
using DotNetOpenAuth.OpenId.ChannelElements;
using DotNetOpenAuth.OpenId.Extensions;
+ using DotNetOpenAuth.OpenId.Messages;
+ using DotNetOpenAuth.Test.Messaging;
public static class ExtensionTestUtilities {
internal static void Roundtrip(
diff --git a/src/DotNetOpenAuth/OpenId/ChannelElements/ExtensionsBindingElement.cs b/src/DotNetOpenAuth/OpenId/ChannelElements/ExtensionsBindingElement.cs index 943cafe..eb5dc41 100644 --- a/src/DotNetOpenAuth/OpenId/ChannelElements/ExtensionsBindingElement.cs +++ b/src/DotNetOpenAuth/OpenId/ChannelElements/ExtensionsBindingElement.cs @@ -40,7 +40,7 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { public Channel Channel { get; set; }
/// <summary>
- /// The extension factory.
+ /// Gets the extension factory.
/// </summary>
public IOpenIdExtensionFactory ExtensionFactory { get; private set; }
@@ -65,6 +65,8 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { /// <see cref="MessagePartAttribute.RequiredProtection"/> properties where applicable.
/// </remarks>
public bool PrepareMessageForSending(IProtocolMessage message) {
+ ErrorUtilities.VerifyArgumentNotNull(message, "message");
+
var extendableMessage = message as IProtocolMessageWithExtensions;
if (extendableMessage != null) {
Protocol protocol = Protocol.Lookup(message.Version);
|