Ejemplo n.º 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        public MockHost(BuildParameters buildParameters)
        {
            _buildParameters = buildParameters;

            _buildParameters.ProjectRootElementCache = new ProjectRootElementCache(false);

            _configCache = new ConfigCache();
            ((IBuildComponent)_configCache).InitializeComponent(this);

            // We are a logging service
            _loggingService = this;

            _legacyThreadingData = new LegacyThreadingData();

            _requestEngine = new BuildRequestEngine();
            ((IBuildComponent)_requestEngine).InitializeComponent(this);

            _resultsCache = new ResultsCache();
            ((IBuildComponent)_resultsCache).InitializeComponent(this);

            _requestBuilder = new Microsoft.Build.UnitTests.BackEnd.BuildRequestEngine_Tests.MockRequestBuilder();
            ((IBuildComponent)_requestBuilder).InitializeComponent(this);

            _targetBuilder = new TestTargetBuilder();
            ((IBuildComponent)_targetBuilder).InitializeComponent(this);
        }
Ejemplo n.º 2
0
        public void TestSimpleBuildRequest()
        {
            BuildRequestConfiguration configuration = CreateTestProject(1);

            try
            {
                TestTargetBuilder targetBuilder = (TestTargetBuilder)_host.GetComponent(BuildComponentType.TargetBuilder);
                IConfigCache      configCache   = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache);

                configCache.AddConfiguration(configuration);

                BuildRequest request = CreateNewBuildRequest(1, new string[1] {
                    "target1"
                });
                BuildRequestEntry entry  = new BuildRequestEntry(request, configuration);
                BuildResult       result = new BuildResult(request);
                result.AddResultsForTarget("target1", GetEmptySuccessfulTargetResult());
                targetBuilder.SetResultsToReturn(result);

                _requestBuilder.BuildRequest(GetNodeLoggingContext(), entry);

                WaitForEvent(_buildRequestCompletedEvent, "Build Request Completed");
                Assert.Equal(BuildRequestEntryState.Complete, entry.State);
                Assert.Equal(entry, _buildRequestCompleted_Entry);
                Assert.Equal(BuildResultCode.Success, _buildRequestCompleted_Entry.Result.OverallResult);
            }
            finally
            {
                DeleteTestProject(configuration);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Cleanup
        /// </summary>
        public void ShutdownComponent()
        {
            // If the processor thread is still there then signal it to go away
            // Wait for QAMockHost.globalTimeOut seconds for the thread to go away or complete. If not then abort it.
            if (!this.processorThreadExited)
            {
                this.processorThreadExit.Set();
                if (!this.processorThread.Join(QAMockHost.globalTimeOut))
                {
                    this.processorThread.Abort();
                }

                this.processorThread = null;
            }

            // dispose all the definition object here.
            foreach (RequestDefinition definition in this.definitions.Values)
            {
                definition.Dispose();
            }

            this.definitions.Clear();
            this.newResults.Clear();
            this.newRequests.Clear();
            this.newConfigurations.Clear();
            this.newRequests        = null;
            this.newResults         = null;
            this.newConfigurations  = null;
            this.configurationCache = null;
            this.resultsCache       = null;
        }
Ejemplo n.º 4
0
        public void IfCacheSpecified_WillUseCachedValueIfPresent()
        {
            IConfigCache configCache = MockRepository.GenerateStub <IConfigCache>();

            configCache.Stub(x => x.GetCachedValue("MyCachedConfigKey")).Return("MyCachedConfigValue");
            CacheableConfigController sut = new CacheableConfigController();

            sut.Cache = configCache;

            Queue <string> priority = new Queue <string>();

            priority.Enqueue("FirstPlane");


            sut.Priority = priority;

            sut.UpsertDefaultConfigValue("FirstPlane", "ConfigKey", "ConfigValue");
            Dictionary <string, string> context = new Dictionary <string, string>();

            context.Add("FirstPlane", "MyConfigContext");
            sut.SearchContext = context;

            sut.GetConfigValue("ConfigKey");
            string result = sut.GetConfigValue("MyCachedConfigKey");

            Assert.That(result.Equals("MyCachedConfigValue", StringComparison.InvariantCulture));
        }
Ejemplo n.º 5
0
        public void GetCache_ReturnCurrentCache()
        {
            IConfigCache configCache = MockRepository.GenerateStub <IConfigCache>();

            configCache.Stub(x => x.GetCachedValue("MyCachedConfigKey")).Return("MyCachedConfigValue");
            CacheableConfigController sut = new CacheableConfigController();

            sut.Cache = configCache;

            Queue <string> priority = new Queue <string>();

            priority.Enqueue("FirstPlane");


            sut.Priority = priority;

            sut.UpsertDefaultConfigValue("FirstPlane", "ConfigKey", "ConfigValue");
            Dictionary <string, string> context = new Dictionary <string, string>();

            context.Add("FirstPlane", "MyConfigContext");
            sut.SearchContext = context;

            sut.GetConfigValue("ConfigKey");
            string       result = sut.GetConfigValue("MyCachedConfigKey");
            IConfigCache cache  = sut.Cache;

            Assert.IsNotNull(cache);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// The component is being initialized
 /// </summary>
 public void InitializeComponent(IBuildComponentHost host)
 {
     _host             = host;
     _resultsCache     = (IResultsCache)(_host.GetComponent(BuildComponentType.ResultsCache));
     _configCache      = (IConfigCache)(_host.GetComponent(BuildComponentType.ConfigCache));
     _testDataProvider = (ITestDataProvider)(_host.GetComponent(BuildComponentType.TestDataProvider));
 }
Ejemplo n.º 7
0
 public CacheConfigManager(
     IConfigManager innerManager,
     IConfigCache cache)
 {
     this.configManager = innerManager ?? throw new ArgumentNullException(nameof(innerManager));
     this.cache         = cache;
 }
Ejemplo n.º 8
0
        private void CleanupCaches()
        {
            IConfigCache configCache = _componentFactories.GetComponent(BuildComponentType.ConfigCache) as IConfigCache;

            if (null != configCache)
            {
                configCache.ClearConfigurations();
            }

            IResultsCache resultsCache = _componentFactories.GetComponent(BuildComponentType.ResultsCache) as IResultsCache;

            if (null != resultsCache)
            {
                resultsCache.ClearResults();
            }

            if (Environment.GetEnvironmentVariable("MSBUILDCLEARXMLCACHEONCHILDNODES") == "1")
            {
                // Optionally clear out the cache. This has the advantage of releasing memory,
                // but the disadvantage of causing the next build to repeat the load and parse.
                // We'll experiment here and ship with the best default.
                s_projectRootElementCache = null;
            }

            // Since we aren't going to be doing any more work, lets clean up all our memory usage.
            GC.Collect();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Constructor
        /// </summary>
        public MockHost(BuildParameters buildParameters)
        {
            _buildParameters = buildParameters;

            _buildParameters.ProjectRootElementCache = new ProjectRootElementCache(false);

            _configCache = new ConfigCache();
            ((IBuildComponent)_configCache).InitializeComponent(this);

            // We are a logging service
            _loggingService = this;

            _legacyThreadingData = new LegacyThreadingData();

            _requestEngine = new BuildRequestEngine();
            ((IBuildComponent)_requestEngine).InitializeComponent(this);

            _resultsCache = new ResultsCache();
            ((IBuildComponent)_resultsCache).InitializeComponent(this);

            _requestBuilder = new Microsoft.Build.UnitTests.BackEnd.BuildRequestEngine_Tests.MockRequestBuilder();
            ((IBuildComponent)_requestBuilder).InitializeComponent(this);

            _targetBuilder = new TestTargetBuilder();
            ((IBuildComponent)_targetBuilder).InitializeComponent(this);
        }
Ejemplo n.º 10
0
 /// <summary>
 /// The component is being initialized
 /// </summary>
 public void InitializeComponent(IBuildComponentHost host)
 {
     this.host             = host;
     this.resultsCache     = (IResultsCache)(this.host.GetComponent(BuildComponentType.ResultsCache));
     this.configCache      = (IConfigCache)(this.host.GetComponent(BuildComponentType.ConfigCache));
     this.testDataProvider = (ITestDataProvider)(this.host.GetComponent(BuildComponentType.TestDataProvider));
 }
Ejemplo n.º 11
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public OutOfProcNode(
#if !FEATURE_NAMED_PIPES_FULL_DUPLEX
            string clientToServerPipeHandle,
            string serverToClientPipeHandle
#endif
            )
        {
            s_isOutOfProcNode = true;

#if FEATURE_APPDOMAIN_UNHANDLED_EXCEPTION
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ExceptionHandling.UnhandledExceptionHandler);
#endif

#if !FEATURE_NAMED_PIPES_FULL_DUPLEX
            _clientToServerPipeHandle = clientToServerPipeHandle;
            _serverToClientPipeHandle = serverToClientPipeHandle;
#endif

            _debugCommunications = (Environment.GetEnvironmentVariable("MSBUILDDEBUGCOMM") == "1");

            _receivedPackets     = new ConcurrentQueue <INodePacket>();
            _packetReceivedEvent = new AutoResetEvent(false);
            _shutdownEvent       = new ManualResetEvent(false);
            _legacyThreadingData = new LegacyThreadingData();

            _componentFactories = new BuildComponentFactoryCollection(this);
            _componentFactories.RegisterDefaultFactories();
            _packetFactory = new NodePacketFactory();

            _buildRequestEngine  = (this as IBuildComponentHost).GetComponent(BuildComponentType.RequestEngine) as IBuildRequestEngine;
            _globalConfigCache   = (this as IBuildComponentHost).GetComponent(BuildComponentType.ConfigCache) as IConfigCache;
            _taskHostNodeManager = (this as IBuildComponentHost).GetComponent(BuildComponentType.TaskHostNodeManager) as INodeManager;

            // Create a factory for the out-of-proc SDK resolver service which can pass our SendPacket delegate to be used for sending packets to the main node
            OutOfProcNodeSdkResolverServiceFactory sdkResolverServiceFactory = new OutOfProcNodeSdkResolverServiceFactory(SendPacket);

            ((IBuildComponentHost)this).RegisterFactory(BuildComponentType.SdkResolverService, sdkResolverServiceFactory.CreateInstance);

            _sdkResolverService = (this as IBuildComponentHost).GetComponent(BuildComponentType.SdkResolverService) as ISdkResolverService;

            if (s_projectRootElementCache == null)
            {
                s_projectRootElementCache = new ProjectRootElementCache(true /* automatically reload any changes from disk */);
            }

            _buildRequestEngine.OnEngineException         += new EngineExceptionDelegate(OnEngineException);
            _buildRequestEngine.OnNewConfigurationRequest += new NewConfigurationRequestDelegate(OnNewConfigurationRequest);
            _buildRequestEngine.OnRequestBlocked          += new RequestBlockedDelegate(OnNewRequest);
            _buildRequestEngine.OnRequestComplete         += new RequestCompleteDelegate(OnRequestComplete);

            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequest, BuildRequest.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfiguration, BuildRequestConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfigurationResponse, BuildRequestConfigurationResponse.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestUnblocker, BuildRequestUnblocker.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeConfiguration, NodeConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeBuildComplete, NodeBuildComplete.FactoryForDeserialization, this);

            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.ResolveSdkResponse, SdkResolverResponse.FactoryForDeserialization, _sdkResolverService as INodePacketHandler);
        }
Ejemplo n.º 12
0
        protected ConfigServiceBase(IConfigFetcher configFetcher, IConfigCache configCache, ILogger log)
        {
            this.configFetcher = configFetcher;

            this.configCache = configCache;

            this.log = log;
        }
Ejemplo n.º 13
0
 internal AutoPollConfigService(
     IConfigFetcher configFetcher,
     IConfigCache configCache,
     TimeSpan pollingInterval,
     TimeSpan maxInitWaitTime,
     ILoggerFactory loggerFactory) : this(configFetcher, configCache, pollingInterval, maxInitWaitTime, loggerFactory, true)
 {
 }
Ejemplo n.º 14
0
        protected ConfigServiceBase(IConfigFetcher configFetcher, CacheParameters cacheParameters, ILogger log)
        {
            this.configFetcher = configFetcher;

            this.configCache = cacheParameters.ConfigCache;

            this.cacheKey = cacheParameters.CacheKey;

            this.log = log;
        }
Ejemplo n.º 15
0
        internal AutoPollConfigService(
            IConfigFetcher configFetcher,
            IConfigCache configCache,
            TimeSpan pollingInterval,
            TimeSpan maxInitWaitTime,
            ILoggerFactory loggerFactory) : base(configFetcher, configCache, loggerFactory.GetLogger(nameof(AutoPollConfigService)))
        {
            this.timer = new Timer(RefreshLogic, "auto", TimeSpan.Zero, pollingInterval);

            this.maxInitWaitExpire = DateTime.UtcNow.Add(maxInitWaitTime);
        }
