diff options
Diffstat (limited to 'src/DotNetOAuth.Test')
-rw-r--r-- | src/DotNetOAuth.Test/DotNetOAuth.Test.csproj | 1 | ||||
-rw-r--r-- | src/DotNetOAuth.Test/Mocks/TestWebRequestHandler.cs | 45 | ||||
-rw-r--r-- | src/DotNetOAuth.Test/OAuthChannelTests.cs | 99 |
3 files changed, 143 insertions, 2 deletions
diff --git a/src/DotNetOAuth.Test/DotNetOAuth.Test.csproj b/src/DotNetOAuth.Test/DotNetOAuth.Test.csproj index 5fce735..e734d18 100644 --- a/src/DotNetOAuth.Test/DotNetOAuth.Test.csproj +++ b/src/DotNetOAuth.Test/DotNetOAuth.Test.csproj @@ -65,6 +65,7 @@ <Compile Include="Messaging\ProtocolExceptionTests.cs" />
<Compile Include="Mocks\TestDirectedMessage.cs" />
<Compile Include="Mocks\TestBadChannel.cs" />
+ <Compile Include="Mocks\TestWebRequestHandler.cs" />
<Compile Include="OAuthChannelTests.cs" />
<Compile Include="Messaging\MessageSerializerTests.cs" />
<Compile Include="Mocks\TestChannel.cs" />
diff --git a/src/DotNetOAuth.Test/Mocks/TestWebRequestHandler.cs b/src/DotNetOAuth.Test/Mocks/TestWebRequestHandler.cs new file mode 100644 index 0000000..4eecb1f --- /dev/null +++ b/src/DotNetOAuth.Test/Mocks/TestWebRequestHandler.cs @@ -0,0 +1,45 @@ +//-----------------------------------------------------------------------
+// <copyright file="TestWebRequestHandler.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOAuth.Test.Mocks {
+ using System;
+ using System.IO;
+ using System.Net;
+ using System.Text;
+ using DotNetOAuth.Messaging;
+
+ internal class TestWebRequestHandler : IWebRequestHandler {
+ private StringBuilder postEntity;
+
+ internal Func<HttpWebRequest, Response> Callback { get; set; }
+
+ internal Stream RequestEntityStream {
+ get {
+ if (this.postEntity == null) {
+ return null;
+ }
+ return new MemoryStream(Encoding.UTF8.GetBytes(this.postEntity.ToString()));
+ }
+ }
+
+ #region IWebRequestHandler Members
+
+ public TextWriter GetRequestStream(HttpWebRequest request) {
+ this.postEntity = new StringBuilder();
+ return new StringWriter(this.postEntity);
+ }
+
+ public Response GetResponse(HttpWebRequest request) {
+ if (this.Callback == null) {
+ throw new InvalidOperationException("Set the Callback property first.");
+ }
+
+ return this.Callback(request);
+ }
+
+ #endregion
+ }
+}
diff --git a/src/DotNetOAuth.Test/OAuthChannelTests.cs b/src/DotNetOAuth.Test/OAuthChannelTests.cs index e47f98f..2d00800 100644 --- a/src/DotNetOAuth.Test/OAuthChannelTests.cs +++ b/src/DotNetOAuth.Test/OAuthChannelTests.cs @@ -18,13 +18,25 @@ namespace DotNetOAuth.Test { [TestClass]
public class OAuthChannelTests : TestBase {
- private Channel channel;
+ private OAuthChannel channel;
+ private TestWebRequestHandler webRequestHandler;
[TestInitialize]
public override void SetUp() {
base.SetUp();
- this.channel = new OAuthChannel(new TestMessageTypeProvider());
+ this.webRequestHandler = new TestWebRequestHandler();
+ this.channel = new OAuthChannel(new TestMessageTypeProvider(), this.webRequestHandler);
+ }
+
+ [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+ public void CtorNullHandler() {
+ new OAuthChannel(new TestMessageTypeProvider(), null);
+ }
+
+ [TestMethod]
+ public void CtorDefault() {
+ new OAuthChannel();
}
[TestMethod]
@@ -90,6 +102,40 @@ namespace DotNetOAuth.Test { Assert.IsNull(testMessage.EmptyMember);
}
+ [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+ public void RequestNull() {
+ this.channel.Request(null);
+ }
+
+ [TestMethod, ExpectedException(typeof(ArgumentException))]
+ public void RequestNullRecipient() {
+ IDirectedProtocolMessage message = new TestDirectedMessage(MessageTransport.Direct);
+ this.channel.Request(message);
+ }
+
+ [TestMethod, ExpectedException(typeof(NotSupportedException))]
+ public void RequestBadPreferredScheme() {
+ TestDirectedMessage message = new TestDirectedMessage(MessageTransport.Direct);
+ message.Recipient = new Uri("http://localtest");
+ this.channel.PreferredTransmissionScheme = (MessageScheme)100;
+ this.channel.Request(message);
+ }
+
+ [TestMethod]
+ public void RequestUsingAuthorizationHeader() {
+ this.ParameterizedRequestTest(MessageScheme.AuthorizationHeaderRequest);
+ }
+
+ [TestMethod]
+ public void RequestUsingGet() {
+ this.ParameterizedRequestTest(MessageScheme.GetRequest);
+ }
+
+ [TestMethod]
+ public void RequestUsingPost() {
+ this.ParameterizedRequestTest(MessageScheme.PostRequest);
+ }
+
private static string CreateAuthorizationHeader(IDictionary<string, string> fields) {
if (fields == null) {
throw new ArgumentNullException("fields");
@@ -146,6 +192,55 @@ namespace DotNetOAuth.Test { return request;
}
+ private static HttpRequestInfo ConvertToRequestInfo(HttpWebRequest request, Stream postEntity) {
+ HttpRequestInfo info = new HttpRequestInfo {
+ HttpMethod = request.Method,
+ Url = request.RequestUri,
+ Headers = request.Headers,
+ InputStream = postEntity,
+ };
+ return info;
+ }
+
+ private void ParameterizedRequestTest(MessageScheme scheme) {
+ TestDirectedMessage request = new TestDirectedMessage(MessageTransport.Direct) {
+ Age = 15,
+ Name = "Andrew",
+ Location = new Uri("http://hostb/pathB"),
+ Recipient = new Uri("http://localtest"),
+ };
+
+ Response rawResponse = null;
+ this.webRequestHandler.Callback = (req) => {
+ Assert.IsNotNull(req);
+ HttpRequestInfo reqInfo = ConvertToRequestInfo(req, this.webRequestHandler.RequestEntityStream);
+ Assert.AreEqual(scheme == MessageScheme.PostRequest ? "POST" : "GET", reqInfo.HttpMethod);
+ var incomingMessage = this.channel.ReadFromRequest(reqInfo) as TestMessage;
+ Assert.AreEqual(request.Age, incomingMessage.Age);
+ Assert.AreEqual(request.Name, incomingMessage.Name);
+ Assert.AreEqual(request.Location, incomingMessage.Location);
+
+ var responseFields = new Dictionary<string, string> {
+ { "age", request.Age.ToString() },
+ { "Name", request.Name },
+ { "Location", request.Location.AbsoluteUri },
+ };
+ rawResponse = new Response {
+ Body = MessagingUtilities.CreateQueryString(responseFields),
+ };
+ return rawResponse;
+ };
+
+ this.channel.PreferredTransmissionScheme = scheme;
+ IProtocolMessage response = this.channel.Request(request);
+ Assert.IsNotNull(response);
+ Assert.IsInstanceOfType(response, typeof(TestMessage));
+ TestMessage responseMessage = (TestMessage)response;
+ Assert.AreEqual(request.Age, responseMessage.Age);
+ Assert.AreEqual(request.Name, responseMessage.Name);
+ Assert.AreEqual(request.Location, responseMessage.Location);
+ }
+
private void ParameterizedReceiveTest(MessageScheme scheme) {
var fields = new Dictionary<string, string> {
{ "age", "15" },
|