private void CheckTestJobFinished(ITestJobManager testJobManager) { if (!testJobManager.IsFinished()) { return; } _currentTestJobManagers.Remove(testJobManager); if (testJobManager.IsCanceled) { testJobManager.TestJob.ResultCode = TestState.Canceled; } else { testJobManager.TestJob.ResultCode = (testJobManager.Passed == testJobManager.Count) ? TestState.Success : TestState.Error; } testJobManager.TestJob.FinishedAt = DateTime.Now; _testJobRepository.Store(testJobManager.TestJob); if (IsEmailNecessary(testJobManager)) { _testJobFinishedMail.Send(testJobManager); } }
void ITestPool.PrioTestJob(int testjob) { lock (_lockWorkItems) { List <WorkItem> toPriorize = new List <WorkItem>(); ITestJobManager testJobManager = _currentTestJobManagers.SingleOrDefault(t => t.ID == testjob); if (testJobManager == null) { return; } for (int waitingTasksIter = _waitingWorkItems.Count - 1; waitingTasksIter > -1; waitingTasksIter--) { WorkItem waitingWorkItem = _waitingWorkItems[waitingTasksIter]; if (!waitingWorkItem.TestJobManagers.Contains(testJobManager)) { continue; } _waitingWorkItems.Remove(waitingWorkItem); toPriorize.Add(waitingWorkItem); } _waitingWorkItems.InsertRange(0, toPriorize); _currentTestJobManagers.Remove(testJobManager); _currentTestJobManagers.Insert(0, testJobManager); } }
/// <summary> /// Fake implementation of send email. Logs on Console that no email is sent. /// </summary> /// <param name="testJobManager">A instance of a TestJobManager.</param> public void Send(ITestJobManager testJobManager) { Logger.Log("Test job finished. No success-mail send. Mailing-Service is running in test configuration."); List<Result> results = testJobManager.WorkItems.Select(t => t.Result).Where(t => t != null && t.Error != null).ToList(); List<ErrorOccurrenceGroup> errorOccurrenceGroups = ErrorGrouping.GetErrorOccurrenceGroups(results); Logger.Log(testJobManager.Passed + " passed tests. " + testJobManager.Failured + " failed tests. ErrorOccurences from GetErrorOccurrenceGroups(): " + errorOccurrenceGroups.Count); }
/// <summary> /// Fake implementation of send email. Logs on Console that no email is sent. /// </summary> /// <param name="testJobManager">A instance of a TestJobManager.</param> public void Send(ITestJobManager testJobManager) { Logger.Log("Test job finished. No success-mail send. Mailing-Service is running in test configuration."); List <Result> results = testJobManager.WorkItems.Select(t => t.Result).Where(t => t != null && t.Error != null).ToList(); List <ErrorOccurrenceGroup> errorOccurrenceGroups = ErrorGrouping.GetErrorOccurrenceGroups(results); Logger.Log(testJobManager.Passed + " passed tests. " + testJobManager.Failured + " failed tests. ErrorOccurences from GetErrorOccurrenceGroups(): " + errorOccurrenceGroups.Count); }
void ITestPool.AddTestJob(ITestJobManager testJobManager, ICollection<WorkItem> workItems) { if (testJobManager == null) throw new ArgumentNullException("testJobManager"); if (workItems.Count == 0) { return; } AddTasksDelegate addTasksToWorkItemGroup = AddTestJobImpl; addTasksToWorkItemGroup.BeginInvoke(testJobManager, workItems, null, null); }
private void CheckTestJobFinished(ITestJobManager testJobManager) { if (!testJobManager.IsFinished()) { return; } if (IsEmailNecessary(testJobManager)) { _testJobFinishedMail.Send(testJobManager); } _currentTestJobManagers.Remove(testJobManager); }
void ITestPool.AddTestJob(ITestJobManager testJobManager, ICollection <WorkItem> workItems) { if (testJobManager == null) { throw new ArgumentNullException("testJobManager"); } if (workItems.Count == 0) { return; } AddTasksDelegate addTasksToWorkItemGroup = AddTestJobImpl; addTasksToWorkItemGroup.BeginInvoke(testJobManager, workItems, null, null); }
private void CancelTestJobImpl(int testjob) { lock (_lockWorkItems) { ITestJobManager testJobManager = _currentTestJobManagers.SingleOrDefault(t => t.ID == testjob); if (testJobManager == null) { return; } testJobManager.IsCanceled = true; foreach (WorkItem workItem in testJobManager.WorkItems.Where(objWorkItem => !objWorkItem.IsCanceled && objWorkItem.TestJobManagers.All(t => t.IsCanceled))) { CancelWorkItem(workItem); } CheckTestJobFinished(testJobManager); } }
/// <summary> /// Send the mail /// </summary> void ITestJobFinishedMail.Send(ITestJobManager testJobManager) { if (testJobManager == null) throw new ArgumentNullException("testJobManager"); if (String.IsNullOrEmpty(testJobManager.TestJob.Tester.Mail)) return; List<Result> results = testJobManager.WorkItems.Select(t => t.Result).Where(t=>t!= null && t.Error!=null).ToList(); List<ErrorOccurrenceGroup> errorOccurrenceGroups = ErrorGrouping.GetErrorOccurrenceGroups(results); string backgroundcolor; string bordercolor; string resultHeaderStatus; if (testJobManager.Passed == testJobManager.Count) { backgroundcolor = "#B6DAB8"; bordercolor = "#5CB85C"; resultHeaderStatus = "succeeded"; } else { backgroundcolor = "#DF8A8A"; bordercolor = "#D9534F"; resultHeaderStatus = "failed"; } string errorOccurrences = ""; if(errorOccurrenceGroups.Count!=0) errorOccurrences += "<h3>These tests have failed:</h3>"; foreach (ErrorOccurrenceGroup errorOccurrenceGroup in errorOccurrenceGroups) { errorOccurrences += "<div><b>" + errorOccurrenceGroup.Testcase.Name + "</b><br>(" + errorOccurrenceGroup.Testcase.Type + ")<br><ul>"; foreach (ErrorOccurrence errorOccurrence in errorOccurrenceGroup.LstErrorOccurence) { errorOccurrences += "<li>" + errorOccurrence.Error.Message + " (" + errorOccurrence.LstOccurence.Count + "x)</li>"; } errorOccurrences += "</ul></div><br>"; } String subject = "UI-Tests " + resultHeaderStatus + " - " + testJobManager.TestJob.Name; String header; if (!String.IsNullOrEmpty(testJobManager.TestJob.Description)) { header = testJobManager.TestJob.Description.Replace(";", "<br>"); } else { header = testJobManager.TestJob.Name; } string url = !string.IsNullOrEmpty(RegtestingServerConfiguration.Webportal) ? "<a href=\"" + RegtestingServerConfiguration.Webportal + "?testjob=" + testJobManager.TestJob.ID + "\">Show results in browser</a>": ""; String body = "<html><body>" + "<div style=\"border-left: 10px solid;border-color: " + bordercolor +";background-color: " + backgroundcolor + ";font-size:1.2em;\">" + header + "</div>" + "<p>" + "Started by: " +testJobManager.TestJob.Tester.Name + " (" + testJobManager.TestJob.JobType + ")<br>" + "Started at: " + testJobManager.TestJob.StartedAt + "<br>" + testJobManager.Passed + " passed tests.<br>" + testJobManager.Failured + " failed tests.<br>" + url + "</p><br>" + errorOccurrences + "</body></html>"; SendMail(testJobManager.TestJob.Tester.Mail, subject, body, true); if (testJobManager.TestJob.JobType == JobType.Buildtask) { SendMail(RegtestingServerConfiguration.NotifyAutomatedTestResultsMail, subject, body, true); } }
private bool IsEmailNecessary(ITestJobManager testJobManager) { return testJobManager.Count != 0 && !testJobManager.IsCanceled && !(testJobManager.Failured == 0 && testJobManager.TestJob.JobType == JobType.Buildtask); }
/// <summary> /// Create a workItem with an initial testjob /// </summary> /// <param name="initialTestJob">the first assigned testJob</param> public WorkItem(ITestJobManager initialTestJob) : this() { AddTestJobManager(initialTestJob); }
private void AddTestJobImpl(ITestJobManager testJobManager, ICollection<WorkItem> workItems) { TestcaseProvider testcaseProvider; object branchSpecificFileLock = _testFileLocker.GetLock(testJobManager.TestJob.Testsystem.Name); lock (branchSpecificFileLock) { testcaseProvider = new TestcaseProvider(RegtestingServerConfiguration.Testsfolder + testJobManager.TestJob.Testsystem.Filename); testcaseProvider.CreateAppDomain(); } _testJobRepository.Store(testJobManager.TestJob); lock (_lockWorkItems) { List<WorkItem> alreadyFoundWorkItems = new List<WorkItem>(); List<Result> updatedResults = new List<Result>(); foreach (WorkItem workItem in workItems) { ITestable testable = GetTestable(workItem, testcaseProvider); if (testable==null) { updatedResults.Add(UpdateResultInfos(workItem, testJobManager.TestJob, TestState.NotAvailable)); continue; } if (!IsWorkItemSupported(workItem, testable)) { updatedResults.Add(UpdateResultInfos(workItem, testJobManager.TestJob, TestState.NotSupported)); continue; } WorkItem existingWorkItem = CheckForAlreadyQueyedWorkItems(workItem); if (existingWorkItem != null) { existingWorkItem.AddTestJobManager(testJobManager); alreadyFoundWorkItems.Add(existingWorkItem); } else { testJobManager.AddWorkItem(workItem); updatedResults.Add(UpdateResultInfos(workItem, testJobManager.TestJob, TestState.Pending)); } } //If there is nothing to test, don't add a testsuite if (testJobManager.Count == 0 && alreadyFoundWorkItems.Count == 0) return; _currentTestJobManagers.Add(testJobManager); //Add new workItems to waiting list testJobManager.WorkItems.ForEach(_waitingWorkItems.Add); //Add already found workItems back to alreadyFoundWorkItems.ForEach(testJobManager.AddWorkItem); _resultRepository.Store(updatedResults); } }
private void CheckTestJobFinished(ITestJobManager testJobManager) { if (!testJobManager.IsFinished()) return; _currentTestJobManagers.Remove(testJobManager); if (testJobManager.IsCanceled) { testJobManager.TestJob.ResultCode = TestState.Canceled; } else { testJobManager.TestJob.ResultCode = (testJobManager.Passed == testJobManager.Count) ? TestState.Success : TestState.Error; } testJobManager.TestJob.FinishedAt = DateTime.Now; _testJobRepository.Store(testJobManager.TestJob); if (IsEmailNecessary(testJobManager)) _testJobFinishedMail.Send(testJobManager); }
private void AddTestJobImpl(ITestJobManager testJobManager, ICollection <WorkItem> workItems) { TestcaseProvider testcaseProvider; object branchSpecificFileLock = _testFileLocker.GetLock(testJobManager.TestJob.Testsystem.Name); lock (branchSpecificFileLock) { testcaseProvider = new TestcaseProvider(RegtestingServerConfiguration.Testsfolder + testJobManager.TestJob.Testsystem.Filename); testcaseProvider.CreateAppDomain(); } _testJobRepository.Store(testJobManager.TestJob); lock (_lockWorkItems) { List <WorkItem> alreadyFoundWorkItems = new List <WorkItem>(); List <Result> updatedResults = new List <Result>(); foreach (WorkItem workItem in workItems) { ITestable testable = GetTestable(workItem, testcaseProvider); if (testable == null) { updatedResults.Add(UpdateResultInfos(workItem, testJobManager.TestJob, TestState.NotAvailable)); continue; } if (!IsWorkItemSupported(workItem, testable)) { updatedResults.Add(UpdateResultInfos(workItem, testJobManager.TestJob, TestState.NotSupported)); continue; } WorkItem existingWorkItem = CheckForAlreadyQueyedWorkItems(workItem); if (existingWorkItem != null) { existingWorkItem.AddTestJobManager(testJobManager); alreadyFoundWorkItems.Add(existingWorkItem); } else { testJobManager.AddWorkItem(workItem); updatedResults.Add(UpdateResultInfos(workItem, testJobManager.TestJob, TestState.Pending)); } } //If there is nothing to test, don't add a testsuite if (testJobManager.Count == 0 && alreadyFoundWorkItems.Count == 0) { return; } _currentTestJobManagers.Add(testJobManager); //Add new workItems to waiting list testJobManager.WorkItems.ForEach(_waitingWorkItems.Add); //Add already found workItems back to alreadyFoundWorkItems.ForEach(testJobManager.AddWorkItem); _resultRepository.Store(updatedResults); } }
/// <summary> /// Add a testJob to TestJobs list /// </summary> /// <param name="testJobManager">the testJob</param> public void AddTestJobManager(ITestJobManager testJobManager) { TestJobManagers.Add(testJobManager); }
/// <summary> /// Send the mail /// </summary> void ITestJobFinishedMail.Send(ITestJobManager testJobManager) { if (testJobManager == null) { throw new ArgumentNullException("testJobManager"); } if (String.IsNullOrEmpty(testJobManager.TestJob.Tester.Mail)) { return; } List <Result> results = testJobManager.WorkItems.Select(t => t.Result).Where(t => t != null && t.Error != null).ToList(); List <ErrorOccurrenceGroup> errorOccurrenceGroups = ErrorGrouping.GetErrorOccurrenceGroups(results); string backgroundcolor; string bordercolor; string resultHeaderStatus; if (testJobManager.Passed == testJobManager.Count) { backgroundcolor = "#B6DAB8"; bordercolor = "#5CB85C"; resultHeaderStatus = "succeeded"; } else { backgroundcolor = "#DF8A8A"; bordercolor = "#D9534F"; resultHeaderStatus = "failed"; } string errorOccurrences = ""; if (errorOccurrenceGroups.Count != 0) { errorOccurrences += "<h3>These tests have failed:</h3>"; } foreach (ErrorOccurrenceGroup errorOccurrenceGroup in errorOccurrenceGroups) { errorOccurrences += "<div><b>" + errorOccurrenceGroup.Testcase.Name + "</b><br>(" + errorOccurrenceGroup.Testcase.Type + ")<br><ul>"; foreach (ErrorOccurrence errorOccurrence in errorOccurrenceGroup.LstErrorOccurence) { errorOccurrences += "<li>" + errorOccurrence.Error.Message + " (" + errorOccurrence.LstOccurence.Count + "x)</li>"; } errorOccurrences += "</ul></div><br>"; } String subject = "UI-Tests " + resultHeaderStatus + " - " + testJobManager.TestJob.Name; String header; if (!String.IsNullOrEmpty(testJobManager.TestJob.Description)) { header = testJobManager.TestJob.Description.Replace(";", "<br>"); } else { header = testJobManager.TestJob.Name; } string url = !string.IsNullOrEmpty(RegtestingServerConfiguration.Webportal) ? "<a href=\"" + RegtestingServerConfiguration.Webportal + "?testjob=" + testJobManager.TestJob.ID + "\">Show results in browser</a>": ""; String body = "<html><body>" + "<div style=\"border-left: 10px solid;border-color: " + bordercolor + ";background-color: " + backgroundcolor + ";font-size:1.2em;\">" + header + "</div>" + "<p>" + "Started by: " + testJobManager.TestJob.Tester.Name + " (" + testJobManager.TestJob.JobType + ")<br>" + "Started at: " + testJobManager.TestJob.StartedAt + "<br>" + testJobManager.Passed + " passed tests.<br>" + testJobManager.Failured + " failed tests.<br>" + url + "</p><br>" + errorOccurrences + "</body></html>"; SendMail(testJobManager.TestJob.Tester.Mail, subject, body, true); if (testJobManager.TestJob.JobType == JobType.Buildtask) { SendMail(RegtestingServerConfiguration.NotifyAutomatedTestResultsMail, subject, body, true); } }
private bool IsEmailNecessary(ITestJobManager testJobManager) { return(testJobManager.Count != 0 && !testJobManager.IsCanceled && !(testJobManager.Failured == 0 && testJobManager.TestJob.JobType == JobType.Buildtask)); }
/// <summary> /// Send the mail /// </summary> void ITestJobFinishedMail.Send(ITestJobManager testJobManager) { if (testJobManager == null) { throw new ArgumentNullException("testJobManager"); } if (String.IsNullOrEmpty(testJobManager.TestJob.Tester.Mail)) { return; } List <Result> results = testJobManager.WorkItems.Select(t => t.Result).Where(t => t != null && t.Error != null).ToList(); List <ErrorOccurrenceGroup> errorOccurrenceGroups = ErrorGrouping.GetErrorOccurrenceGroups(results); int percent = (100 * testJobManager.Passed) / (testJobManager.Count); string color; string resultHeader; if (testJobManager.Passed == testJobManager.Count) { color = "#5cb85c"; resultHeader = "Success"; } else { color = "#d9534f"; resultHeader = "Failed"; } string errorOccurrences = ""; if (errorOccurrenceGroups.Count != 0) { errorOccurrences += "<h3>These tests have failed:</h3>"; } foreach (ErrorOccurrenceGroup errorOccurrenceGroup in errorOccurrenceGroups) { errorOccurrences += "<div><b>" + errorOccurrenceGroup.Testcase.Name + "</b><br>(" + errorOccurrenceGroup.Testcase.Type + ")<br><ul>"; foreach (ErrorOccurrence errorOccurrence in errorOccurrenceGroup.LstErrorOccurence) { errorOccurrences += "<li>" + errorOccurrence.Error.Message + " (" + errorOccurrence.LstOccurence.Count + "x)</li>"; } errorOccurrences += "</ul></div><br>"; } String subject = testJobManager.TestJob.Testsystem.Name + ", " + testJobManager.TestJob.Name + ": " + percent + "%"; string url = !string.IsNullOrEmpty(RegtestingServerConfiguration.Webportal) ? "<a href=\"" + RegtestingServerConfiguration.Webportal + "/testing?testsuite=" + testJobManager.TestJob.Testsuite.ID + "&testsystem=" + testJobManager.TestJob.Testsystem.ID + "\">Show results page in browser</a>": ""; String body = "<html><body>" + "<div style=\"background-color:" + color + " ;padding:20px;font-size:1.7em;text-align:center;color:#ffffff;\"><b>" + testJobManager.TestJob.Testsystem.Name + "</b> - " + testJobManager.TestJob.Name + ": <b>" + resultHeader + "</b></div>" + "<p>" + "Started by: " + testJobManager.TestJob.Tester.Name + " (" + testJobManager.TestJob.JobType + ")<br>" + "Started at: " + testJobManager.TestJob.StartedAt + "<br>" + testJobManager.Passed + " passed tests.<br>" + testJobManager.Failured + " failed tests.<br>" + url + "</p><br>" + errorOccurrences + "</body></html>"; SendMail(testJobManager.TestJob.Tester.Mail, subject, body, true); if (testJobManager.TestJob.JobType == JobType.Buildtask) { SendMail(RegtestingServerConfiguration.NotifyAutomatedTestResultsMail, subject, body, true); } }