Ejemplo n.º 16
0
 /// <summary>
 /// Constructor that takes in nothing.
 /// </summary>
 public QARequestBuilder()
 {
     _host = null;
     _configCache = null;
     _resultsCache = null;
     _builderThread = null;
     _requestedEntry = null;
     _cancelEvent = new AutoResetEvent(false);
     _continueEvent = new AutoResetEvent(false);
     _threadStarted = new ManualResetEvent(false);
     _currentProjectDefinition = null;
 }
Ejemplo n.º 17
0
 /// <summary>
 /// Constructor that takes in nothing.
 /// </summary>
 public QARequestBuilder()
 {
     this.host                     = null;
     this.configCache              = null;
     this.resultsCache             = null;
     this.builderThread            = null;
     this.requestedEntry           = null;
     this.cancelEvent              = new AutoResetEvent(false);
     this.continueEvent            = new AutoResetEvent(false);
     this.threadStarted            = new ManualResetEvent(false);
     this.currentProjectDefinition = null;
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Creates a new BuildRequestDefinition cache.
 /// </summary>
 public TestDataProvider()
 {
     this.definitions        = new Dictionary <int, RequestDefinition>();
     this.configurationCache = null;
     this.key = 2;
     this.newConfigurations     = new Queue <BuildRequestConfiguration>();
     this.newRequests           = new Queue <BuildRequest>();
     this.newResults            = new Queue <ResultFromEngine>();
     this.engineException       = null;
     this.processorThreadResume = new AutoResetEvent(false);
     this.processorThreadExit   = new AutoResetEvent(false);
     this.processorThreadExited = false;
     this.processorThread       = new Thread(ProcessorThreadProc);
     this.processorThread.Name  = "Test Data provider processor thread";
     this.processorThread.Start();
 }
Ejemplo n.º 19
0
        public void TestRequestWithReferenceCancelled()
        {
            BuildRequestConfiguration configuration = CreateTestProject(1);

            try
            {
                TestTargetBuilder            targetBuilder = (TestTargetBuilder)_host.GetComponent(BuildComponentType.TargetBuilder);
                IConfigCache                 configCache   = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache);
                FullyQualifiedBuildRequest[] newRequest    = new FullyQualifiedBuildRequest[1] {
                    new FullyQualifiedBuildRequest(configuration, new string[1] {
                        "testTarget2"
                    }, true)
                };
                targetBuilder.SetNewBuildRequests(newRequest);
                configCache.AddConfiguration(configuration);

                BuildRequest request = CreateNewBuildRequest(1, new string[1] {
                    "target1"
                });
                BuildRequestEntry entry  = new BuildRequestEntry(request, configuration);
                BuildResult       result = new BuildResult(request);
                result.AddResultsForTarget("target1", GetEmptySuccessfulTargetResult());
                targetBuilder.SetResultsToReturn(result);

                _requestBuilder.BuildRequest(GetNodeLoggingContext(), entry);
                WaitForEvent(_newBuildRequestsEvent, "New Build Requests");
                Assert.Equal(_newBuildRequests_Entry, entry);
                ObjectModelHelpers.AssertArrayContentsMatch(_newBuildRequests_FQRequests, newRequest);

                BuildResult newResult = new BuildResult(_newBuildRequests_BuildRequests[0]);
                newResult.AddResultsForTarget("testTarget2", GetEmptySuccessfulTargetResult());
                entry.ReportResult(newResult);

                _requestBuilder.ContinueRequest();
                Thread.Sleep(500);
                _requestBuilder.CancelRequest();

                WaitForEvent(_buildRequestCompletedEvent, "Build Request Completed");
                Assert.Equal(BuildRequestEntryState.Complete, entry.State);
                Assert.Equal(entry, _buildRequestCompleted_Entry);
                Assert.Equal(BuildResultCode.Failure, _buildRequestCompleted_Entry.Result.OverallResult);
            }
            finally
            {
                DeleteTestProject(configuration);
            }
        }
