Пример #1
0
        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);
        }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }