byte[] INodeService.FetchDLL(string nodeName, string branchName) { object branchSpecificFileLock = _testFileLocker.GetLock(nodeName); lock (branchSpecificFileLock) { using (FileStream fileStream = new FileStream(RegtestingServerConfiguration.Testsfolder + branchName + ".dll", FileMode.Open)) { byte[] buffer = new byte[52428800]; int size = fileStream.Read(buffer, 0, 52428800); byte[] bufferShort = buffer.Take(size).ToArray(); return(bufferShort); } } }
void IBuildTaskService.SendTestcaseFile(string testsystemName, byte[] data) { object _lock = _testFileLocker.GetLock(testsystemName); lock (_lock) { Testsystem testsystem = _testsystemRepository.GetByName(testsystemName); testsystem.LastUpdated = DateTime.Now; _testsystemRepository.Store(testsystem); string testFile = RegtestingServerConfiguration.Testsfolder + testsystem.Filename; Directory.CreateDirectory(Path.GetDirectoryName(testFile)); using (FileStream fileStream = new FileStream(testFile, FileMode.Create, FileAccess.Write)) { fileStream.Write(data, 0, data.Length); } Logger.Log("UPDATE branch: " + testsystemName); TestcaseProvider testcaseProvider = new TestcaseProvider(testFile); testcaseProvider.CreateAppDomain(); foreach (string testcaseType in testcaseProvider.Types) { ITestable testable = testcaseProvider.GetTestableFromTypeName(testcaseType); if (testable == null) { continue; } Testcase testcase = _testcaseRepository.GetByType(testcaseType); string testableName = testable.GetName(); if (testcase == null) { Logger.Log("New test: " + testableName); testcase = new Testcase { Name = testableName, Type = testcaseType }; _testcaseRepository.Store(testcase); } else if (!testcase.Name.Equals(testableName)) { Logger.Log("Renamed test: " + testcase.Name + " to " + testableName); testcase.Name = testableName; _testcaseRepository.Store(testcase); } } testcaseProvider.Unload(); } }
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); } }