Ejemplo n.º 20
0
        public void IfCacheSpecified_ChangingContextClearsCache()
        {
            IConfigCache configCache      = MockRepository.GenerateStub <IConfigCache>();
            CacheableConfigController sut = new CacheableConfigController();

            sut.Cache = configCache;

            Queue <string> priority = new Queue <string>();

            priority.Enqueue("FirstPlane");

            configCache.AssertWasNotCalled(x => x.ClearCache());

            sut.SetContext(new Dictionary <string, string>());

            configCache.AssertWasCalled(x => x.ClearCache());
        }
Ejemplo n.º 21
0
        public void IfCacheSpecified_UpsertingConfigValueClearsCache()
        {
            IConfigCache configCache      = MockRepository.GenerateStub <IConfigCache>();
            CacheableConfigController sut = new CacheableConfigController();

            sut.Cache = configCache;

            Queue <string> priority = new Queue <string>();

            priority.Enqueue("FirstPlane");

            configCache.AssertWasNotCalled(x => x.ClearCache());

            sut.UpsertDefaultConfigValue("FirstPlane", "ConfigKey", "ConfigValue");

            configCache.AssertWasCalled(x => x.ClearCache());
        }
Ejemplo n.º 22
0
        public BuildRequestEngine_Tests()
        {
            _host                     = new MockHost();
            _nodeRequestId            = 1;
            _globalRequestId          = 1;
            _engineStatusChangedEvent = new AutoResetEvent(false);
            _requestCompleteEvent     = new AutoResetEvent(false);
            _requestResumedEvent      = new AutoResetEvent(false);
            _newRequestEvent          = new AutoResetEvent(false);
            _newConfigurationEvent    = new AutoResetEvent(false);
            _engineExceptionEvent     = new AutoResetEvent(false);

            _engine = (IBuildRequestEngine)_host.GetComponent(BuildComponentType.RequestEngine);
            _cache  = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache);

            ConfigureEngine(_engine);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public OutOfProcNode()
        {
            s_isOutOfProcNode = true;

            _debugCommunications = (Environment.GetEnvironmentVariable("MSBUILDDEBUGCOMM") == "1");

            _receivedPackets     = new ConcurrentQueue <INodePacket>();
            _packetReceivedEvent = new AutoResetEvent(false);
            _shutdownEvent       = new ManualResetEvent(false);
            _legacyThreadingData = new LegacyThreadingData();

            _componentFactories = new BuildComponentFactoryCollection(this);
            _componentFactories.RegisterDefaultFactories();
            _packetFactory = new NodePacketFactory();

            _buildRequestEngine  = (this as IBuildComponentHost).GetComponent(BuildComponentType.RequestEngine) as IBuildRequestEngine;
            _globalConfigCache   = (this as IBuildComponentHost).GetComponent(BuildComponentType.ConfigCache) as IConfigCache;
            _taskHostNodeManager = (this as IBuildComponentHost).GetComponent(BuildComponentType.TaskHostNodeManager) as INodeManager;

            // Create a factory for the out-of-proc SDK resolver service which can pass our SendPacket delegate to be used for sending packets to the main node
            OutOfProcNodeSdkResolverServiceFactory sdkResolverServiceFactory = new OutOfProcNodeSdkResolverServiceFactory(SendPacket);

            ((IBuildComponentHost)this).RegisterFactory(BuildComponentType.SdkResolverService, sdkResolverServiceFactory.CreateInstance);

            _sdkResolverService = (this as IBuildComponentHost).GetComponent(BuildComponentType.SdkResolverService) as ISdkResolverService;

            if (s_projectRootElementCacheBase == null)
            {
                s_projectRootElementCacheBase = new ProjectRootElementCache(true /* automatically reload any changes from disk */);
            }

            _buildRequestEngine.OnEngineException         += OnEngineException;
            _buildRequestEngine.OnNewConfigurationRequest += OnNewConfigurationRequest;
            _buildRequestEngine.OnRequestBlocked          += OnNewRequest;
            _buildRequestEngine.OnRequestComplete         += OnRequestComplete;
            _buildRequestEngine.OnResourceRequest         += OnResourceRequest;

            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequest, BuildRequest.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfiguration, BuildRequestConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfigurationResponse, BuildRequestConfigurationResponse.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestUnblocker, BuildRequestUnblocker.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeConfiguration, NodeConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeBuildComplete, NodeBuildComplete.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.ResourceResponse, ResourceResponse.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.ResolveSdkResponse, SdkResult.FactoryForDeserialization, _sdkResolverService as INodePacketHandler);
        }
