Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor/Unify Build and Graph OM and API #10172

Merged
merged 18 commits into from
Jul 4, 2024
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 11 additions & 13 deletions src/Build.UnitTests/BackEnd/BuildRequestEntry_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
using Microsoft.Build.Unittest;
using Xunit;

#nullable disable

namespace Microsoft.Build.UnitTests.BackEnd
{
public class BuildRequestEntry_Tests
Expand All @@ -23,7 +21,7 @@ public class BuildRequestEntry_Tests
public void TestConstructorGood()
{
BuildRequest request = CreateNewBuildRequest(1, Array.Empty<string>());
BuildRequestData data = new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null);
BuildRequestData data = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data, "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);

Expand All @@ -36,15 +34,15 @@ public void TestConstructorBad()
{
Assert.Throws<ArgumentNullException>(() =>
{
BuildRequestEntry entry = new BuildRequestEntry(null, null);
BuildRequestEntry entry = new BuildRequestEntry(null!, null!);
});
}
[Fact]
public void TestSimpleStateProgression()
{
// Start in Ready
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
Assert.Equal(entry.Request, request);
Expand Down Expand Up @@ -92,7 +90,7 @@ public void TestSimpleStateProgression()
public void TestResolveConfiguration()
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null);
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);

Expand All @@ -114,7 +112,7 @@ public void TestResolveConfiguration()
public void TestMultipleWaitingRequests()
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null);
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);

Expand Down Expand Up @@ -144,7 +142,7 @@ public void TestMultipleWaitingRequests()
public void TestMixedWaitingRequests()
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);
Assert.Equal(BuildRequestEntryState.Ready, entry.State);

Expand Down Expand Up @@ -181,7 +179,7 @@ public void TestNoReadyToWaiting()
Assert.Throws<InternalErrorException>(() =>
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null);
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
Expand All @@ -197,7 +195,7 @@ public void TestNoReadyToComplete()
Assert.Throws<InternalErrorException>(() =>
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null);
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
Expand All @@ -214,7 +212,7 @@ public void TestNoWaitingToComplete()
Assert.Throws<InternalErrorException>(() =>
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null);
BuildRequestData data1 = new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null);
BuildRequestConfiguration config = new BuildRequestConfiguration(1, data1, "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);
Assert.Equal(BuildRequestEntryState.Ready, entry.State);
Expand All @@ -238,7 +236,7 @@ public void TestNoCompleteToWaiting()
Assert.Throws<InternalErrorException>(() =>
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);
Assert.Equal(BuildRequestEntryState.Ready, entry.State);

Expand All @@ -258,7 +256,7 @@ public void TestNoCompleteToWaiting()
public void TestResultsWithNoMatch1()
{
BuildRequest request = CreateNewBuildRequest(1, new string[1] { "foo" });
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestConfiguration config = new BuildRequestConfiguration(1, new BuildRequestData("foo", new Dictionary<string, string?>(), "foo", Array.Empty<string>(), null), "2.0");
BuildRequestEntry entry = new BuildRequestEntry(request, config);
Assert.Equal(BuildRequestEntryState.Ready, entry.State);

Expand Down
75 changes: 40 additions & 35 deletions src/Build.UnitTests/BackEnd/BuildResult_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
using Xunit;
using TaskItem = Microsoft.Build.Execution.ProjectItemInstance.TaskItem;

#nullable disable

namespace Microsoft.Build.UnitTests.BackEnd
{
public class BuildResult_Tests
Expand All @@ -39,31 +37,31 @@ public void Clone()
{
BuildRequest request = CreateNewBuildRequest(1, Array.Empty<string>());
BuildResult result1 = new BuildResult(request);
result1.ResultsByTarget.Add("FOO", BuildResultUtilities.GetEmptySucceedingTargetResult());
Assert.True(result1.ResultsByTarget.ContainsKey("foo")); // test comparer
result1.ResultsByTarget?.Add("FOO", BuildResultUtilities.GetEmptySucceedingTargetResult());
Assert.True(result1.ResultsByTarget?.ContainsKey("foo")); // test comparer

BuildResult result2 = result1.Clone();

result1.ResultsByTarget.Add("BAR", BuildResultUtilities.GetEmptySucceedingTargetResult());
Assert.True(result1.ResultsByTarget.ContainsKey("foo")); // test comparer
Assert.True(result1.ResultsByTarget.ContainsKey("bar"));
result1.ResultsByTarget?.Add("BAR", BuildResultUtilities.GetEmptySucceedingTargetResult());
Assert.True(result1.ResultsByTarget?.ContainsKey("foo")); // test comparer
Assert.True(result1.ResultsByTarget?.ContainsKey("bar"));

Assert.Equal(result1.SubmissionId, result2.SubmissionId);
Assert.Equal(result1.ConfigurationId, result2.ConfigurationId);
Assert.Equal(result1.GlobalRequestId, result2.GlobalRequestId);
Assert.Equal(result1.ParentGlobalRequestId, result2.ParentGlobalRequestId);
Assert.Equal(result1.NodeRequestId, result2.NodeRequestId);
Assert.Equal(result1.CircularDependency, result2.CircularDependency);
Assert.Equal(result1.ResultsByTarget["foo"], result2.ResultsByTarget["foo"]);
Assert.Equal(result1.ResultsByTarget?["foo"], result2.ResultsByTarget?["foo"]);
Assert.Equal(result1.OverallResult, result2.OverallResult);
}

[Fact]
public void TestConstructorBad()
{
Assert.Throws<InternalErrorException>(() =>
Assert.Throws<NullReferenceException>(() =>
{
BuildResult result = new BuildResult(null);
BuildResult result = new BuildResult(null!);
});
}
[Fact]
Expand Down Expand Up @@ -163,7 +161,7 @@ public void TestAddResultsInvalid1()
{
BuildRequest request = CreateNewBuildRequest(1, Array.Empty<string>());
BuildResult result = new BuildResult(request);
result.AddResultsForTarget(null, BuildResultUtilities.GetEmptySucceedingTargetResult());
result.AddResultsForTarget(null!, BuildResultUtilities.GetEmptySucceedingTargetResult());
});
}

Expand All @@ -174,7 +172,7 @@ public void TestAddResultsInvalid2()
{
BuildRequest request = CreateNewBuildRequest(1, Array.Empty<string>());
BuildResult result = new BuildResult(request);
result.AddResultsForTarget("foo", null);
result.AddResultsForTarget("foo", null!);
});
}

