void INodeService.Register(string node, List <string> browsers) { ITestWorker testWorker = _testPool.GetTestWorker(node); if (testWorker == null) { testWorker = new NodeTestWorker(node); _testPool.RegisterTestWorker(testWorker); } else { if (testWorker.WorkItem != null) { _testPool.ReAddWorkItem(testWorker.WorkItem); testWorker.WorkItem = null; } testWorker.Browsers.Clear(); testWorker.State = TestWorkerStatus.Ok; } foreach (string browserName in browsers) { Browser browser = _browserRepository.GetByName(browserName); if (browser == null) { Logger.Log("Node " + node + " demands " + browserName + ". But browser is not available."); continue; } testWorker.Browsers.Add(browser); } }
void ITestPool.RegisterTestWorker(ITestWorker testWorker) { if (testWorker == null) { throw new ArgumentNullException("testWorker"); } _testWorkers.Add(testWorker.Name, testWorker); }
WorkItemDto INodeService.GetWork(string nodeName) { ITestWorker testWorker = _testPool.GetTestWorker(nodeName); WorkItem workItem = _testPool.GetWorkItem(testWorker); if (workItem != null) { workItem.RunCount++; testWorker.WorkItem = workItem; testWorker.LastStart = DateTime.Now; } return(Mapper.Map <WorkItemDto>(workItem)); }
WorkItem ITestPool.GetWorkItem(ITestWorker testWorker) { lock (_lockWorkItems) { foreach (WorkItem workItem in _waitingWorkItems) { if (testWorker.Browsers.Any(t => t.ID == workItem.Browser.ID)) { //If Deployment is running, don't test on the stage! if (TfsBuildQuery.IsDeploymentRunning(workItem.Testsystem)) { continue; } _waitingWorkItems.Remove(workItem); _currentWorkItems.Add(workItem); return(workItem); } } } return(null); }
private void HandleResult(ITestWorker testWorker, TestResult testResult) { if (testWorker.WorkItem != null && (testResult.TestState == TestState.Error || testResult.TestState == TestState.ErrorRepeat) && testWorker.WorkItem.RunCount < RegtestingServerConfiguration.MaxRunCount) { _testPool.ReAddWorkItem(testWorker.WorkItem); testWorker.WorkItem = null; return; } WorkItem workItem = testWorker.WorkItem; workItem.TestState = testResult.TestState; string imagefile = null; if (!String.IsNullOrEmpty(testResult.Screenshot)) { string folder = RegtestingServerConfiguration.Screenshotsfolder; string subFolder = DateTime.Now.Year + "-" + DateTime.Now.Month + "\\"; string fileName = "screen" + Helper.GetScreenshotString() + ".png"; Directory.CreateDirectory(folder + subFolder); imagefile = subFolder + fileName; Screenshot screenshot = new Screenshot(testResult.Screenshot); screenshot.SaveAsFile(folder + imagefile, ImageFormat.Png); } Result result = _resultRepository.Get(workItem.Testsystem, workItem.Testcase, workItem.Browser, workItem.Language); result.ResultCode = testResult.TestState; result.DetailLog = CreateLog(testResult.Log); result.Error = testResult.Error; result.Testtime = DateTime.Now; result.ScreenshotFile = imagefile; if (result.ResultCode == TestState.Error || result.ResultCode == TestState.ErrorRepeat || result.ResultCode == TestState.KnownError) { if (result.ErrorCount == null) { result.ErrorCount = 1; result.ErrorSince = result.Testtime; } else { result.ErrorCount = result.ErrorCount + 1; } } else { result.ErrorSince = null; result.ErrorCount = null; } _resultRepository.Store(result); workItem.Result = result; foreach (ITestJobManager testJobManager in workItem.TestJobManagers) { HistoryResult historyResult = Mapper.Map<HistoryResult>(workItem); historyResult.DetailLog = CreateLog(testResult.Log); historyResult.ResultCode = testResult.TestState; historyResult.Error = testResult.Error; historyResult.Testtime = DateTime.Now; historyResult.TestJob = testJobManager.TestJob; historyResult.ScreenshotFile = imagefile; _historyResultRepository.Store(historyResult); } lock (TestsystemSummariesCache.Cache.GetLock(workItem.Testsystem.ID)) { TestsystemSummariesCache.Cache.Set(workItem.Testsystem.ID, null); } testWorker.WorkItem = null; _testPool.WorkItemFinished(workItem); }
void ITestPool.RemoveTestWorker(ITestWorker testWorker) { throw new NotImplementedException(); }
void ITestPool.RegisterTestWorker(ITestWorker testWorker) { if (testWorker == null) throw new ArgumentNullException("testWorker"); _testWorkers.Add(testWorker.Name, testWorker); }
WorkItem ITestPool.GetWorkItem(ITestWorker testWorker) { lock (_lockWorkItems) { foreach (WorkItem workItem in _waitingWorkItems) { if (testWorker.Browsers.Any(t=>t.ID == workItem.Browser.ID)) { //If Deployment is running, don't test on the stage! if (TfsBuildQuery.IsDeploymentRunning(workItem.Testsystem)) continue; _waitingWorkItems.Remove(workItem); _currentWorkItems.Add(workItem); return workItem; } } } return null; }
private void HandleResult(ITestWorker testWorker, TestResult testResult) { if (testWorker.WorkItem != null && (testResult.TestState == TestState.Error || testResult.TestState == TestState.ErrorRepeat) && testWorker.WorkItem.RunCount < RegtestingServerConfiguration.MaxRunCount) { _testPool.ReAddWorkItem(testWorker.WorkItem); testWorker.WorkItem = null; return; } WorkItem workItem = testWorker.WorkItem; workItem.TestState = testResult.TestState; string imagefile = null; if (!String.IsNullOrEmpty(testResult.Screenshot)) { string folder = RegtestingServerConfiguration.Screenshotsfolder; string subFolder = DateTime.Now.Year + "-" + DateTime.Now.Month + "\\"; string fileName = "screen" + Helper.GetScreenshotString() + ".png"; Directory.CreateDirectory(folder + subFolder); imagefile = subFolder + fileName; Screenshot screenshot = new Screenshot(testResult.Screenshot); screenshot.SaveAsFile(folder + imagefile, ImageFormat.Png); } Result result = _resultRepository.Get(workItem.Testsystem, workItem.Testcase, workItem.Browser, workItem.Language); result.ResultCode = testResult.TestState; result.DetailLog = CreateLog(testResult.Log); result.Error = testResult.Error; result.Testtime = DateTime.Now; result.ScreenshotFile = imagefile; if (result.ResultCode == TestState.Error || result.ResultCode == TestState.ErrorRepeat || result.ResultCode == TestState.KnownError) { if (result.ErrorCount == null) { result.ErrorCount = 1; result.ErrorSince = result.Testtime; } else { result.ErrorCount = result.ErrorCount + 1; } } else { result.ErrorSince = null; result.ErrorCount = null; } _resultRepository.Store(result); workItem.Result = result; foreach (ITestJobManager testJobManager in workItem.TestJobManagers) { HistoryResult historyResult = Mapper.Map <HistoryResult>(workItem); historyResult.DetailLog = CreateLog(testResult.Log); historyResult.ResultCode = testResult.TestState; historyResult.Error = testResult.Error; historyResult.Testtime = DateTime.Now; historyResult.TestJob = testJobManager.TestJob; historyResult.ScreenshotFile = imagefile; _historyResultRepository.Store(historyResult); } lock (TestsystemSummariesCache.Cache.GetLock(workItem.Testsystem.ID)) { TestsystemSummariesCache.Cache.Set(workItem.Testsystem.ID, null); } testWorker.WorkItem = null; _testPool.WorkItemFinished(workItem); }
void INodeService.FinishedWork(string nodeName, TestResult testResult) { ITestWorker testWorker = _testPool.GetTestWorker(nodeName); HandleResult(testWorker, testResult); }