Ejemplo n.º 24
0
        private void NewBuildRequestsCallback(BuildRequestEntry entry, FullyQualifiedBuildRequest[] requests)
        {
            _newBuildRequests_FQRequests    = requests;
            _newBuildRequests_BuildRequests = new BuildRequest[requests.Length];
            _newBuildRequests_Entry         = entry;

            int index = 0;

            foreach (FullyQualifiedBuildRequest request in requests)
            {
                IConfigCache configCache = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache);
                BuildRequestConfiguration matchingConfig = configCache.GetMatchingConfiguration(request.Config);
                BuildRequest newRequest = CreateNewBuildRequest(matchingConfig.ConfigurationId, request.Targets);

                entry.WaitForResult(newRequest);
                _newBuildRequests_BuildRequests[index++] = newRequest;
            }
            _newBuildRequestsEvent.Set();
        }
Ejemplo n.º 25
0
        public void TestMissingProjectFile()
        {
            TestTargetBuilder         targetBuilder = (TestTargetBuilder)_host.GetComponent(BuildComponentType.TargetBuilder);
            IConfigCache              configCache   = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache);
            BuildRequestConfiguration configuration = new BuildRequestConfiguration(1, new BuildRequestData("testName", new Dictionary <string, string>(), "3.5", Array.Empty <string>(), null), "2.0");

            configCache.AddConfiguration(configuration);

            BuildRequest request = CreateNewBuildRequest(1, new string[1] {
                "target1"
            });
            BuildRequestEntry entry = new BuildRequestEntry(request, configuration);

            _requestBuilder.BuildRequest(GetNodeLoggingContext(), entry);
            WaitForEvent(_buildRequestCompletedEvent, "Build Request Completed");
            Assert.Equal(BuildRequestEntryState.Complete, entry.State);
            Assert.Equal(entry, _buildRequestCompleted_Entry);
            Assert.Equal(BuildResultCode.Failure, _buildRequestCompleted_Entry.Result.OverallResult);
            Assert.Equal(typeof(InvalidProjectFileException), _buildRequestCompleted_Entry.Result.Exception.GetType());
        }
