Ejemplo n.º 1
0
        public void TestMethod1()
        {
            Mock <CalculationsSingl> mockICalculationsSingl = new Mock <CalculationsSingl>(); //очередь на вычисление

            //Дождёмся пока загрузится Current из файла (в параллельном потоке)
            while (true)
            {
                Thread.Sleep(1);
                if (mockICalculationsSingl.Object.IsCurrentUploaded)
                {
                    break;
                }
            }

            Mock <WriteQueueSingl> mockIWriteQueueSingl = new Mock <WriteQueueSingl>();                              //очередь на запись

            CalcScheduler scheduler = new CalcScheduler(mockICalculationsSingl.Object, mockIWriteQueueSingl.Object); //Шедулер вычисляющий и записывающий (в параллельных потоках)

            scheduler.StartAsync(new CancellationToken());                                                           //Шедулер запустим сразу

            var implement = new GeneralControllerImpl(mockICalculationsSingl.Object);
            GeneralController controller = new GeneralController(null, implement);

            var getActionResult = controller.Get(); //Запросим Current, Total
            var getResult       = getActionResult.Result as OkObjectResult;

            //Пока не знаем какой он: какое-то значение из файла (либо 0 если в файл раньше ничего не записывали).
            //Проверим StatusCode
            Assert.IsTrue(getResult.StatusCode == 200);

            //Отправим несколько запросов, 17шт:
            controller.PostCalc(new Action_Data()
            {
                Action = "*", Data = 0
            });                                                                //Current из файла умножим на 0, получим 0
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 200
            });                                                                  //200
            controller.PostCalc(new Action_Data()
            {
                Action = "/", Data = 20
            });                                                                 //10
            controller.PostCalc(new Action_Data()
            {
                Action = "*", Data = 20
            });                                                                 //200
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //201
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //202
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //203
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //204
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //205
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //206
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //207
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //208
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //209
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 1
            });                                                                //210
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 10.789
            });                                                                     //220.789
            controller.PostCalc(new Action_Data()
            {
                Action = "-", Data = 10
            });                                                                 //210.789
            controller.PostCalc(new Action_Data()
            {
                Action = "+", Data = 0
            });                                                                //210.789
            mockIWriteQueueSingl.Object.FilesShouldReload = true;
            //Дождёмся пока шедулер всё досчитает
            //ради интереса посмотрим, долго ли будет считать.
            int step = 0;

            while (true)
            {
                Thread.Sleep(1);
                step++;
                if (mockIWriteQueueSingl.Object.FilesShouldReload == false)
                {
                    break;
                }
            }
            getActionResult = controller.Get();
            getResult       = getActionResult.Result as OkObjectResult;

            Assert.AreEqual(210.789, ((Action_Data_Total)getResult.Value).Total);
            Assert.AreEqual(0, ((Action_Data_Total)getResult.Value).Data);
            Assert.AreEqual("+", ((Action_Data_Total)getResult.Value).Action);

            Console.WriteLine("Столько ждали шедулер " + step);//столько ждали шедулер
        }