From a66f50c1ba2dec01b0ca001dc22767d77ece29f2 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Wed, 9 Dec 2015 01:11:20 -0800 Subject: [PATCH] Enable running tests xplat --- .travis.yml | 5 +- .../CustomPocoTest.cs | 16 +- .../DefaultPocoTest.cs | 14 + .../SqlStoreTestBase.cs | 28 + .../UserStoreTest.cs | 94 ++- test/Shared/UserManagerTestBase.cs | 661 +++++++++++++----- 6 files changed, 596 insertions(+), 222 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2fc624899f..4e263db784 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,10 @@ addons: - libunwind8 - zlib1g env: - - KOREBUILD_DNU_RESTORE_CORECLR=true + - KOREBUILD_DNU_RESTORE_CORECLR=true KOREBUILD_TEST_DNXCORE=true +os: + - linux + - osx mono: - 4.0.5 script: diff --git a/test/Microsoft.AspNet.Identity.EntityFramework.Test/CustomPocoTest.cs b/test/Microsoft.AspNet.Identity.EntityFramework.Test/CustomPocoTest.cs index 6748f3dbaf..6938dacc61 100644 --- a/test/Microsoft.AspNet.Identity.EntityFramework.Test/CustomPocoTest.cs +++ b/test/Microsoft.AspNet.Identity.EntityFramework.Test/CustomPocoTest.cs @@ -46,7 +46,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [TestPriority(-1000)] [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public void DropDatabaseStart() { DropDb(); @@ -54,7 +54,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [TestPriority(10000)] [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public void DropDatabaseDone() { DropDb(); @@ -67,7 +67,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanUpdateNameGuid() { using (var db = CreateContext(true)) @@ -85,7 +85,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanUpdateNameString() { using (var db = CreateContext(true)) @@ -103,7 +103,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanCreateUserInt() { using (var db = CreateContext(true)) @@ -119,7 +119,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanCreateUserIntViaSet() { using (var db = CreateContext(true)) @@ -136,7 +136,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanUpdateNameInt() { using (var db = CreateContext(true)) @@ -154,7 +154,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)][OSSkipCondition(OperatingSystems.Linux)][OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanUpdateNameIntWithSet() { using (var db = CreateContext(true)) diff --git a/test/Microsoft.AspNet.Identity.EntityFramework.Test/DefaultPocoTest.cs b/test/Microsoft.AspNet.Identity.EntityFramework.Test/DefaultPocoTest.cs index 66b1c99312..1aefc04aeb 100644 --- a/test/Microsoft.AspNet.Identity.EntityFramework.Test/DefaultPocoTest.cs +++ b/test/Microsoft.AspNet.Identity.EntityFramework.Test/DefaultPocoTest.cs @@ -37,6 +37,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [TestPriority(-1000)] [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public void DropDatabaseStart() { DropDb(); @@ -59,6 +61,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task EnsureStartupUsageWorks() { var context = CreateContext(true); @@ -79,6 +83,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanIncludeUserClaimsTest() { // Arrange @@ -107,6 +113,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanIncludeUserLoginsTest() { // Arrange @@ -135,6 +143,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanIncludeUserRolesTest() { // Arrange @@ -177,6 +187,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanIncludeRoleClaimsTest() { // Arrange @@ -206,6 +218,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [TestPriority(10000)] [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public void DropDatabaseDone() { DropDb(); diff --git a/test/Microsoft.AspNet.Identity.EntityFramework.Test/SqlStoreTestBase.cs b/test/Microsoft.AspNet.Identity.EntityFramework.Test/SqlStoreTestBase.cs index 7f63c5e3c8..7adfeb7cf8 100644 --- a/test/Microsoft.AspNet.Identity.EntityFramework.Test/SqlStoreTestBase.cs +++ b/test/Microsoft.AspNet.Identity.EntityFramework.Test/SqlStoreTestBase.cs @@ -8,6 +8,7 @@ using System.Linq.Expressions; using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNet.Identity.Test; +using Microsoft.AspNet.Testing; using Microsoft.AspNet.Testing.xunit; using Microsoft.Data.Entity; using Microsoft.Data.Entity.Storage; @@ -23,6 +24,11 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test { public abstract string ConnectionString { get; } + protected override bool ShouldSkipDbTests() + { + return TestPlatformHelper.IsMono || !TestPlatformHelper.IsWindows; + } + public class TestDbContext : IdentityDbContext { } protected override TUser CreateTestUser(string namePrefix = "", string email = "", string phoneNumber = "", @@ -56,6 +62,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [TestPriority(-1000)] [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public void DropDatabaseStart() { DropDb(); @@ -64,6 +72,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [TestPriority(10000)] [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public void DropDatabaseDone() { DropDb(); @@ -113,6 +123,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public void EnsureDefaultSchema() { VerifyDefaultSchema(CreateContext()); @@ -182,6 +194,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task DeleteRoleNonEmptySucceedsTest() { // Need fail if not empty? @@ -208,6 +222,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task DeleteUserRemovesFromRoleTest() { // Need fail if not empty? @@ -233,6 +249,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public void CanCreateUserUsingEF() { using (var db = CreateContext()) @@ -247,6 +265,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task CanCreateUsingManager() { var manager = CreateManager(); @@ -281,6 +301,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task LoadFromDbFindByIdTest() { var db = CreateContext(); @@ -298,6 +320,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task LoadFromDbFindByNameTest() { var db = CreateContext(); @@ -314,6 +338,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task LoadFromDbFindByLoginTest() { var db = CreateContext(); @@ -330,6 +356,8 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test [ConditionalFact] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] public async Task LoadFromDbFindByEmailTest() { var db = CreateContext(); diff --git a/test/Microsoft.AspNet.Identity.EntityFramework.Test/UserStoreTest.cs b/test/Microsoft.AspNet.Identity.EntityFramework.Test/UserStoreTest.cs index cd01db00ab..12c95734f7 100644 --- a/test/Microsoft.AspNet.Identity.EntityFramework.Test/UserStoreTest.cs +++ b/test/Microsoft.AspNet.Identity.EntityFramework.Test/UserStoreTest.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Microsoft.AspNet.Identity.Test; +using Microsoft.AspNet.Testing; using Microsoft.AspNet.Testing.xunit; using Microsoft.Extensions.DependencyInjection; using Xunit; @@ -19,19 +20,30 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test private readonly string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=SqlUserStoreTest" + DateTime.Now.Month + "-" + DateTime.Now.Day + "-" + DateTime.Now.Year + ";Trusted_Connection=True;Connection Timeout=30"; + protected override bool ShouldSkipDbTests() + { + return TestPlatformHelper.IsMono || !TestPlatformHelper.IsWindows; + } + [TestPriority(-1000)] - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public void DropDatabaseStart() { + if (ShouldSkipDbTests()) + { + return; + } DropDb(); } [TestPriority(10000)] - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public void DropDatabaseDone() { + if (ShouldSkipDbTests()) + { + return; + } DropDb(); } @@ -41,10 +53,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test db.Database.EnsureDeleted(); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public void CanCreateUserUsingEF() { + if (ShouldSkipDbTests()) + { + return; + } using (var db = CreateContext()) { var guid = Guid.NewGuid().ToString(); @@ -93,7 +108,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test services.AddSingleton>(new RoleStore((IdentityDbContext)context)); } - [ConditionalFact] + [Fact] public async Task SqlUserStoreMethodsThrowWhenDisposedTest() { var store = new UserStore(new IdentityDbContext()); @@ -126,7 +141,7 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test async () => await store.GetPhoneNumberConfirmedAsync(null)); } - [ConditionalFact] + [Fact] public async Task UserStorePublicNullCheckTest() { Assert.Throws("context", () => new UserStore(null)); @@ -192,10 +207,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test await Assert.ThrowsAsync("roleName", async () => await store.IsInRoleAsync(new IdentityUser("fake"), "")); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanCreateUsingManager() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var guid = Guid.NewGuid().ToString(); var user = new IdentityUser { UserName = "New" + guid }; @@ -203,10 +221,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test IdentityResultAssert.IsSuccess(await manager.DeleteAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task TwoUsersSamePasswordDifferentHash() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var userA = new IdentityUser(Guid.NewGuid().ToString()); IdentityResultAssert.IsSuccess(await manager.CreateAsync(userA, "password")); @@ -216,10 +237,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test Assert.NotEqual(userA.PasswordHash, userB.PasswordHash); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddUserToUnknownRoleFails() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var u = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(u)); @@ -227,10 +251,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test async () => await manager.AddToRoleAsync(u, "bogus")); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ConcurrentUpdatesWillFail() { + if (ShouldSkipDbTests()) + { + return; + } var user = CreateTestUser(); using (var db = CreateContext()) { @@ -254,10 +281,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ConcurrentUpdatesWillFailWithDetachedUser() { + if (ShouldSkipDbTests()) + { + return; + } var user = CreateTestUser(); using (var db = CreateContext()) { @@ -279,10 +309,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task DeleteAModifiedUserWillFail() { + if (ShouldSkipDbTests()) + { + return; + } var user = CreateTestUser(); using (var db = CreateContext()) { @@ -305,10 +338,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ConcurrentRoleUpdatesWillFail() { + if (ShouldSkipDbTests()) + { + return; + } var role = new IdentityRole(Guid.NewGuid().ToString()); using (var db = CreateContext()) { @@ -332,10 +368,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ConcurrentRoleUpdatesWillFailWithDetachedRole() { + if (ShouldSkipDbTests()) + { + return; + } var role = new IdentityRole(Guid.NewGuid().ToString()); using (var db = CreateContext()) { @@ -358,10 +397,13 @@ namespace Microsoft.AspNet.Identity.EntityFramework.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task DeleteAModifiedRoleWillFail() { + if (ShouldSkipDbTests()) + { + return; + } var role = new IdentityRole(Guid.NewGuid().ToString()); using (var db = CreateContext()) { diff --git a/test/Shared/UserManagerTestBase.cs b/test/Shared/UserManagerTestBase.cs index d7a54d9c3e..4ea3208b3b 100644 --- a/test/Shared/UserManagerTestBase.cs +++ b/test/Shared/UserManagerTestBase.cs @@ -30,6 +30,11 @@ namespace Microsoft.AspNet.Identity.Test { private readonly IdentityErrorDescriber _errorDescriber = new IdentityErrorDescriber(); + protected virtual bool ShouldSkipDbTests() + { + return false; + } + protected virtual void SetupIdentityServices(IServiceCollection services, object context = null) { services.AddSingleton(); @@ -98,10 +103,13 @@ namespace Microsoft.AspNet.Identity.Test protected abstract Expression> RoleNameEqualsPredicate(string roleName); protected abstract Expression> RoleNameStartsWithPredicate(string roleName); - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanDeleteUser() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -110,10 +118,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Null(await manager.FindByIdAsync(userId)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanUpdateUserName() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var name = Guid.NewGuid().ToString(); var user = CreateTestUser(name); @@ -126,10 +137,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Null(await manager.FindByNameAsync(name)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CheckSetUserNameValidatesUser() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var username = "UpdateAsync" + Guid.NewGuid().ToString(); var newUsername = "New" + Guid.NewGuid().ToString(); @@ -151,10 +165,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"User {await manager.GetUserIdAsync(newUser)} validation failed: {error.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task SetUserNameUpdatesSecurityStamp() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var username = "UpdateAsync" + Guid.NewGuid().ToString(); var newUsername = "New" + Guid.NewGuid().ToString(); @@ -166,10 +183,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CreateUpdatesSecurityStamp() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var username = "Create" + Guid.NewGuid().ToString(); var user = CreateTestUser(username, useNamePrefixAsUserName: true); @@ -178,10 +198,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotNull(await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CheckSetEmailValidatesUser() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.Options.User.RequireUniqueEmail = true; manager.UserValidators.Add(new UserValidator()); @@ -198,10 +221,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.IsFailure(await manager.SetEmailAsync(newUser, ""), _errorDescriber.InvalidEmail("")); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanUpdatePasswordUsingHasher() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser("UpdatePassword"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user, "password")); @@ -215,20 +241,26 @@ namespace Microsoft.AspNet.Identity.Test Assert.True(await manager.CheckPasswordAsync(user, "New")); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanFindById() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); Assert.NotNull(await manager.FindByIdAsync(await manager.GetUserIdAsync(user))); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task UserValidatorCanBlockCreate() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); manager.UserValidators.Clear(); @@ -237,10 +269,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"User {await manager.GetUserIdAsync(user)} validation failed: {AlwaysBadValidator.ErrorMessage.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task UserValidatorCanBlockUpdate() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -250,10 +285,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"User {await manager.GetUserIdAsync(user)} validation failed: {AlwaysBadValidator.ErrorMessage.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanChainUserValidators() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.UserValidators.Clear(); var user = CreateTestUser(); @@ -268,9 +306,12 @@ namespace Microsoft.AspNet.Identity.Test [ConditionalTheory] [InlineData("")] [InlineData(null)] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] public async Task UserValidatorBlocksShortEmailsWhenRequiresUniqueEmail(string email) { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); manager.Options.User.RequireUniqueEmail = true; @@ -278,12 +319,15 @@ namespace Microsoft.AspNet.Identity.Test } #if DNX451 - [ConditionalTheory] + [Theory] [InlineData("@@afd")] [InlineData("bogus")] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] public async Task UserValidatorBlocksInvalidEmailsWhenRequiresUniqueEmail(string email) { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser("UpdateBlocked", email); manager.Options.User.RequireUniqueEmail = true; @@ -291,10 +335,13 @@ namespace Microsoft.AspNet.Identity.Test } #endif - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task PasswordValidatorCanBlockAddPassword() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -305,10 +352,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"User {await manager.GetUserIdAsync(user)} password validation failed: {AlwaysBadValidator.ErrorMessage.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanChainPasswordValidators() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.PasswordValidators.Clear(); manager.PasswordValidators.Add(new AlwaysBadValidator()); @@ -320,10 +370,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(2, result.Errors.Count()); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task PasswordValidatorCanBlockChangePassword() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user, "password")); @@ -334,10 +387,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"User {await manager.GetUserIdAsync(user)} password validation failed: {AlwaysBadValidator.ErrorMessage.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task PasswordValidatorCanBlockCreateUser() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); manager.PasswordValidators.Clear(); @@ -346,10 +402,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"User {await manager.GetUserIdAsync(user)} password validation failed: {AlwaysBadValidator.ErrorMessage.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanCreateUserNoPassword() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var username = "CreateUserTest" + Guid.NewGuid(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(CreateTestUser(username, useNamePrefixAsUserName: true))); @@ -362,10 +421,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(0, logins.Count()); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanCreateUserAddLogin() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); const string provider = "ZzAuth"; const string display = "display"; @@ -381,10 +443,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(display, logins.First().ProviderDisplayName); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanCreateUserLoginAndAddPassword() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -401,10 +466,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.True(await manager.CheckPasswordAsync(user, "password")); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddPasswordFailsIfAlreadyHave() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user, "Password")); @@ -414,10 +482,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"User {await manager.GetUserIdAsync(user)} already has a password."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanCreateUserAddRemoveLogin() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); var result = await manager.CreateAsync(user); @@ -442,10 +513,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanRemovePassword() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser("CanRemovePassword"); const string password = "password"; @@ -459,10 +533,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanChangePassword() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); const string password = "password"; @@ -476,10 +553,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanAddRemoveUserClaim() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -502,10 +582,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(0, userClaims.Count); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task RemoveClaimOnlyAffectsUser() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); var user2 = CreateTestUser(); @@ -532,10 +615,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(3, userClaims2.Count); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanReplaceUserClaim() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -552,10 +638,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(claim.Value, newClaim.Value); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ReplaceUserClaimOnlyAffectsUser() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); var user2 = CreateTestUser(); @@ -582,10 +671,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal("a", oldClaim2.Value); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ChangePasswordFallsIfPasswordWrong() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user, "password")); @@ -594,10 +686,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"Change password failed for user {await manager.GetUserIdAsync(user)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddDupeUserNameFails() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var username = "AddDupeUserNameFails" + Guid.NewGuid(); var user = CreateTestUser(username, useNamePrefixAsUserName: true); @@ -606,10 +701,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.IsFailure(await manager.CreateAsync(user2), _errorDescriber.DuplicateUserName(username)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddDupeEmailAllowedByDefault() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(email: "yup@yup.com"); var user2 = CreateTestUser(email: "yup@yup.com"); @@ -618,10 +716,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.IsSuccess(await manager.SetEmailAsync(user2, await manager.GetEmailAsync(user))); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddDupeEmailFailsWhenUniqueEmailRequired() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.Options.User.RequireUniqueEmail = true; var user = CreateTestUser(email: "FooUser@yup.com"); @@ -630,10 +731,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.IsFailure(await manager.CreateAsync(user2), _errorDescriber.DuplicateEmail("FooUser@yup.com")); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task UpdateSecurityStampActuallyChanges() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); Assert.Null(await manager.GetSecurityStampAsync(user)); @@ -644,10 +748,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddDupeLoginFails() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); var login = new UserLoginInfo("Provider", "key", "display"); @@ -659,10 +766,13 @@ namespace Microsoft.AspNet.Identity.Test } // Email tests - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanFindByEmail() { + if (ShouldSkipDbTests()) + { + return; + } var email = "foouser@test.com"; var manager = CreateManager(); var user = CreateTestUser(email: email); @@ -671,10 +781,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(user, fetch); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanFindUsersViaUserQuerable() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); if (mgr.SupportsQueryableUsers) { @@ -688,10 +801,13 @@ namespace Microsoft.AspNet.Identity.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ConfirmEmailFalseByDefaultTest() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -726,10 +842,13 @@ namespace Microsoft.AspNet.Identity.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanResetPasswordWithStaticTokenProvider() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.RegisterTokenProvider("Static", new StaticTokenProvider()); manager.Options.Tokens.PasswordResetTokenProvider = "Static"; @@ -748,10 +867,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task PasswordValidatorCanBlockResetPasswordWithStaticTokenProvider() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.RegisterTokenProvider("Static", new StaticTokenProvider()); manager.Options.Tokens.PasswordResetTokenProvider = "Static"; @@ -771,10 +893,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ResetPasswordWithStaticTokenProviderFailsWithWrongToken() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.RegisterTokenProvider("Static", new StaticTokenProvider()); manager.Options.Tokens.PasswordResetTokenProvider = "Static"; @@ -790,10 +915,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanGenerateAndVerifyUserTokenWithStaticTokenProvider() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.RegisterTokenProvider("Static", new StaticTokenProvider()); var user = CreateTestUser(); @@ -815,10 +943,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"VerifyUserTokenAsync() failed with purpose: test for user { await manager.GetUserIdAsync(user2)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanConfirmEmailWithStaticToken() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.RegisterTokenProvider("Static", new StaticTokenProvider()); manager.Options.Tokens.EmailConfirmationTokenProvider = "Static"; @@ -834,10 +965,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.False(await manager.IsEmailConfirmedAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ConfirmEmailWithStaticTokenFailsWithWrongToken() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); manager.RegisterTokenProvider("Static", new StaticTokenProvider()); manager.Options.Tokens.EmailConfirmationTokenProvider = "Static"; @@ -849,10 +983,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"VerifyUserTokenAsync() failed with purpose: EmailConfirmation for user { await manager.GetUserIdAsync(user)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ConfirmTokenFailsAfterPasswordChange() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(namePrefix: "Test"); Assert.False(await manager.IsEmailConfirmedAsync(user)); @@ -867,10 +1004,13 @@ namespace Microsoft.AspNet.Identity.Test // Lockout tests - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task SingleFailureLockout() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); mgr.Options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromHours(1); mgr.Options.Lockout.MaxFailedAccessAttempts = 0; @@ -886,10 +1026,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(0, await mgr.GetAccessFailedCountAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task TwoFailureLockout() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); mgr.Options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromHours(1); mgr.Options.Lockout.MaxFailedAccessAttempts = 2; @@ -908,10 +1051,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(0, await mgr.GetAccessFailedCountAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ResetAccessCountPreventsLockout() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); mgr.Options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromHours(1); mgr.Options.Lockout.MaxFailedAccessAttempts = 2; @@ -933,10 +1079,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(1, await mgr.GetAccessFailedCountAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanEnableLockoutManuallyAndLockout() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); mgr.Options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromHours(1); mgr.Options.Lockout.AllowedForNewUsers = false; @@ -958,10 +1107,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(0, await mgr.GetAccessFailedCountAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task UserNotLockedOutWithNullDateTimeAndIsSetToNullDate() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await mgr.CreateAsync(user)); @@ -971,10 +1123,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(new DateTimeOffset(), await mgr.GetLockoutEndDateAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task LockoutFailsIfNotEnabled() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); mgr.Options.Lockout.AllowedForNewUsers = false; var user = CreateTestUser(); @@ -986,10 +1141,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.False(await mgr.IsLockedOutAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task LockoutEndToUtcNowMinus1SecInUserShouldNotBeLockedOut() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); var user = CreateTestUser(lockoutEnd: DateTimeOffset.UtcNow.AddSeconds(-1)); IdentityResultAssert.IsSuccess(await mgr.CreateAsync(user)); @@ -997,10 +1155,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.False(await mgr.IsLockedOutAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task LockoutEndToUtcNowSubOneSecondWithManagerShouldNotBeLockedOut() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await mgr.CreateAsync(user)); @@ -1009,10 +1170,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.False(await mgr.IsLockedOutAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task LockoutEndToUtcNowPlus5ShouldBeLockedOut() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); var lockoutEnd = DateTimeOffset.UtcNow.AddMinutes(5); var user = CreateTestUser(lockoutEnd: lockoutEnd); @@ -1021,10 +1185,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.True(await mgr.IsLockedOutAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task UserLockedOutWithDateTimeLocalKindNowPlus30() { + if (ShouldSkipDbTests()) + { + return; + } var mgr = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await mgr.CreateAsync(user)); @@ -1037,10 +1204,13 @@ namespace Microsoft.AspNet.Identity.Test } // Role Tests - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanCreateRoleTest() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var roleName = "create" + Guid.NewGuid().ToString(); var role = CreateTestRole(roleName, useRoleNamePrefixAsRoleName: true); @@ -1070,10 +1240,13 @@ namespace Microsoft.AspNet.Identity.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task BadValidatorBlocksCreateRole() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); manager.RoleValidators.Clear(); manager.RoleValidators.Add(new AlwaysBadValidator()); @@ -1083,10 +1256,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"Role {await manager.GetRoleIdAsync(role)} validation failed: {AlwaysBadValidator.ErrorMessage.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanChainRoleValidators() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); manager.RoleValidators.Clear(); manager.RoleValidators.Add(new AlwaysBadValidator()); @@ -1098,10 +1274,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(2, result.Errors.Count()); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task BadValidatorBlocksRoleUpdate() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var role = CreateTestRole("poorguy"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(role)); @@ -1112,10 +1291,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"Role {await manager.GetRoleIdAsync(role)} validation failed: {AlwaysBadValidator.ErrorMessage.Code}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanDeleteRole() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var roleName = "delete" + Guid.NewGuid().ToString(); var role = CreateTestRole(roleName, useRoleNamePrefixAsRoleName: true); @@ -1126,10 +1308,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.False(await manager.RoleExistsAsync(roleName)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanAddRemoveRoleClaim() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var role = CreateTestRole("ClaimsAddRemove"); var roleSafe = CreateTestRole("ClaimsAdd"); @@ -1162,10 +1347,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(3, safeRoleClaims.Count); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanRoleFindById() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var role = CreateTestRole("FindByIdAsync"); Assert.Null(await manager.FindByIdAsync(await manager.GetRoleIdAsync(role))); @@ -1173,10 +1361,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(role, await manager.FindByIdAsync(await manager.GetRoleIdAsync(role))); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanRoleFindByName() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var roleName = "FindByNameAsync" + Guid.NewGuid().ToString(); var role = CreateTestRole(roleName, useRoleNamePrefixAsRoleName: true); @@ -1186,10 +1377,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(role, await manager.FindByNameAsync(roleName)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanUpdateRoleName() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var roleName = "update" + Guid.NewGuid().ToString(); var role = CreateTestRole(roleName, useRoleNamePrefixAsRoleName: true); @@ -1202,10 +1396,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(role, await manager.FindByNameAsync("Changed")); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanQueryableRoles() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); if (manager.SupportsQueryableRoles) { @@ -1219,10 +1416,13 @@ namespace Microsoft.AspNet.Identity.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CreateRoleFailsIfExists() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateRoleManager(); var roleName = "dupeRole" + Guid.NewGuid().ToString(); var role = CreateTestRole(roleName, useRoleNamePrefixAsRoleName: true); @@ -1233,10 +1433,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.IsFailure(await manager.CreateAsync(role2)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanAddUsersToRole() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var manager = CreateManager(context); var roleManager = CreateRoleManager(context); @@ -1255,10 +1458,13 @@ namespace Microsoft.AspNet.Identity.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanGetRolesForUser() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var userManager = CreateManager(context); var roleManager = CreateRoleManager(context); @@ -1290,10 +1496,13 @@ namespace Microsoft.AspNet.Identity.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task RemoveUserFromRoleWithMultipleRoles() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var userManager = CreateManager(context); var roleManager = CreateRoleManager(context); @@ -1310,10 +1519,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.False(await userManager.IsInRoleAsync(user, await roleManager.GetRoleNameAsync(roles[2]))); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanRemoveUsersFromRole() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var userManager = CreateManager(context); var roleManager = CreateRoleManager(context); @@ -1336,10 +1548,13 @@ namespace Microsoft.AspNet.Identity.Test } } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task RemoveUserNotInRoleFails() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var userMgr = CreateManager(context); var roleMgr = CreateRoleManager(context); @@ -1353,10 +1568,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(userMgr.Logger, $"User {await userMgr.GetUserIdAsync(user)} is not in role {roleName}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddUserToRoleFailsIfAlreadyInRole() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var userMgr = CreateManager(context); var roleMgr = CreateRoleManager(context); @@ -1371,10 +1589,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(userMgr.Logger, $"User {await userMgr.GetUserIdAsync(user)} is already in role {roleName}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task AddUserToRolesIgnoresDuplicates() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var userMgr = CreateManager(context); var roleMgr = CreateRoleManager(context); @@ -1388,10 +1609,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.True(await userMgr.IsInRoleAsync(user, roleName)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanFindRoleByNameWithManager() { + if (ShouldSkipDbTests()) + { + return; + } var roleMgr = CreateRoleManager(); var roleName = "findRoleByNameTest" + Guid.NewGuid().ToString(); var role = CreateTestRole(roleName, useRoleNamePrefixAsRoleName: true); @@ -1399,10 +1623,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotNull(await roleMgr.FindByNameAsync(roleName)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanFindRoleWithManager() { + if (ShouldSkipDbTests()) + { + return; + } var roleMgr = CreateRoleManager(); var roleName = "findRoleTest" + Guid.NewGuid().ToString(); var role = CreateTestRole(roleName, useRoleNamePrefixAsRoleName: true); @@ -1410,10 +1637,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(roleName, await roleMgr.GetRoleNameAsync(await roleMgr.FindByNameAsync(roleName))); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task SetPhoneNumberTest() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(phoneNumber: "123-456-7890"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1424,10 +1654,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanChangePhoneNumber() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(phoneNumber: "123-456-7890"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1440,10 +1673,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ChangePhoneNumberFailsWithWrongToken() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(phoneNumber: "123-456-7890"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1457,10 +1693,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ChangePhoneNumberFailsWithWrongPhoneNumber() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(phoneNumber: "123-456-7890"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1474,10 +1713,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanVerifyPhoneNumber() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1495,10 +1737,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"VerifyChangePhoneNumberTokenAsync() failed for user {await manager.GetUserIdAsync(user)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanChangeEmail() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser("foouser"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1514,10 +1759,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanChangeEmailWithDifferentTokenProvider() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(context: null, services: null, configureServices: s => s.Configure( o => o.Tokens.ProviderMap["NewProvider2"] = new TokenProviderDescriptor(typeof(EmailTokenProvider)))); @@ -1536,10 +1784,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.NotEqual(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ChangeEmailFailsWithWrongToken() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser("foouser"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1556,10 +1807,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task ChangeEmailFailsWithEmail() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser("foouser"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1577,10 +1831,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(stamp, await manager.GetSecurityStampAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task EmailFactorFailsAfterSecurityStampChangeTest() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); string factorId = "Email"; //default var user = CreateTestUser("foouser"); @@ -1599,10 +1856,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"VerifyTwoFactorTokenAsync() failed for user {await manager.GetUserIdAsync(user)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task EnableTwoFactorChangesSecurityStamp() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1613,10 +1873,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.True(await manager.GetTwoFactorEnabledAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task GenerateTwoFactorWithUnknownFactorProviderWillThrow() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1628,10 +1891,13 @@ namespace Microsoft.AspNet.Identity.Test () => manager.VerifyTwoFactorTokenAsync(user, "bogus", "bogus"), error); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task GetValidTwoFactorTestEmptyWithNoProviders() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1640,10 +1906,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.True(!factors.Any()); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanGetValidTwoFactor() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1672,10 +1941,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal("Phone", factors[0]); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task PhoneFactorFailsAfterSecurityStampChangeTest() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var factorId = "Phone"; // default var user = CreateTestUser(phoneNumber: "4251234567"); @@ -1689,10 +1961,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"VerifyTwoFactorTokenAsync() failed for user {await manager.GetUserIdAsync(user)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task VerifyTokenFromWrongTokenProviderFails() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(phoneNumber: "4251234567"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1702,10 +1977,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"VerifyTwoFactorTokenAsync() failed for user {await manager.GetUserIdAsync(user)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task VerifyWithWrongSmsTokenFails() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); var user = CreateTestUser(phoneNumber: "4251234567"); IdentityResultAssert.IsSuccess(await manager.CreateAsync(user)); @@ -1713,10 +1991,13 @@ namespace Microsoft.AspNet.Identity.Test IdentityResultAssert.VerifyLogMessage(manager.Logger, $"VerifyTwoFactorTokenAsync() failed for user {await manager.GetUserIdAsync(user)}."); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task NullableDateTimeOperationTest() { + if (ShouldSkipDbTests()) + { + return; + } var userMgr = CreateManager(); var user = CreateTestUser(lockoutEnabled: true); IdentityResultAssert.IsSuccess(await userMgr.CreateAsync(user)); @@ -1732,10 +2013,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(DateTimeOffset.Parse("01/01/2014"), await userMgr.GetLockoutEndDateAsync(user)); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanGetUsersWithClaims() { + if (ShouldSkipDbTests()) + { + return; + } var manager = CreateManager(); for (int i = 0; i < 6; i++) @@ -1754,10 +2038,13 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(0, (await manager.GetUsersForClaimAsync(new Claim("123", "456"))).Count); } - [ConditionalFact] - [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [Fact] public async Task CanGetUsersInRole() { + if (ShouldSkipDbTests()) + { + return; + } var context = CreateTestContext(); var manager = CreateManager(context); var roleManager = CreateRoleManager(context);