Ejemplo n.º 26
0
            /// <summary>
            /// Constructor
            ///
            /// UNDONE: Refactor this, and the other MockHosts, to use a common base implementation.  The duplication of the
            /// logging implementation alone is unfortunate.
            /// </summary>
            public MockHost()
            {
                _buildParameters     = new BuildParameters();
                _legacyThreadingData = new LegacyThreadingData();

                _configCache = new ConfigCache();
                ((IBuildComponent)_configCache).InitializeComponent(this);

                _loggingService = this;

                _resultsCache = new ResultsCache();
                ((IBuildComponent)_resultsCache).InitializeComponent(this);

                _requestBuilder = new RequestBuilder();
                ((IBuildComponent)_requestBuilder).InitializeComponent(this);

                _targetBuilder = new TargetBuilder();
                ((IBuildComponent)_targetBuilder).InitializeComponent(this);

                _sdkResolverService = new MockSdkResolverService();
                ((IBuildComponent)_sdkResolverService).InitializeComponent(this);
            }
Ejemplo n.º 27
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public OutOfProcNode()
        {
            s_isOutOfProcNode = true;

            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ExceptionHandling.UnhandledExceptionHandler);

            _debugCommunications = (Environment.GetEnvironmentVariable("MSBUILDDEBUGCOMM") == "1");

            _receivedPackets     = new Queue <INodePacket>();
            _packetReceivedEvent = new AutoResetEvent(false);
            _shutdownEvent       = new ManualResetEvent(false);
            _legacyThreadingData = new LegacyThreadingData();

            _componentFactories = new BuildComponentFactoryCollection(this);
            _componentFactories.RegisterDefaultFactories();
            _packetFactory = new NodePacketFactory();

            _buildRequestEngine  = (this as IBuildComponentHost).GetComponent(BuildComponentType.RequestEngine) as IBuildRequestEngine;
            _globalConfigCache   = (this as IBuildComponentHost).GetComponent(BuildComponentType.ConfigCache) as IConfigCache;
            _taskHostNodeManager = (this as IBuildComponentHost).GetComponent(BuildComponentType.TaskHostNodeManager) as INodeManager;

            if (s_projectRootElementCache == null)
            {
                s_projectRootElementCache = new ProjectRootElementCache(true /* automatically reload any changes from disk */);
            }

            _buildRequestEngine.OnEngineException         += new EngineExceptionDelegate(OnEngineException);
            _buildRequestEngine.OnNewConfigurationRequest += new NewConfigurationRequestDelegate(OnNewConfigurationRequest);
            _buildRequestEngine.OnRequestBlocked          += new RequestBlockedDelegate(OnNewRequest);
            _buildRequestEngine.OnRequestComplete         += new RequestCompleteDelegate(OnRequestComplete);

            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequest, BuildRequest.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfiguration, BuildRequestConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfigurationResponse, BuildRequestConfigurationResponse.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestUnblocker, BuildRequestUnblocker.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeConfiguration, NodeConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeBuildComplete, NodeBuildComplete.FactoryForDeserialization, this);
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Returns the number of configurations assigned to the specified node.
        /// </summary>
        public int GetConfigurationsCountByNode(int nodeId, bool excludeTraversals, IConfigCache configCache)
        {
            HashSet <int> configurationsAssignedToNode;

            if (!_configurationsByNode.TryGetValue(nodeId, out configurationsAssignedToNode))
            {
                return(0);
            }

            int excludeCount = 0;

            if (excludeTraversals && (configCache != null))
            {
                foreach (int config in configurationsAssignedToNode)
                {
                    if (configCache[config].IsTraversal)
                    {
                        excludeCount++;
                    }
                }
            }

            return(configurationsAssignedToNode.Count - excludeCount);
        }
Ejemplo n.º 29
0
        public void IfCacheSpecified_AReadResultsInKeyValueWrittenToCache()
        {
            IConfigCache configCache      = MockRepository.GenerateStub <IConfigCache>();
            CacheableConfigController sut = new CacheableConfigController();

            sut.Cache = configCache;

            Queue <string> priority = new Queue <string>();

            priority.Enqueue("FirstPlane");


            sut.Priority = priority;

            sut.UpsertDefaultConfigValue("FirstPlane", "ConfigKey", "ConfigValue");
            Dictionary <string, string> context = new Dictionary <string, string>();

            context.Add("FirstPlane", "MyConfigContext");
            sut.SearchContext = context;

            sut.GetConfigValue("ConfigKey");

            configCache.AssertWasCalled(x => x.CacheInsert(Arg <string> .Is.Equal("ConfigKey"), Arg <string> .Is.Equal("ConfigValue")));
        }
Ejemplo n.º 30
0
 /// <summary>
 /// Initializes the component with the specified component host.
 /// </summary>
 /// <param name="host">The component host.</param>
 public void InitializeComponent(IBuildComponentHost host)
 {
     _componentHost = host;
     _resultsCache = (IResultsCache)_componentHost.GetComponent(BuildComponentType.ResultsCache);
     _configCache = (IConfigCache)_componentHost.GetComponent(BuildComponentType.ConfigCache);
 }
