public void ExpenseCzar_Should_Generate() { int staffid = BusinessUser.Current == null ? -1 : Convert.ToInt32(BusinessUser.Current.UserKey); staffid = BusinessUser.Current == null ? -1 : Convert.ToInt32(BusinessUser.Current.UserKey); //var isolation = IsolationLevel.ReadUncommitted; using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(1, 1, 1))) { var generationDao = DataAccessFactory.Create<GenericDao>(); TestDao testDao = new TestDao(generationDao); int queueId = new ReportGenerationQueueBuilder() .WithGenerationDao(DataAccessFactory.CreateWithSameContext<GenerationDao>(generationDao)) .WithPeriod(201101) .WithReforecastQuarterName("Q0") .WithReportId(testDao.GetReportIdByName("Andre's Unit Test01")) .Build(); AbstractReportGenerator reportGenerator = ReportGeneratorFactory.GetReportGenerator(queueId); Assert.AreEqual(reportGenerator.GetType(), typeof(ExpenseCzarReportGenerator), "expected the report to use the expense czar generator"); reportGenerator.GenerateReport(); transaction.Dispose(); } }
public void Should_Kill_Process_When_Cancelled() { var genericDao = DataAccessFactory.Create<GenericDao>(); var generationDao = DataAccessFactory.CreateWithSameContext<GenerationDao>(genericDao); int queueId = new ReportGenerationQueueBuilder() .WithGenerationDao(generationDao) .WithPeriod(201001) .WithReforecastQuarterName("Q0") .WithReportId(1092) .Build(); var controller = OutProcessControllerFactory.CreateController(); bool wasTerminated = false; controller.OnProcessStarting += (sender, args) => { args.Process.StartInfo.Arguments = string.Format("{0} -TestStatus {1} {2} {3} -Sleep 60000", args.Process.StartInfo.Arguments, queueId, ReportStatus.Processing.ToString(), "TestStatus"); }; controller.OnProcessTerminated += (sender, e) => { wasTerminated = true; }; new Thread(() => { var lastTick = DateTime.Now.Ticks; do { Thread.Sleep(500); TimeOutHelper.TimeOutCheck(lastTick, 10); } while (QueueHelper.GetQueueItem(queueId).ReportGenerationStatus != ReportStatus.Processing); StatusUpdater.UpdateStatus(queueId, ReportStatus.Cancelled); }).Start(); OutProcessMonitor.MonitorController(controller, queueId); Assert.IsTrue(wasTerminated, "Expected process to be terminated"); }
public void Should_Generate_Profitibility() { using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(1, 1, 1))) { var generationDao = DataAccessFactory.Create<GenericDao>(); TestDao testDao = new TestDao(generationDao); int queueId = new ReportGenerationQueueBuilder() .WithGenerationDao(DataAccessFactory.CreateWithSameContext<GenerationDao>(generationDao)) .WithPeriod(201101) .WithReforecastQuarterName("Q2") .WithReportId(testDao.GetReportIdByName("Andre's Profitability UnitTest01")) .Build(); AbstractReportGenerator reportGenerator = ReportGeneratorFactory.GetReportGenerator(queueId); Assert.AreEqual(reportGenerator.GetType(), typeof(ProfitabilityReportGenerator), "expected the report to use the expense czar generator"); reportGenerator.GenerateReport(); transaction.Dispose(); } }
public void Should_Generate_Output_Files_On_Test() { //var reportGenerator = new FakeReportGenerator( // new FakeReportParameter() // { // MustDeliverReportToTestLocation = false, // ReportType = ReportType.ProfitabilityReport, // ReportPeriod = 201101 // } // ); //ConfigurationManager.ConnectionStrings["GRP"].ConnectionString = @"server=TSSQL-CDTTEST3\CDT$TEST3;database=GRP_V2;Integrated Security=True"; //ConfigurationManager.ConnectionStrings["GrReporting"].ConnectionString = @"server=TSSQL-REPORTING-DWTEST\TEST;database=GrReporting;Integrated Security=true;"; //ConfigurationManager.ConnectionStrings["GACS"].ConnectionString = @"Data Source=TSSQL-CDTTEST3\CDT$TEST3;Initial Catalog=GACS;Integrated Security=true;"; ConfigurationManager.AppSettings["ExportDirectory"] = @"\\obtssql10\Reports\Generated"; ConfigurationManager.AppSettings["ExportTestDirectory"] = @"\\obtssql10\Reports\TEST\"; ConfigurationManager.AppSettings["TempFileDirectory"] = @"\\obtssql10\Reports\Temp\"; ConfigurationManager.AppSettings["TemplateDirectory"] = @"\\obtssql10\Reports\Templates\"; var genericDao = DataAccessFactory.Create<GenericDao>(); var generationDao = DataAccessFactory.CreateWithSameContext<GenerationDao>(genericDao); int queueId = new ReportGenerationQueueBuilder() .WithGenerationDao(generationDao) .WithPeriod(201001) .WithReforecastQuarterName("Q0") .WithReportId(635) .WithStaffFolderLocation() .Build(); var generator = ReportGeneratorFactory.GetReportGenerator(queueId); var generatorAccessor = new AbstractReportGenerator_Accessor(new PrivateObject(generator)); generatorAccessor.ConvertStreamToOutputFiles(new System.IO.MemoryStream()); }
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_Requeue_Failed_Reports() { // using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(1, 1, 1))) { var genericDao = DataAccessFactory.Create<GenericDao>(); var generationDao = DataAccessFactory.CreateWithSameContext<GenerationDao>(genericDao); // choose a reportid that will break int queueId = new ReportGenerationQueueBuilder() .WithGenerationDao(generationDao) .WithPeriod(201001) .WithReforecastQuarterName("Q0") .WithReportId(1092) .Build(); var controller = OutProcessControllerFactory.CreateController(); controller.OnProcessStarting += new ProcessStartingEvent(controller_OnProcessStarting); OutProcessMonitor.MonitorController(controller, queueId); ReportGenerationQueue queueItem = GetQueueItem(generationDao, queueId); Assert.AreEqual(queueItem.ReportGenerationStatus, ReportStatus.Failed, "Expected fail"); StatusUpdater.UpdateStatus(queueId, ReportStatus.Queued); OutProcessMonitor.MonitorController(controller, queueId); queueItem = GetQueueItem(generationDao, queueId); Assert.AreEqual(queueItem.ReportGenerationStatus, ReportStatus.Failed, "Expected fail"); ReportStatus statusTestValue = ReportStatus.Completed; controller.OnProcessStarting += (sender, args) => { args.Process.StartInfo.Arguments = string.Format("{0} -TestStatus {1} {2} {3}", args.Process.StartInfo.Arguments, queueId, statusTestValue.ToString(), "TestStatus"); }; StatusUpdater.UpdateStatus(queueId, ReportStatus.Queued); OutProcessMonitor.MonitorController(controller, queueId); Assert.AreEqual(GetQueueItem(generationDao, queueId).ReportGenerationStatus, ReportStatus.Completed, "Expected Completion"); } }