/// <summary> /// Creates this instance. /// </summary> /// <returns></returns> public static OutOfProcessReportGenerationController Create() { var settingsProvider = new AppSettingsProvider(); var controller = new OutOfProcessReportGenerationController( new OutOfProcessConfiguration(settingsProvider), new DefaultProcessFactory(), //new ReportQueueStatusWCFService()); moony new ReportQueueStatusDBService()); return controller; }
public void Should_Parrallelize_And_HandleStatusses() { //using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(1, 1, 1))) { //var memoryContext = new MemoryDataContext(); var genericDao = DataAccessFactory.Create<GenericDao>(); var generationDao = DataAccessFactory.CreateWithSameContext<GenerationDao>(genericDao); // we dont care what the real parameters are here, cause we are just doing status checks. var idList = new List<int>(); for (int i = 1; i <= 10; i++) { int queueId = new ReportGenerationQueueBuilder() .WithGenerationDao(generationDao) .WithPeriod(201001) .WithReforecastQuarterName("Q0") .WithReportId(1092) .Build(); idList.Add(queueId); } var configurationProvider = new AppSettingsProvider(); var configuration = new OutOfProcessConfiguration(configurationProvider); configurationProvider.AppSettings["ParallelProcessCount"] = "10"; configurationProvider.AppSettings["TerminationSleepInterval"] = "0"; var controller = OutProcessControllerFactory.CreateController(configuration); //controller.ParallelProcessCount = 10; int activeProcesses = 0; ReportStatus statusTestValue = ReportStatus.Failed; controller.OnProcessStarting += (sender, args) => { args.Process.StartInfo.Arguments = string.Format("{0} -TestStatus {1} {2} {3} -Sleep 5000", args.Process.StartInfo.Arguments, args.Process.ReportGenerationQueueId, statusTestValue.ToString(), "TestStatus"); }; controller.OnProcessStarted += (sender, args) => { activeProcesses++; }; controller.OnProcessTerminating += (sender, args) => { }; controller.OnProcessTerminated += (sender, args) => { activeProcesses--; Assert.AreEqual(GetQueueItem(generationDao, args.Process.ReportGenerationQueueId).ReportGenerationStatus, statusTestValue, "Expected: " + statusTestValue.ToString()); }; new Thread(() => { var statusses = new List<ReportStatus>(); statusses.Add(ReportStatus.Completed); statusses.Add(ReportStatus.Cancelled); foreach (var status in statusses) { var lastTick = DateTime.Now.Ticks; while (activeProcesses < 10) { TimeOutHelper.TimeOutCheck(lastTick, 60000); Thread.Sleep(100); } lastTick = DateTime.Now.Ticks; while (activeProcesses > 0) { TimeOutHelper.TimeOutCheck(lastTick, 60000); Thread.Sleep(100); } statusTestValue = status; foreach (var id in idList) { StatusUpdater.UpdateStatus(id, ReportStatus.Queued); } } controller.RunProcess = false; }).Start(); controller.Run(); foreach (var id in idList) { StatusUpdater.UpdateStatus(id, ReportStatus.Completed); } } }
public void Should_StartupWithInvalidConfig() { var provider = new AppSettingsProvider(); provider.AppSettings["TemplateDirectory"] = null; var controller = OutProcessControllerFactory.CreateController(provider); }