Ejemplo n.º 31
0
            /// <summary>
            /// Constructor
            /// 
            /// UNDONE: Refactor this, and the other MockHosts, to use a common base implementation.  The duplication of the
            /// logging implementation alone is unfortunate.
            /// </summary>
            public MockHost()
            {
                _buildParameters = new BuildParameters();
                _legacyThreadingData = new LegacyThreadingData();

                _configCache = new ConfigCache();
                ((IBuildComponent)_configCache).InitializeComponent(this);

                _loggingService = this;

                _resultsCache = new ResultsCache();
                ((IBuildComponent)_resultsCache).InitializeComponent(this);

                _requestBuilder = new RequestBuilder();
                ((IBuildComponent)_requestBuilder).InitializeComponent(this);

                _targetBuilder = new TargetBuilder();
                ((IBuildComponent)_targetBuilder).InitializeComponent(this);
            }
 internal ManualPollConfigService(IConfigFetcher configFetcher, IConfigCache configCache, ILoggerFactory loggerFactory)
     : base(configFetcher, configCache, loggerFactory.GetLogger(nameof(ManualPollConfigService)))
 {
 }
Ejemplo n.º 33
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public SchedulingPlan(IConfigCache configCache, SchedulingData schedulingData)
 {
     _configCache                = configCache;
     _schedulingData             = schedulingData;
     this.MaximumConfigurationId = BuildRequestConfiguration.InvalidConfigurationId;
 }
Ejemplo n.º 34
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public OutOfProcNode()
        {
            s_isOutOfProcNode = true;

            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ExceptionHandling.UnhandledExceptionHandler);

            _debugCommunications = (Environment.GetEnvironmentVariable("MSBUILDDEBUGCOMM") == "1");

            _receivedPackets = new Queue<INodePacket>();
            _packetReceivedEvent = new AutoResetEvent(false);
            _shutdownEvent = new ManualResetEvent(false);
            _legacyThreadingData = new LegacyThreadingData();

            _componentFactories = new BuildComponentFactoryCollection(this);
            _componentFactories.RegisterDefaultFactories();
            _packetFactory = new NodePacketFactory();

            _buildRequestEngine = (this as IBuildComponentHost).GetComponent(BuildComponentType.RequestEngine) as IBuildRequestEngine;
            _globalConfigCache = (this as IBuildComponentHost).GetComponent(BuildComponentType.ConfigCache) as IConfigCache;
            _taskHostNodeManager = (this as IBuildComponentHost).GetComponent(BuildComponentType.TaskHostNodeManager) as INodeManager;

            if (s_projectRootElementCache == null)
            {
                s_projectRootElementCache = new ProjectRootElementCache(true /* automatically reload any changes from disk */);
            }

            _buildRequestEngine.OnEngineException += new EngineExceptionDelegate(OnEngineException);
            _buildRequestEngine.OnNewConfigurationRequest += new NewConfigurationRequestDelegate(OnNewConfigurationRequest);
            _buildRequestEngine.OnRequestBlocked += new RequestBlockedDelegate(OnNewRequest);
            _buildRequestEngine.OnRequestComplete += new RequestCompleteDelegate(OnRequestComplete);

            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequest, BuildRequest.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfiguration, BuildRequestConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestConfigurationResponse, BuildRequestConfigurationResponse.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.BuildRequestUnblocker, BuildRequestUnblocker.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeConfiguration, NodeConfiguration.FactoryForDeserialization, this);
            (this as INodePacketFactory).RegisterPacketHandler(NodePacketType.NodeBuildComplete, NodeBuildComplete.FactoryForDeserialization, this);
        }
Ejemplo n.º 35
0
        /// <summary>
        /// Returns the number of configurations assigned to the specified node.
        /// </summary>
        public int GetConfigurationsCountByNode(int nodeId, bool excludeTraversals, IConfigCache configCache)
        {
            HashSet<int> configurationsAssignedToNode;

            if (!_configurationsByNode.TryGetValue(nodeId, out configurationsAssignedToNode))
            {
                return 0;
            }

            int excludeCount = 0;
            if (excludeTraversals && (configCache != null))
            {
                foreach (int config in configurationsAssignedToNode)
                {
                    if (configCache[config].IsTraversal)
                    {
                        excludeCount++;
                    }
                }
            }

            return configurationsAssignedToNode.Count - excludeCount;
        }
Ejemplo n.º 36
0
 public ConfigCacheWithOverride(IConfigCache @override)
 {
     _override    = @override;
     CurrentCache = new ConfigCache();
 }
Ejemplo n.º 37
0
 /// <summary>
 /// The component is being initialized
 /// </summary>
 public void InitializeComponent(IBuildComponentHost host)
 {
     this.host = host;
     this.resultsCache = (IResultsCache)(this.host.GetComponent(BuildComponentType.ResultsCache));
     this.configCache = (IConfigCache)(this.host.GetComponent(BuildComponentType.ConfigCache));
     this.testDataProvider = (ITestDataProvider)(this.host.GetComponent(BuildComponentType.TestDataProvider));
 }
