public void TestOverallResult() { BuildRequest request = CreateNewBuildRequest(1, new string[0]); BuildResult result = new BuildResult(request); Assert.Equal(BuildResultCode.Success, result.OverallResult); result.AddResultsForTarget("foo", BuildResultUtilities.GetEmptySucceedingTargetResult()); Assert.Equal(BuildResultCode.Success, result.OverallResult); result.AddResultsForTarget("bar", new TargetResult(new TaskItem[0] { }, new WorkUnitResult(WorkUnitResultCode.Success, WorkUnitActionCode.Continue, new Exception()))); Assert.Equal(BuildResultCode.Success, result.OverallResult); result.AddResultsForTarget("baz", new TargetResult(new TaskItem[0] { }, BuildResultUtilities.GetStopWithErrorResult(new Exception()))); Assert.Equal(BuildResultCode.Failure, result.OverallResult); BuildRequest request2 = CreateNewBuildRequest(2, new string[0]); BuildResult result2 = new BuildResult(request2); result2.AddResultsForTarget("foo", BuildResultUtilities.GetEmptySucceedingTargetResult()); result2.AddResultsForTarget("bar", BuildResultUtilities.GetEmptyFailingTargetResult()); Assert.Equal(BuildResultCode.Failure, result2.OverallResult); }
public void TestConstructorNullItems() { Assert.Throws <ArgumentNullException>(() => { TargetResult result = new TargetResult(null, BuildResultUtilities.GetStopWithErrorResult()); } ); }
public void TestConstructorNoItems() { TargetResult result = new TargetResult(new TaskItem[] { }, BuildResultUtilities.GetStopWithErrorResult()); Assert.Empty(result.Items); Assert.Null(result.Exception); Assert.Equal(TargetResultCode.Failure, result.ResultCode); }
public void TestConstructorWithExceptionNull() { TaskItem item = new TaskItem("foo", "bar.proj"); TargetResult result = new TargetResult(new TaskItem[] { item }, BuildResultUtilities.GetStopWithErrorResult()); Assert.Single(result.Items); Assert.Null(result.Exception); Assert.Equal(TargetResultCode.Failure, result.ResultCode); }
public void TestTwoRequestsWithSecondFailure() { CreateConfiguration(1, "foo.proj"); BuildRequest request1 = CreateBuildRequest(1, 1, new string[] { "foo" }); BuildRequest request2 = CreateBuildRequest(2, 1, new string[] { "bar" }); BuildResult result2 = CacheBuildResult(request2, "bar", BuildResultUtilities.GetStopWithErrorResult()); BuildRequestBlocker blocker = new BuildRequestBlocker(request1.ParentGlobalRequestId, new string[] { }, new BuildRequest[] { request1, request2 }); List <ScheduleResponse> response = new List <ScheduleResponse>(_scheduler.ReportRequestBlocked(1, blocker)); Assert.Equal(2, response.Count); Assert.True(ResultsCache_Tests.AreResultsIdentical(result2, response[0].Unblocker.Result)); Assert.Equal(ScheduleActionType.ScheduleWithConfiguration, response[1].Action); }
public void TestTranslationWithException() { TaskItem item = new TaskItem("foo", "bar.proj"); item.SetMetadata("a", "b"); TargetResult result = new TargetResult(new TaskItem[] { item }, BuildResultUtilities.GetStopWithErrorResult(new BuildAbortedException())); ((ITranslatable)result).Translate(TranslationHelpers.GetWriteTranslator()); TargetResult deserializedResult = TargetResult.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); Assert.Equal(result.ResultCode, deserializedResult.ResultCode); Assert.True(TranslationHelpers.CompareCollections(result.Items, deserializedResult.Items, TaskItemComparer.Instance)); Assert.True(TranslationHelpers.CompareExceptions(result.Exception, deserializedResult.Exception)); }
public void TestSimpleRequestWithCachedResultsFail() { CreateConfiguration(1, "foo.proj"); BuildRequest request = CreateBuildRequest(1, 1, new string[] { "foo" }); BuildResult result = CacheBuildResult(request, "foo", BuildResultUtilities.GetStopWithErrorResult()); BuildRequestBlocker blocker = new BuildRequestBlocker(request.ParentGlobalRequestId, new string[] { }, new BuildRequest[] { request }); List <ScheduleResponse> response = new List <ScheduleResponse>(_scheduler.ReportRequestBlocked(1, blocker)); Assert.Equal(2, response.Count); // First response tells the parent of the results. Assert.Equal(ScheduleActionType.ReportResults, response[0].Action); Assert.True(ResultsCache_Tests.AreResultsIdentical(result, response[0].Unblocker.Result)); // Second response tells the parent to continue. Assert.Equal(ScheduleActionType.ResumeExecution, response[1].Action); Assert.Null(response[1].Unblocker.Result); }
public void TestTranslationNoException() { TaskItem item = new TaskItem("foo", "bar.proj"); item.SetMetadata("a", "b"); var buildEventContext = new Framework.BuildEventContext(1, 2, 3, 4, 5, 6, 7); TargetResult result = new TargetResult( new TaskItem[] { item }, BuildResultUtilities.GetStopWithErrorResult(), buildEventContext); ((ITranslatable)result).Translate(TranslationHelpers.GetWriteTranslator()); TargetResult deserializedResult = TargetResult.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); Assert.Equal(result.ResultCode, deserializedResult.ResultCode); Assert.True(TranslationHelpers.CompareCollections(result.Items, deserializedResult.Items, TaskItemComparer.Instance)); Assert.True(TranslationHelpers.CompareExceptions(result.Exception, deserializedResult.Exception)); Assert.Equal(result.OriginalBuildEventContext, deserializedResult.OriginalBuildEventContext); }
public void TestTranslation() { BuildRequest request = new BuildRequest(1, 1, 2, new string[] { "alpha", "omega" }, null, new BuildEventContext(1, 1, 2, 3, 4, 5), null); BuildResult result = new BuildResult(request, new BuildAbortedException()); TaskItem fooTaskItem = new TaskItem("foo", "asdf.proj"); fooTaskItem.SetMetadata("meta1", "metavalue1"); fooTaskItem.SetMetadata("meta2", "metavalue2"); result.InitialTargets = new List <string> { "a", "b" }; result.DefaultTargets = new List <string> { "c", "d" }; result.AddResultsForTarget("alpha", new TargetResult(new TaskItem[] { fooTaskItem }, BuildResultUtilities.GetSuccessResult())); result.AddResultsForTarget("omega", new TargetResult(new TaskItem[] { }, BuildResultUtilities.GetStopWithErrorResult(new ArgumentException("The argument was invalid")))); Assert.Equal(NodePacketType.BuildResult, (result as INodePacket).Type); ((ITranslatable)result).Translate(TranslationHelpers.GetWriteTranslator()); INodePacket packet = BuildResult.FactoryForDeserialization(TranslationHelpers.GetReadTranslator()); BuildResult deserializedResult = packet as BuildResult; Assert.Equal(result.ConfigurationId, deserializedResult.ConfigurationId); Assert.True(TranslationHelpers.CompareCollections(result.DefaultTargets, deserializedResult.DefaultTargets, StringComparer.Ordinal)); Assert.True(TranslationHelpers.CompareExceptions(result.Exception, deserializedResult.Exception)); Assert.Equal(result.Exception.Message, deserializedResult.Exception.Message); Assert.Equal(result.GlobalRequestId, deserializedResult.GlobalRequestId); Assert.True(TranslationHelpers.CompareCollections(result.InitialTargets, deserializedResult.InitialTargets, StringComparer.Ordinal)); Assert.Equal(result.NodeRequestId, deserializedResult.NodeRequestId); Assert.Equal(result["alpha"].ResultCode, deserializedResult["alpha"].ResultCode); Assert.True(TranslationHelpers.CompareExceptions(result["alpha"].Exception, deserializedResult["alpha"].Exception)); Assert.True(TranslationHelpers.CompareCollections(result["alpha"].Items, deserializedResult["alpha"].Items, TaskItemComparer.Instance)); Assert.Equal(result["omega"].ResultCode, deserializedResult["omega"].ResultCode); Assert.True(TranslationHelpers.CompareExceptions(result["omega"].Exception, deserializedResult["omega"].Exception)); Assert.True(TranslationHelpers.CompareCollections(result["omega"].Items, deserializedResult["omega"].Items, TaskItemComparer.Instance)); }
private void BuilderThreadProc() { _entry.RequestConfiguration.Project = CreateStandinProject(); if (ThrowExceptionOnRequest) { BuildResult errorResult = new BuildResult(_entry.Request, new InvalidOperationException("ContinueRequest not received in time.")); _entry.Complete(errorResult); RaiseRequestComplete(_entry); return; } bool completeSuccess = CompleteRequestSuccessfully; if (_cancelEvent.WaitOne(1000)) { BuildResult res = new BuildResult(_entry.Request, new BuildAbortedException()); _entry.Complete(res); RaiseRequestComplete(_entry); return; } for (int i = 0; i < NewRequests.Count; ++i) { OnNewBuildRequests(_entry, NewRequests[i]); WaitHandle[] handles = new WaitHandle[2] { _cancelEvent, _continueEvent }; int evt = WaitHandle.WaitAny(handles, 5000); if (evt == 0) { BuildResult res = new BuildResult(_entry.Request, new BuildAbortedException()); _entry.Complete(res); RaiseRequestComplete(_entry); return; } else if (evt == 1) { IDictionary <int, BuildResult> results = _entry.Continue(); foreach (BuildResult configResult in results.Values) { if (configResult.OverallResult == BuildResultCode.Failure) { completeSuccess = false; break; } } } else { BuildResult errorResult = new BuildResult(_entry.Request, new InvalidOperationException("ContinueRequest not received in time.")); _entry.Complete(errorResult); RaiseRequestComplete(_entry); return; } if (!completeSuccess) { break; } Delay(); } BuildResult result = new BuildResult(_entry.Request); foreach (string target in _entry.Request.Targets) { result.AddResultsForTarget(target, new TargetResult(new TaskItem[1] { new TaskItem("include", _entry.RequestConfiguration.ProjectFullPath) }, completeSuccess ? BuildResultUtilities.GetSuccessResult() : BuildResultUtilities.GetStopWithErrorResult())); } _entry.Complete(result); }