diff --git a/Orm/Xtensive.Orm.Tests.Framework/StorageTestHelper.cs b/Orm/Xtensive.Orm.Tests.Framework/StorageTestHelper.cs index 3b9a86d47..f6ecfcf22 100644 --- a/Orm/Xtensive.Orm.Tests.Framework/StorageTestHelper.cs +++ b/Orm/Xtensive.Orm.Tests.Framework/StorageTestHelper.cs @@ -6,7 +6,9 @@ using System; using System.Collections.Generic; +using System.Data.Common; using System.Linq; +using System.Threading; using Xtensive.Orm.Providers; using Xtensive.Sql; using Xtensive.Sql.Model; @@ -17,15 +19,13 @@ public static class StorageTestHelper { public static bool IsFetched(Session session, Key key) { - EntityState dummy; - return session.EntityStateCache.TryGetItem(key, false, out dummy); + return session.EntityStateCache.TryGetItem(key, false, out var _); } - public static object GetNativeTransaction() + public static object GetNativeTransaction(Session session) { - var handler = Session.Demand().Handler; - var sqlHandler = handler as SqlSessionHandler; - if (sqlHandler!=null) + var handler = session.Handler; + if (handler is SqlSessionHandler sqlHandler) return sqlHandler.Connection.ActiveTransaction; throw new NotSupportedException(); } @@ -66,6 +66,39 @@ public static void DemandSchemas(ConnectionInfo connectionInfo, params string[] } } + /// + /// Waits for full-text indexes of MS SQL to be populated. + /// Every now and then it gets state of them from database or waits timeout to be reached. + /// + /// + public static void WaitFullTextIndexesPopulated(Domain domain, TimeSpan timeout) + { + if (StorageProviderInfo.Instance.Provider == StorageProvider.SqlServer) { + var driver = TestSqlDriver.Create(domain.Configuration.ConnectionInfo); + using (var connection = driver.CreateConnection()) { + + var date = DateTime.UtcNow.Add(timeout); + while (!CheckFtIndexesPopulated(connection) && DateTime.UtcNow < date) { + Thread.Sleep(TimeSpan.FromSeconds(2)); + } + } + } + + static bool CheckFtIndexesPopulated(SqlConnection connection) + { + connection.Open(); + try { + using (var command = connection.CreateCommand()) { + command.CommandText = $"SELECT COUNT(*) FROM sys.fulltext_indexes WHERE has_crawl_completed = 0"; + return ((int) command.ExecuteScalar()) == 0; + } + } + finally { + connection.Close(); + } + } + } + private static void CreateUsers(SqlConnection connection, IEnumerable schemasToCreate) { var translator = connection.Driver.Translator; @@ -86,14 +119,14 @@ private static void CreateSchemas(SqlConnection connection, Catalog catalog, IEn private static void ExecuteQuery(SqlConnection connection, ISqlCompileUnit query) { - using (var command = connection.CreateCommand(query)) - command.ExecuteNonQuery(); + using var command = connection.CreateCommand(query); + _ = command.ExecuteNonQuery(); } private static void ExecuteQuery(SqlConnection connection, string query) { - using (var command = connection.CreateCommand(query)) - command.ExecuteNonQuery(); + using var command = connection.CreateCommand(query); + _ = command.ExecuteNonQuery(); } } } \ No newline at end of file diff --git a/Orm/Xtensive.Orm.Tests/Linq/ContainsTableTest.cs b/Orm/Xtensive.Orm.Tests/Linq/ContainsTableTest.cs index 45ab5f639..79ff8a9fc 100644 --- a/Orm/Xtensive.Orm.Tests/Linq/ContainsTableTest.cs +++ b/Orm/Xtensive.Orm.Tests/Linq/ContainsTableTest.cs @@ -5,13 +5,10 @@ // Created: 2016.12.09 using System; -using System.Data.Common; using System.Linq; -using System.Threading; using NUnit.Framework; using Xtensive.Core; using Xtensive.Orm.Providers; -using Xtensive.Orm.Services; using Xtensive.Orm.Tests.ObjectModel; using Xtensive.Orm.Tests.ObjectModel.ChinookDO; @@ -27,52 +24,29 @@ protected override void CheckRequirements() protected override Domain BuildDomain(Xtensive.Orm.Configuration.DomainConfiguration configuration) { var domain = base.BuildDomain(configuration); - if (StorageProviderInfo.Instance.Provider == StorageProvider.SqlServer) { - using (var session = domain.OpenSession()) - using (var tx = session.OpenTransaction()) { - var sqlAccessor = session.Services.Get(); - var timeout = DateTime.UtcNow.AddSeconds(20); - while (!CheckFtIndexesPopulated(sqlAccessor.CreateCommand()) && DateTime.UtcNow < timeout) { - Console.WriteLine("There are unpopulated FT indexes. Waiting"); - Thread.Sleep(TimeSpan.FromSeconds(2)); - } - return domain; - } - } - else { - Thread.Sleep(TimeSpan.FromSeconds(6)); - } + StorageTestHelper.WaitFullTextIndexesPopulated(domain, TimeSpan.FromSeconds(20)); return domain; - - - static bool CheckFtIndexesPopulated(DbCommand sqlCommand) - { - using (sqlCommand) { - sqlCommand.CommandText = $"SELECT COUNT(*) FROM [{WellKnownDatabases.MultiDatabase.MainDb}].sys.fulltext_indexes WHERE has_crawl_completed=0"; - return ((int) sqlCommand.ExecuteScalar()) == 0; - } - } } [Test] public void SearchByTypeWithoutFulltextIndexTest() { - Assert.Throws(() => Session.Query.ContainsTable(e => e.SimpleTerm("some text")).Run()); - Assert.Throws(() => Query.ContainsTable (e => e.SimpleTerm("some text")).Run()); + _ = Assert.Throws(() => Session.Query.ContainsTable(e => e.SimpleTerm("some text")).Run()); + _ = Assert.Throws(() => Query.ContainsTable (e => e.SimpleTerm("some text")).Run()); } [Test] public void NullSearchConditionBuilderTest() { - Assert.Throws(() => Session.Query.ContainsTable(null).Run()); - Assert.Throws(() => Query.ContainsTable(null).Run()); + _ = Assert.Throws(() => Session.Query.ContainsTable(null).Run()); + _ = Assert.Throws(() => Query.ContainsTable(null).Run()); } [Test] public void NegativeRank() { - Assert.Throws(() => Session.Query.ContainsTable(e => e.SimpleTerm("some text"), -1).Run()); - Assert.Throws(() => Query.ContainsTable(e => e.SimpleTerm("some text"), -1).Run()); + _ = Assert.Throws(() => Session.Query.ContainsTable(e => e.SimpleTerm("some text"), -1).Run()); + _ = Assert.Throws(() => Query.ContainsTable(e => e.SimpleTerm("some text"), -1).Run()); } [Test] diff --git a/Orm/Xtensive.Orm.Tests/Linq/FreeTextTest.cs b/Orm/Xtensive.Orm.Tests/Linq/FreeTextTest.cs index bdb81ddd2..bf4509658 100644 --- a/Orm/Xtensive.Orm.Tests/Linq/FreeTextTest.cs +++ b/Orm/Xtensive.Orm.Tests/Linq/FreeTextTest.cs @@ -5,13 +5,10 @@ // Created: 2009.12.14 using System; -using System.Data.Common; using System.Collections.Generic; using System.Linq; -using System.Threading; using NUnit.Framework; using Xtensive.Orm.Providers; -using Xtensive.Orm.Services; using Xtensive.Orm.Tests.ObjectModel; using Xtensive.Orm.Tests.ObjectModel.ChinookDO; @@ -27,36 +24,14 @@ protected override void CheckRequirements() protected override Domain BuildDomain(Xtensive.Orm.Configuration.DomainConfiguration configuration) { var domain = base.BuildDomain(configuration); - if (StorageProviderInfo.Instance.Provider == StorageProvider.SqlServer) { - using (var session = domain.OpenSession()) - using (var tx = session.OpenTransaction()) { - var sqlAccessor = session.Services.Get(); - var timeout = DateTime.UtcNow.AddSeconds(20); - while (!CheckFtIndexesPopulated(sqlAccessor.CreateCommand()) && DateTime.UtcNow < timeout) { - Thread.Sleep(TimeSpan.FromSeconds(2)); - } - return domain; - } - } - else { - Thread.Sleep(TimeSpan.FromSeconds(6)); - } + StorageTestHelper.WaitFullTextIndexesPopulated(domain, TimeSpan.FromSeconds(20)); return domain; - - - static bool CheckFtIndexesPopulated(DbCommand sqlCommand) - { - using (sqlCommand) { - sqlCommand.CommandText = $"SELECT COUNT(*) FROM [{WellKnownDatabases.MultiDatabase.MainDb}].sys.fulltext_indexes WHERE has_crawl_completed=0"; - return ((int) sqlCommand.ExecuteScalar()) == 0; - } - } } [Test] public void ReuseFreeText1Test() { - Assert.Throws( + _ = Assert.Throws( () => { var result1 = TakeMatchesIncorrect("black babbath back").Count(); Assert.AreEqual(3, result1); @@ -148,13 +123,13 @@ public void TopNByrankEmptyResultTest() [Test] public void NegativeTopNTest() { - Assert.Throws(() => Session.Query.FreeText("sfdgfdhghgf", -1)); + _ = Assert.Throws(() => Session.Query.FreeText("sfdgfdhghgf", -1)); } [Test] public void ZeroTopNTest() { - Assert.Throws(() => Session.Query.FreeText("sfdgfhgfhhj", 0)); + _ = Assert.Throws(() => Session.Query.FreeText("sfdgfhgfhhj", 0)); } [Test] diff --git a/Orm/Xtensive.Orm.Tests/Storage/NestedTransactionsTest.cs b/Orm/Xtensive.Orm.Tests/Storage/NestedTransactionsTest.cs index 520ec616d..baa90b1fc 100644 --- a/Orm/Xtensive.Orm.Tests/Storage/NestedTransactionsTest.cs +++ b/Orm/Xtensive.Orm.Tests/Storage/NestedTransactionsTest.cs @@ -126,8 +126,9 @@ public void WrongNestedTransactionUsageTest() outerScope.Complete(); AssertEx.ThrowsInvalidOperationException(outerScope.Dispose); } - Assert.IsNull(Session.Current.Transaction); - Assert.IsNull(StorageTestHelper.GetNativeTransaction()); + var currentSession = Session.Current; + Assert.IsNull(currentSession.Transaction); + Assert.IsNull(StorageTestHelper.GetNativeTransaction(currentSession)); } [Test] diff --git a/Orm/Xtensive.Orm.Tests/Storage/TransactionModesTest.cs b/Orm/Xtensive.Orm.Tests/Storage/TransactionModesTest.cs index bf2d8bad7..5cb11e852 100644 --- a/Orm/Xtensive.Orm.Tests/Storage/TransactionModesTest.cs +++ b/Orm/Xtensive.Orm.Tests/Storage/TransactionModesTest.cs @@ -41,15 +41,10 @@ public void DefaultTransactionsTest() track.Milliseconds++; session.SaveChanges(); Assert.IsTrue(session.Handler.TransactionIsStarted); - object dbTransaction; - using (session.Activate()) { - dbTransaction = StorageTestHelper.GetNativeTransaction(); - } + var dbTransaction = StorageTestHelper.GetNativeTransaction(session); track.Milliseconds++; session.SaveChanges(); - using (session.Activate()) { - Assert.AreSame(dbTransaction, StorageTestHelper.GetNativeTransaction()); - } + Assert.AreSame(dbTransaction, StorageTestHelper.GetNativeTransaction(session)); track.Milliseconds++; milliseconds = track.Milliseconds; trackKey = track.Key;