Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        void ITestPool.RegisterTestWorker(ITestWorker testWorker)
        {
            if (testWorker == null)
            {
                throw new ArgumentNullException("testWorker");
            }

            _testWorkers.Add(testWorker.Name, testWorker);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
		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);

		}
Exemplo n.º 6
0
 void ITestPool.RemoveTestWorker(ITestWorker testWorker)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 7
0
        void ITestPool.RegisterTestWorker(ITestWorker testWorker)
        {
            if (testWorker == null)
                throw new ArgumentNullException("testWorker");

            _testWorkers.Add(testWorker.Name, testWorker);
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
 void ITestPool.RemoveTestWorker(ITestWorker testWorker)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        void INodeService.FinishedWork(string nodeName, TestResult testResult)
        {
            ITestWorker testWorker = _testPool.GetTestWorker(nodeName);

            HandleResult(testWorker, testResult);
        }