Ejemplo n.º 38
0
        /// <summary>
        /// Sets the build component host for this object.
        /// </summary>
        /// <param name="host">The host.</param>
        public void InitializeComponent(IBuildComponentHost host)
        {
            ErrorUtilities.VerifyThrowArgumentNull(host, "host");
            ErrorUtilities.VerifyThrow(_componentHost == null, "BuildRequestEngine already initialized!");
            _componentHost = host;
            _configCache = (IConfigCache)host.GetComponent(BuildComponentType.ConfigCache);

            // Create a local configuration cache which is used to temporarily hold configurations which don't have
            // proper IDs yet.  We don't get this from the global config cache because that singleton shouldn't be polluted
            // with our temporaries.
            // NOTE: Because we don't get this from the component host, we cannot override it.
            ConfigCache unresolvedConfigCache = new ConfigCache();
            unresolvedConfigCache.InitializeComponent(host);
            _unresolvedConfigurations = unresolvedConfigCache;
        }
Ejemplo n.º 39
0
 /// <summary>
 /// The component is being initialized
 /// </summary>
 public void InitializeComponent(IBuildComponentHost host)
 {
     _host = host;
     _resultsCache = (IResultsCache)(_host.GetComponent(BuildComponentType.ResultsCache));
     _configCache = (IConfigCache)(_host.GetComponent(BuildComponentType.ConfigCache));
     _testDataProvider = (ITestDataProvider)(_host.GetComponent(BuildComponentType.TestDataProvider));
 }
Ejemplo n.º 40
0
 /// <summary>
 /// Creates a new BuildRequestDefinition cache.
 /// </summary>
 public TestDataProvider()
 {
     this.definitions = new Dictionary<int, RequestDefinition>();
     this.configurationCache = null;
     this.key = 2;
     this.newConfigurations = new Queue<BuildRequestConfiguration>();
     this.newRequests = new Queue<BuildRequest>();
     this.newResults = new Queue<ResultFromEngine>();
     this.engineException = null;
     this.processorThreadResume = new AutoResetEvent(false);
     this.processorThreadExit = new AutoResetEvent(false);
     this.processorThreadExited = false;
     this.processorThread = new Thread(ProcessorThreadProc);
     this.processorThread.Name = "Test Data provider processor thread";
     this.processorThread.Start();
 }
Ejemplo n.º 41
0
        /// <summary>
        /// Cleanup
        /// </summary>
        public void ShutdownComponent()
        {
            // If the processor thread is still there then signal it to go away
            // Wait for QAMockHost.globalTimeOut seconds for the thread to go away or complete. If not then abort it.
            if (!this.processorThreadExited)
            {
                this.processorThreadExit.Set();
                if(!this.processorThread.Join(QAMockHost.globalTimeOut))
                {
                    this.processorThread.Abort();
                }

                this.processorThread = null;
            }

            // dispose all the definition object here.
            foreach (RequestDefinition definition in this.definitions.Values)
            {
                definition.Dispose();
            }

            this.definitions.Clear();
            this.newResults.Clear();
            this.newRequests.Clear();
            this.newConfigurations.Clear();
            this.newRequests = null;
            this.newResults = null;
            this.newConfigurations = null;
            this.configurationCache = null;
            this.resultsCache = null;
        }
Ejemplo n.º 42
0
 /// <summary>
 /// Save the configuration cache information from the host
 /// </summary>
 public void InitializeComponent(IBuildComponentHost host)
 {
     this.configurationCache = (IConfigCache)host.GetComponent(BuildComponentType.ConfigCache);
     this.resultsCache = (IResultsCache)host.GetComponent(BuildComponentType.ResultsCache);
 }
Ejemplo n.º 43
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public SchedulingPlan(IConfigCache configCache, SchedulingData schedulingData)
 {
     _configCache = configCache;
     _schedulingData = schedulingData;
     this.MaximumConfigurationId = BuildRequestConfiguration.InvalidConfigurationId;
 }
Ejemplo n.º 44
0
        public BuildRequestEngine_Tests()
        {
            _host = new MockHost();
            _nodeRequestId = 1;
            _globalRequestId = 1;
            _engineStatusChangedEvent = new AutoResetEvent(false);
            _requestCompleteEvent = new AutoResetEvent(false);
            _requestResumedEvent = new AutoResetEvent(false);
            _newRequestEvent = new AutoResetEvent(false);
            _newConfigurationEvent = new AutoResetEvent(false);
            _engineExceptionEvent = new AutoResetEvent(false);

            _engine = (IBuildRequestEngine)_host.GetComponent(BuildComponentType.RequestEngine);
            _cache = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache);

            ConfigureEngine(_engine);
        }