public void GetCachedQueryAndProcessTest() { const long queryId = 49539640000000; const string lang = "en"; var facade = new AVRFacade(m_Container); facade.InvalidateQueryCacheForLanguage(queryId, lang); //first run var receiver = new AvrCacheReceiver(facade); CachedQueryResult result; using (new StopwathTransaction("+++GetCachedQueryTable+++")) { result = receiver.GetCachedQueryTable(queryId, lang, false, string.Empty, new LayoutSilentValidatorWaiter()); } Assert.IsNotNull(result); Assert.AreEqual(m_FieldCount * 2, result.QueryTable.Columns.Count); Assert.IsTrue(1500 < result.QueryTable.Rows.Count); //second run receiver = new AvrCacheReceiver(facade); using (new StopwathTransaction("+++GetCachedQueryTable+++")) { result = receiver.GetCachedQueryTable(queryId, lang, false, string.Empty, new LayoutSilentValidatorWaiter()); } Assert.IsNotNull(result); Assert.AreEqual(m_FieldCount * 2, result.QueryTable.Columns.Count); Assert.IsTrue(1500 < result.QueryTable.Rows.Count); }
public void GetCachedQueryTwiceFailTest() { const long queryId = 49539640000000; const string lang = "en"; var facade = new AVRFacade(m_Container); facade.InvalidateQueryCacheForLanguage(queryId, lang); //first run var receiver = new AvrCacheReceiver(facade); receiver.GetCachedQueryTable(queryId, lang, false, string.Empty, new LayoutSilentValidatorWaiter()); receiver.GetCachedQueryTable(queryId, lang, false, string.Empty, new LayoutSilentValidatorWaiter()); }
public void GetCachedMultiThreadQueryTest() { using (var avrTran = new AvrDbTransaction()) { DbManager command = avrTran.Manager.SetCommand( @" delete from dbo.ViewCachePacket delete from dbo.ViewCache delete from dbo.QueryCachePacket delete from dbo.QueryCache"); command.ExecuteNonQuery(); } var facade = new AVRFacade(m_Container); //fn_AVR_HumanCaseReport Func <int, string, QueryTableHeaderDTO> createDataTable = (timeout, lang) => { Thread.Sleep(timeout); try { return(facade.GetCachedQueryTableHeader(49539640000000, lang, false)); } catch (Exception ex) { Console.WriteLine(ex); return(new QueryTableHeaderDTO()); } }; Action <int, string> invalidate = (timeout, lang) => { Thread.Sleep(timeout); try { facade.InvalidateQueryCacheForLanguage(49539640000000, lang); } catch (Exception ex) { Console.WriteLine(ex); } }; Func <QueryTableHeaderDTO> getHeader = () => { try { return(facade.GetCachedQueryTableHeader(49540070000000, "en", false)); } catch (Exception ex) { Console.WriteLine(ex); return(new QueryTableHeaderDTO()); } }; var runningTasks = new List <Task <QueryTableHeaderDTO> >(); // TODO: [ivan] make call of 100 tasks, but no more than 10 of them should run simultaneously for (int i = 0; i < 10; i++) { int tmp = i; Task.Factory.StartNew(() => invalidate(10 * tmp, "en")); runningTasks.Add(Task.Factory.StartNew(() => createDataTable(tmp, "en"))); Task.Factory.StartNew(() => invalidate(10 * tmp, "ru")); runningTasks.Add(Task.Factory.StartNew(() => createDataTable(tmp, "ru"))); Task.Factory.StartNew(getHeader); } Task.WaitAll(runningTasks.Select(t => (Task)t).ToArray()); Task <QueryTableHeaderDTO> taskEn = runningTasks[0]; Assert.IsTrue(taskEn.Result.PacketCount > 0); Assert.IsTrue(taskEn.Result.QueryCacheId > 0); Assert.IsTrue(taskEn.Result.BinaryHeader.RowCount > 0); Task <QueryTableHeaderDTO> taskRu = runningTasks[1]; Assert.IsTrue(taskRu.Result.PacketCount > 0); Assert.IsTrue(taskRu.Result.QueryCacheId > 0); Assert.IsTrue(taskRu.Result.BinaryHeader.RowCount > 0); }