Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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);
            }
        }