Expand All @@ -185,7 +183,7 @@ public void TestAddResultsInvalid3()
{
BuildRequest request = CreateNewBuildRequest(1, Array.Empty<string>());
BuildResult result = new BuildResult(request);
result.AddResultsForTarget(null, BuildResultUtilities.GetEmptySucceedingTargetResult());
result.AddResultsForTarget(null!, BuildResultUtilities.GetEmptySucceedingTargetResult());
});
}
[Fact]
Expand Down Expand Up @@ -222,7 +220,7 @@ public void TestMergeResultsBad1()
BuildResult result = new BuildResult(request);
result.AddResultsForTarget("foo", BuildResultUtilities.GetEmptySucceedingTargetResult());

result.MergeResults(null);
result.MergeResults(null!);
});
}

Expand Down Expand Up @@ -258,45 +256,52 @@ public void TestEnumerator()
{
BuildRequest request = CreateNewBuildRequest(1, Array.Empty<string>());
BuildResult result = new BuildResult(request);
int countFound = 0;
foreach (KeyValuePair<string, TargetResult> resultPair in result.ResultsByTarget)
{
countFound++;
}
int countFound = result.ResultsByTarget?.Count ?? 0;
Assert.Equal(0, countFound);

result.AddResultsForTarget("foo", BuildResultUtilities.GetEmptySucceedingTargetResult());
bool foundFoo = false;
countFound = 0;
foreach (KeyValuePair<string, TargetResult> resultPair in result.ResultsByTarget)
if (result.ResultsByTarget != null)
{
if (resultPair.Key == "foo")
foreach (KeyValuePair<string, TargetResult> resultPair in result.ResultsByTarget)
{
foundFoo = true;
if (resultPair.Key == "foo")
{
foundFoo = true;
}

countFound++;
}
countFound++;
}

Assert.Equal(1, countFound);
Assert.True(foundFoo);

result.AddResultsForTarget("bar", BuildResultUtilities.GetEmptySucceedingTargetResult());
foundFoo = false;
bool foundBar = false;
countFound = 0;
foreach (KeyValuePair<string, TargetResult> resultPair in result.ResultsByTarget)
if (result.ResultsByTarget != null)
{
if (resultPair.Key == "foo")
{
Assert.False(foundFoo);
foundFoo = true;
}
if (resultPair.Key == "bar")
foreach (KeyValuePair<string, TargetResult> resultPair in result.ResultsByTarget)
{
Assert.False(foundBar);
foundBar = true;
if (resultPair.Key == "foo")
{
Assert.False(foundFoo);
foundFoo = true;
}

if (resultPair.Key == "bar")
{
Assert.False(foundBar);
foundBar = true;
}

countFound++;
}
countFound++;
}

Assert.Equal(2, countFound);
Assert.True(foundFoo);
Assert.True(foundBar);
Expand All @@ -322,12 +327,12 @@ public void TestTranslation()
((ITranslatable)result).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = BuildResult.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());

