Imported Upstream version 3.6.0

Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
This commit is contained in:
Jo Shields
2014-08-13 10:39:27 +01:00
commit a575963da9
50588 changed files with 8155799 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Runtime.sln))\tools\WebStack.settings.targets" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{694C6EDF-EA52-438F-B745-82B025ECC0E7}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Microsoft.Web.WebPages.OAuth.Test</RootNamespace>
<AssemblyName>Microsoft.Web.WebPages.OAuth.Test</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>$(WebStackRootPath)\bin\Debug\Test\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>$(WebStackRootPath)\bin\Release\Test\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'CodeCoverage' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>$(WebStackRootPath)\bin\CodeCoverage\Test\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="DotNetOpenAuth.AspNet, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
<HintPath>..\..\packages\DotNetOpenAuth.AspNet.4.0.0.12084\lib\net40-full\DotNetOpenAuth.AspNet.dll</HintPath>
</Reference>
<Reference Include="DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
<HintPath>..\..\packages\DotNetOpenAuth.Core.4.0.0.12084\lib\net40-full\DotNetOpenAuth.Core.dll</HintPath>
</Reference>
<Reference Include="DotNetOpenAuth.OAuth, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
<HintPath>..\..\packages\DotNetOpenAuth.OAuth.Core.4.0.0.12084\lib\net40-full\DotNetOpenAuth.OAuth.dll</HintPath>
</Reference>
<Reference Include="DotNetOpenAuth.OAuth.Consumer, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
<HintPath>..\..\packages\DotNetOpenAuth.OAuth.Consumer.4.0.0.12084\lib\net40-full\DotNetOpenAuth.OAuth.Consumer.dll</HintPath>
</Reference>
<Reference Include="DotNetOpenAuth.OpenId, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
<HintPath>..\..\packages\DotNetOpenAuth.OpenId.Core.4.0.0.12084\lib\net40-full\DotNetOpenAuth.OpenId.dll</HintPath>
</Reference>
<Reference Include="DotNetOpenAuth.OpenId.RelyingParty, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
<HintPath>..\..\packages\DotNetOpenAuth.OpenId.RelyingParty.4.0.0.12084\lib\net40-full\DotNetOpenAuth.OpenId.RelyingParty.dll</HintPath>
</Reference>
<Reference Include="Moq">
<HintPath>..\..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="xunit">
<HintPath>..\..\packages\xunit.1.9.0.1566\lib\xunit.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="OAuthWebSecurityTest.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="PreAppStartCodeTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Microsoft.Web.WebPages.OAuth\Microsoft.Web.WebPages.OAuth.csproj">
<Project>{4CBFC7D3-1600-4CE5-BC6B-AC7BC2D6F853}</Project>
<Name>Microsoft.Web.WebPages.OAuth</Name>
</ProjectReference>
<ProjectReference Include="..\Microsoft.TestCommon\Microsoft.TestCommon.csproj">
<Project>{FCCC4CB7-BAF7-4A57-9F89-E5766FE536C0}</Project>
<Name>Microsoft.TestCommon</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,391 @@
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Collections.Specialized;
using System.Web;
using System.Web.Security;
using DotNetOpenAuth.AspNet;
using Microsoft.TestCommon;
using Moq;
using Xunit;
namespace Microsoft.Web.WebPages.OAuth.Test
{
public class OAuthWebSecurityTest : IDisposable
{
[Fact]
public void RegisterClientThrowsOnNullValue()
{
AssertEx.ThrowsArgumentNull(() => OAuthWebSecurity.RegisterClient(null), "client");
}
[Fact]
public void RegisterClientThrowsIfProviderNameIsEmpty()
{
// Arrange
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns((string)null);
// Act & Assert
AssertEx.ThrowsArgument(() => OAuthWebSecurity.RegisterClient(client.Object), "client");
client.Setup(c => c.ProviderName).Returns("");
// Act & Assert
AssertEx.ThrowsArgument(() => OAuthWebSecurity.RegisterClient(client.Object), "client");
}
[Fact]
public void RegisterClientThrowsRegisterMoreThanOneClientWithTheSameName()
{
// Arrange
var client1 = new Mock<IAuthenticationClient>();
client1.Setup(c => c.ProviderName).Returns("provider");
var client2 = new Mock<IAuthenticationClient>();
client2.Setup(c => c.ProviderName).Returns("provider");
OAuthWebSecurity.RegisterClient(client1.Object);
// Act & Assert
AssertEx.ThrowsArgument(() => OAuthWebSecurity.RegisterClient(client2.Object), null);
}
[Fact]
public void RegisterOAuthClient()
{
// Arrange
var clients = new BuiltInOAuthClient[]
{
BuiltInOAuthClient.Facebook,
BuiltInOAuthClient.Twitter,
BuiltInOAuthClient.LinkedIn,
BuiltInOAuthClient.WindowsLive
};
var clientNames = new string[]
{
"Facebook",
"Twitter",
"LinkedIn",
"WindowsLive"
};
for (int i = 0; i < clients.Length; i++)
{
// Act
OAuthWebSecurity.RegisterOAuthClient(clients[i], "key", "secret");
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns(clientNames[i]);
// Assert
Assert.Throws(typeof(ArgumentException), () => OAuthWebSecurity.RegisterClient(client.Object));
}
}
[Fact]
public void RegisterOpenIDClient()
{
// Arrange
var clients = new BuiltInOpenIDClient[]
{
BuiltInOpenIDClient.Google,
BuiltInOpenIDClient.Yahoo
};
var clientNames = new string[]
{
"Google",
"Yahoo"
};
for (int i = 0; i < clients.Length; i++)
{
// Act
OAuthWebSecurity.RegisterOpenIDClient(clients[i]);
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns(clientNames[i]);
// Assert
AssertEx.ThrowsArgument(() => OAuthWebSecurity.RegisterClient(client.Object), null);
}
}
[Fact]
public void RequestAuthenticationRedirectsToProviderWithNullReturnUrl()
{
// Arrange
var context = new Mock<HttpContextBase>();
context.Setup(c => c.Request.ServerVariables).Returns(
new NameValueCollection());
context.Setup(c => c.Request.Url).Returns(new Uri("http://live.com/login.aspx"));
context.Setup(c => c.Request.RawUrl).Returns("/login.aspx");
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns("windowslive");
client.Setup(c => c.RequestAuthentication(
context.Object,
It.Is<Uri>(u => u.AbsoluteUri.Equals("http://live.com/login.aspx?__provider__=windowslive", StringComparison.OrdinalIgnoreCase))))
.Verifiable();
OAuthWebSecurity.RegisterClient(client.Object);
// Act
OAuthWebSecurity.RequestAuthenticationCore(context.Object, "windowslive", null);
// Assert
client.Verify();
}
[Fact]
public void RequestAuthenticationRedirectsToProviderWithReturnUrl()
{
// Arrange
var context = new Mock<HttpContextBase>();
context.Setup(c => c.Request.ServerVariables).Returns(
new NameValueCollection());
context.Setup(c => c.Request.Url).Returns(new Uri("http://live.com/login.aspx"));
context.Setup(c => c.Request.RawUrl).Returns("/login.aspx");
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns("yahoo");
client.Setup(c => c.RequestAuthentication(
context.Object,
It.Is<Uri>(u => u.AbsoluteUri.Equals("http://yahoo.com/?__provider__=yahoo", StringComparison.OrdinalIgnoreCase))))
.Verifiable();
OAuthWebSecurity.RegisterClient(client.Object);
// Act
OAuthWebSecurity.RequestAuthenticationCore(context.Object, "yahoo", "http://yahoo.com");
// Assert
client.Verify();
}
[Fact]
public void VerifyAuthenticationSucceed()
{
// Arrange
var queryStrings = new NameValueCollection();
queryStrings.Add("__provider__", "facebook");
var context = new Mock<HttpContextBase>();
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
var client = new Mock<IAuthenticationClient>(MockBehavior.Strict);
client.Setup(c => c.ProviderName).Returns("facebook");
client.Setup(c => c.VerifyAuthentication(context.Object)).Returns(new AuthenticationResult(true, "facebook", "123",
"super", null));
var anotherClient = new Mock<IAuthenticationClient>(MockBehavior.Strict);
anotherClient.Setup(c => c.ProviderName).Returns("twitter");
anotherClient.Setup(c => c.VerifyAuthentication(context.Object)).Returns(AuthenticationResult.Failed);
OAuthWebSecurity.RegisterClient(client.Object);
OAuthWebSecurity.RegisterClient(anotherClient.Object);
// Act
AuthenticationResult result = OAuthWebSecurity.VerifyAuthenticationCore(context.Object);
// Assert
Assert.True(result.IsSuccessful);
Assert.Equal("facebook", result.Provider);
Assert.Equal("123", result.ProviderUserId);
Assert.Equal("super", result.UserName);
Assert.Null(result.Error);
Assert.Null(result.ExtraData);
}
[Fact]
public void VerifyAuthenticationFail()
{
// Arrange
var queryStrings = new NameValueCollection();
queryStrings.Add("__provider__", "twitter");
var context = new Mock<HttpContextBase>();
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
var client = new Mock<IAuthenticationClient>(MockBehavior.Strict);
client.Setup(c => c.ProviderName).Returns("facebook");
client.Setup(c => c.VerifyAuthentication(context.Object)).Returns(new AuthenticationResult(true, "facebook", "123",
"super", null));
var anotherClient = new Mock<IAuthenticationClient>(MockBehavior.Strict);
anotherClient.Setup(c => c.ProviderName).Returns("twitter");
anotherClient.Setup(c => c.VerifyAuthentication(context.Object)).Returns(AuthenticationResult.Failed);
OAuthWebSecurity.RegisterClient(client.Object);
OAuthWebSecurity.RegisterClient(anotherClient.Object);
// Act
AuthenticationResult result = OAuthWebSecurity.VerifyAuthenticationCore(context.Object);
// Assert
Assert.False(result.IsSuccessful);
Assert.Equal("twitter", result.Provider);
}
[Fact]
public void VerifyAuthenticationFailIfNoProviderInQueryString()
{
// Arrange
var context = new Mock<HttpContextBase>();
context.Setup(c => c.Request.QueryString).Returns(new NameValueCollection());
var client = new Mock<IAuthenticationClient>(MockBehavior.Strict);
client.Setup(c => c.ProviderName).Returns("facebook");
var anotherClient = new Mock<IAuthenticationClient>(MockBehavior.Strict);
anotherClient.Setup(c => c.ProviderName).Returns("twitter");
OAuthWebSecurity.RegisterClient(client.Object);
OAuthWebSecurity.RegisterClient(anotherClient.Object);
// Act
AuthenticationResult result = OAuthWebSecurity.VerifyAuthenticationCore(context.Object);
// Assert
Assert.False(result.IsSuccessful);
Assert.Null(result.Provider);
}
[Fact]
public void LoginSetAuthenticationTicketIfSuccessful()
{
// Arrange
var cookies = new HttpCookieCollection();
var context = new Mock<HttpContextBase>();
context.Setup(c => c.Request.IsSecureConnection).Returns(true);
context.Setup(c => c.Response.Cookies).Returns(cookies);
var dataProvider = new Mock<IOpenAuthDataProvider>(MockBehavior.Strict);
dataProvider.Setup(p => p.GetUserNameFromOpenAuth("twitter", "12345")).Returns("hola");
OAuthWebSecurity.OAuthDataProvider = dataProvider.Object;
OAuthWebSecurity.RegisterOAuthClient(BuiltInOAuthClient.Twitter, "sdfdsfsd", "dfdsfdsf");
// Act
bool successful = OAuthWebSecurity.LoginCore(context.Object, "twitter", "12345", createPersistentCookie: false);
// Assert
Assert.True(successful);
Assert.Equal(1, cookies.Count);
HttpCookie addedCookie = cookies[0];
Assert.Equal(FormsAuthentication.FormsCookieName, addedCookie.Name);
Assert.True(addedCookie.HttpOnly);
Assert.Equal("/", addedCookie.Path);
Assert.False(addedCookie.Secure);
Assert.False(String.IsNullOrEmpty(addedCookie.Value));
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(addedCookie.Value);
Assert.NotNull(ticket);
Assert.Equal(2, ticket.Version);
Assert.Equal("hola", ticket.Name);
Assert.Equal("OAuth", ticket.UserData);
Assert.False(ticket.IsPersistent);
}
[Fact]
public void LoginFailIfUserIsNotFound()
{
// Arrange
var context = new Mock<HttpContextBase>();
OAuthWebSecurity.RegisterOAuthClient(BuiltInOAuthClient.Twitter, "consumerKey", "consumerSecrte");
var dataProvider = new Mock<IOpenAuthDataProvider>();
dataProvider.Setup(p => p.GetUserNameFromOpenAuth("twitter", "12345")).Returns((string)null);
OAuthWebSecurity.OAuthDataProvider = dataProvider.Object;
// Act
bool successful = OAuthWebSecurity.LoginCore(context.Object, "twitter", "12345", createPersistentCookie: false);
// Assert
Assert.False(successful);
}
[Fact]
public void GetOAuthClientReturnsTheCorrectClient()
{
// Arrange
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns("facebook");
OAuthWebSecurity.RegisterClient(client.Object);
var anotherClient = new Mock<IAuthenticationClient>();
anotherClient.Setup(c => c.ProviderName).Returns("hulu");
OAuthWebSecurity.RegisterClient(anotherClient.Object);
// Act
var expectedClient = OAuthWebSecurity.GetOAuthClient("facebook");
// Assert
Assert.Same(expectedClient, client.Object);
}
[Fact]
public void GetOAuthClientThrowsIfClientIsNotFound()
{
// Arrange
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns("facebook");
OAuthWebSecurity.RegisterClient(client.Object);
var anotherClient = new Mock<IAuthenticationClient>();
anotherClient.Setup(c => c.ProviderName).Returns("hulu");
OAuthWebSecurity.RegisterClient(anotherClient.Object);
// Act & Assert
Assert.Throws<ArgumentException>(() => OAuthWebSecurity.GetOAuthClient("live"));
}
[Fact]
public void TryGetOAuthClientSucceeds()
{
// Arrange
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns("facebook");
OAuthWebSecurity.RegisterClient(client.Object);
var anotherClient = new Mock<IAuthenticationClient>();
anotherClient.Setup(c => c.ProviderName).Returns("hulu");
OAuthWebSecurity.RegisterClient(anotherClient.Object);
// Act
IAuthenticationClient expectedClient;
bool result = OAuthWebSecurity.TryGetOAuthClient("facebook", out expectedClient);
// Assert
Assert.Same(expectedClient, client.Object);
Assert.True(result);
}
[Fact]
public void TryGetOAuthClientFail()
{
// Arrange
var client = new Mock<IAuthenticationClient>();
client.Setup(c => c.ProviderName).Returns("facebook");
OAuthWebSecurity.RegisterClient(client.Object);
var anotherClient = new Mock<IAuthenticationClient>();
anotherClient.Setup(c => c.ProviderName).Returns("hulu");
OAuthWebSecurity.RegisterClient(anotherClient.Object);
// Act
IAuthenticationClient expectedClient;
bool result = OAuthWebSecurity.TryGetOAuthClient("live", out expectedClient);
// Assert
Assert.Null(expectedClient);
Assert.False(result);
}
public void Dispose() {
OAuthWebSecurity.ClearProviders();
}
}
}

View File

@@ -0,0 +1,10 @@
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
namespace Microsoft.Web.WebPages.OAuth.Test
{
public class PreAppStartCodeTest
{
}
}

View File

@@ -0,0 +1,9 @@
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Reflection;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Microsoft.Web.DotNetOpenAuth.Test")]
[assembly: AssemblyDescription("")]

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="DotNetOpenAuth.AspNet" version="4.0.0.12084" />
<package id="DotNetOpenAuth.Core" version="4.0.0.12084" />
<package id="DotNetOpenAuth.OAuth.Consumer" version="4.0.0.12084" />
<package id="DotNetOpenAuth.OAuth.Core" version="4.0.0.12084" />
<package id="DotNetOpenAuth.OpenId.Core" version="4.0.0.12084" />
<package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.0.0.12084" />
<package id="Moq" version="4.0.10827" />
<package id="xunit" version="1.9.0.1566" />
</packages>