BuildResult deserializedResult = packet as BuildResult;
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, out string diffReason), diffReason);
Assert.Equal(result.Exception.Message, deserializedResult.Exception.Message);
Assert.Equal(result.Exception?.Message, deserializedResult.Exception?.Message);
JanKrivanek marked this conversation as resolved.
Show resolved Hide resolved
Assert.Equal(result.GlobalRequestId, deserializedResult.GlobalRequestId);
Assert.True(TranslationHelpers.CompareCollections(result.InitialTargets, deserializedResult.InitialTargets, StringComparer.Ordinal));
Assert.Equal(result.NodeRequestId, deserializedResult.NodeRequestId);
Expand Down
23 changes: 3 additions & 20 deletions src/Build.UnitTests/BackEnd/MockHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,9 @@ public IBuildComponent GetComponent(BuildComponentType type)
};
}

public TComponent GetComponent<TComponent>(BuildComponentType type) where TComponent : IBuildComponent
=> (TComponent) GetComponent(type);

/// <summary>
/// Register a new build component factory with the host.
/// </summary>
Expand All @@ -224,25 +227,5 @@ public INodePacket DeserializePacket(NodePacketType type, byte[] serializedPacke
}

#endregion

#region IBuildComponent Members

/// <summary>
/// Initialize this component using the provided host
/// </summary>
public void InitializeComponent(IBuildComponentHost host)
{
throw new NotImplementedException();
}

/// <summary>
/// Clean up any state
/// </summary>
public void ShutdownComponent()
{
throw new NotImplementedException();
}

#endregion
}
}
4 changes: 4 additions & 0 deletions src/Build.UnitTests/BackEnd/MockLoggingService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Microsoft.Build.BackEnd;
using Microsoft.Build.BackEnd.Logging;
using Microsoft.Build.Framework;
using Microsoft.Build.Framework.Profiler;
Expand Down Expand Up @@ -639,6 +640,9 @@ public void LogIncludeFile(BuildEventContext buildEventContext, string filePath)
throw new NotImplementedException();
}

public void InitializeComponent(IBuildComponentHost host) => throw new NotImplementedException();
public void ShutdownComponent() => throw new NotImplementedException();

#endregion
}
}
2 changes: 2 additions & 0 deletions src/Build.UnitTests/BackEnd/NodeEndpointInProc_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ public IBuildComponent GetComponent(BuildComponentType type)
throw new NotImplementedException();
}

public TComponent GetComponent<TComponent>(BuildComponentType type) where TComponent : IBuildComponent => throw new NotImplementedException("Not expected to be used.");

public void RegisterFactory(BuildComponentType type, BuildComponentFactoryDelegate factory)
{
}
Expand Down
24 changes: 3 additions & 21 deletions src/Build.UnitTests/BackEnd/TargetBuilder_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1824,6 +1824,9 @@ public IBuildComponent GetComponent(BuildComponentType type)
};
}

public TComponent GetComponent<TComponent>(BuildComponentType type) where TComponent : IBuildComponent
=> (TComponent)GetComponent(type);

/// <summary>
/// Registers a component factory
/// </summary>
Expand All @@ -1832,27 +1835,6 @@ public void RegisterFactory(BuildComponentType type, BuildComponentFactoryDelega
}

#endregion

#region IBuildComponent Members

/// <summary>
/// Sets the component host
/// </summary>
/// <param name="host">The component host</param>
public void InitializeComponent(IBuildComponentHost host)
{
throw new NotImplementedException();
}

/// <summary>
/// Shuts down the component
/// </summary>
public void ShutdownComponent()
{
throw new NotImplementedException();
}

#endregion
}
}
}
Loading