diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index cf5fe054e8..e667e233d5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,25 +3,25 @@ - + https://github.com/dotnet/arcade - e4584b56c5334067d30a04dd6b2d1d724ed7ccc3 + e65cfb96188c8849e24f6e8f53207eae71689281 - + https://github.com/dotnet/arcade - e4584b56c5334067d30a04dd6b2d1d724ed7ccc3 + e65cfb96188c8849e24f6e8f53207eae71689281 - + https://github.com/dotnet/arcade - e4584b56c5334067d30a04dd6b2d1d724ed7ccc3 + e65cfb96188c8849e24f6e8f53207eae71689281 - + https://github.com/dotnet/arcade - e4584b56c5334067d30a04dd6b2d1d724ed7ccc3 + e65cfb96188c8849e24f6e8f53207eae71689281 - + https://github.com/dotnet/arcade - e4584b56c5334067d30a04dd6b2d1d724ed7ccc3 + e65cfb96188c8849e24f6e8f53207eae71689281 https://github.com/dotnet/arcade-services diff --git a/eng/Versions.props b/eng/Versions.props index 2091e6983a..88e3350788 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -60,8 +60,8 @@ 2.4.1 2.0.3 2.4.1 - 2.2.0-beta.20509.7 - 1.0.0-beta.20509.7 + 2.2.0-beta.20567.6 + 1.0.0-beta.20567.6 1.22.0 1.1.2 2.0.0 @@ -73,7 +73,7 @@ 1.7.0 1.1.0-beta.19556.4 1.0.0-beta2-19554-01 - 1.0.0-beta.20509.7 + 1.0.0-beta.20567.6 1.0.0-beta.20055.1 diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 6d88a1904b..83218ad7e7 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -99,8 +99,9 @@ function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $Passw function EnablePrivatePackageSources($DisabledPackageSources) { $maestroPrivateSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") ForEach ($DisabledPackageSource in $maestroPrivateSources) { - Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled" - $DisabledPackageSource.SetAttribute("value", "false") + Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled by deleting it from disabledPackageSource" + # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries + $DisabledPackageSources.RemoveChild($DisabledPackageSource) } } diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index 00e8f45b91..751863d500 100644 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -159,8 +159,8 @@ if [ "$?" == "0" ]; then for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do if [[ $DisabledSourceName == darc-int* ]] then - OldDisableValue="add key=\"$DisabledSourceName\" value=\"true\"" - NewDisableValue="add key=\"$DisabledSourceName\" value=\"false\"" + OldDisableValue="" + NewDisableValue="" sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile echo "Neutralized disablePackageSources entry for '$DisabledSourceName'" fi diff --git a/global.json b/global.json index 56352a5a69..821686b454 100644 --- a/global.json +++ b/global.json @@ -9,7 +9,7 @@ "dotnet": "5.0.100-rc.1.20453.7" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.20509.7", - "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.20509.7" + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.20567.6", + "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.20567.6" } } diff --git a/scripts/build/TestPlatform.Dependencies.props b/scripts/build/TestPlatform.Dependencies.props index 9fe91f412c..8212613327 100644 --- a/scripts/build/TestPlatform.Dependencies.props +++ b/scripts/build/TestPlatform.Dependencies.props @@ -31,8 +31,8 @@ 5.0.0 9.0.1 4.7.63 - 16.9.0-preview-4189539 - 16.9.0-beta.20563.1 + 16.9.0-preview-4243816 + 16.9.0-beta.20570.2 16.8.0-beta.20420.2 16.0.461 diff --git a/scripts/verify-nupkgs.ps1 b/scripts/verify-nupkgs.ps1 index 89ebfbc28b..9ed5af9848 100644 --- a/scripts/verify-nupkgs.ps1 +++ b/scripts/verify-nupkgs.ps1 @@ -15,12 +15,12 @@ function Verify-Nuget-Packages($packageDirectory) $expectedNumOfFiles = @{ "Microsoft.CodeCoverage" = 44; "Microsoft.NET.Test.Sdk" = 18; - "Microsoft.TestPlatform" = 488; + "Microsoft.TestPlatform" = 486; "Microsoft.TestPlatform.Build" = 19; - "Microsoft.TestPlatform.CLI" = 350; + "Microsoft.TestPlatform.CLI" = 353; "Microsoft.TestPlatform.Extensions.TrxLogger" = 33; "Microsoft.TestPlatform.ObjectModel" = 178; - "Microsoft.TestPlatform.Portable" = 566; + "Microsoft.TestPlatform.Portable" = 568; "Microsoft.TestPlatform.TestHost" = 212; "Microsoft.TestPlatform.TranslationLayer" = 121} diff --git a/src/Microsoft.TestPlatform.Utilities/CodeCoverageDataAttachmentsHandler.cs b/src/Microsoft.TestPlatform.Utilities/CodeCoverageDataAttachmentsHandler.cs index 2b911f6926..3c2ceeff0f 100644 --- a/src/Microsoft.TestPlatform.Utilities/CodeCoverageDataAttachmentsHandler.cs +++ b/src/Microsoft.TestPlatform.Utilities/CodeCoverageDataAttachmentsHandler.cs @@ -11,6 +11,8 @@ namespace Microsoft.VisualStudio.TestPlatform.Utilities using System.Reflection; using System.Threading; using System.Threading.Tasks; + + using Microsoft.VisualStudio.Coverage.CoreLib.Net; using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; @@ -22,10 +24,6 @@ public class CodeCoverageDataAttachmentsHandler : IDataCollectorAttachmentProces private const string CoverageFileExtension = ".coverage"; private const string CoverageFriendlyName = "Code Coverage"; - private const string CodeCoverageAnalysisAssemblyName = "Microsoft.VisualStudio.Coverage.Analysis"; - private const string MergeMethodName = "MergeCoverageFiles"; - private const string CoverageInfoTypeName = "CoverageInfo"; - private static readonly Uri CodeCoverageDataCollectorUri = new Uri(CoverageUri); public bool SupportsIncrementalProcessing => true; @@ -35,93 +33,68 @@ public IEnumerable GetExtensionUris() yield return CodeCoverageDataCollectorUri; } - public Task> ProcessAttachmentSetsAsync(ICollection attachments, IProgress progressReporter, IMessageLogger logger, CancellationToken cancellationToken) + public async Task> ProcessAttachmentSetsAsync(ICollection attachments, IProgress progressReporter, IMessageLogger logger, CancellationToken cancellationToken) { if (attachments != null && attachments.Any()) { var codeCoverageFiles = attachments.Select(coverageAttachment => coverageAttachment.Attachments[0].Uri.LocalPath).ToArray(); - var outputFile = MergeCodeCoverageFiles(codeCoverageFiles, progressReporter, cancellationToken); + var outputFile = await this.MergeCodeCoverageFilesAsync(codeCoverageFiles, progressReporter, cancellationToken).ConfigureAwait(false); var attachmentSet = new AttachmentSet(CodeCoverageDataCollectorUri, CoverageFriendlyName); if (!string.IsNullOrEmpty(outputFile)) { attachmentSet.Attachments.Add(new UriDataAttachment(new Uri(outputFile), CoverageFriendlyName)); - return Task.FromResult((ICollection)new Collection { attachmentSet }); + return new Collection { attachmentSet }; } // In case merging fails(esp in dotnet core we cannot merge), so return filtered list of Code Coverage Attachments - return Task.FromResult(attachments); + return attachments; } - return Task.FromResult((ICollection)new Collection()); + return new Collection(); } - private string MergeCodeCoverageFiles(IList files, IProgress progressReporter, CancellationToken cancellationToken) + private async Task MergeCodeCoverageFilesAsync(IList files, IProgress progressReporter, CancellationToken cancellationToken) { - if(files.Count == 1) + if (files.Count == 1) { return files[0]; } - string tempFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + CoverageFileExtension); - string outputfileName = files[0]; - - File.Create(tempFileName).Dispose(); - var assemblyPath = Path.Combine(Path.GetDirectoryName(typeof(CodeCoverageDataAttachmentsHandler).GetTypeInfo().Assembly.GetAssemblyLocation()), CodeCoverageAnalysisAssemblyName + ".dll"); - try { - cancellationToken.ThrowIfCancellationRequested(); - Assembly assembly = new PlatformAssemblyLoadContext().LoadAssemblyFromPath(assemblyPath); - var type = assembly.GetType(CodeCoverageAnalysisAssemblyName + "." + CoverageInfoTypeName); - - var methodInfo = type?.GetMethod(MergeMethodName); - - if (methodInfo != null) - { - IList filesToDelete = new List(files.Count) { tempFileName }; - - for (int i = 1; i < files.Count; i++) - { - cancellationToken.ThrowIfCancellationRequested(); - progressReporter?.Report(100 * i / files.Count); - - cancellationToken.ThrowIfCancellationRequested(); - methodInfo.Invoke(null, new object[] { files[i], outputfileName, tempFileName, true }); - - cancellationToken.ThrowIfCancellationRequested(); - File.Copy(tempFileName, outputfileName, true); - - filesToDelete.Add(files[i]); - } - - cancellationToken.ThrowIfCancellationRequested(); - foreach (string fileName in filesToDelete) - { - File.Delete(fileName); - } - } - + // Warning: Don't remove this method call. + // + // We took a dependency on Coverage.CoreLib.Net. In the unlikely case it cannot be + // resolved, this method call will throw an exception that will be caught and + // absorbed here. + await this.MergeCodeCoverageFilesAsync(files, cancellationToken).ConfigureAwait(false); progressReporter?.Report(100); - return outputfileName; } catch (OperationCanceledException) { - if (EqtTrace.IsWarningEnabled) - { - EqtTrace.Warning("CodeCoverageDataCollectorAttachmentsHandler: operation was cancelled."); - } + // Occurs due to cancellation, ok to re-throw. throw; } catch (Exception ex) { - if (EqtTrace.IsErrorEnabled) - { - EqtTrace.Error("CodeCoverageDataCollectorAttachmentsHandler: Failed to load datacollector of type : {0} from location : {1}. Error : {2}", CodeCoverageAnalysisAssemblyName, assemblyPath, ex.ToString()); - } + EqtTrace.Error( + "CodeCoverageDataCollectorAttachmentsHandler: Failed to load datacollector. Error: {0}", + ex.ToString()); } - return string.Empty; + return files[0]; + } + + private async Task MergeCodeCoverageFilesAsync(IList files, CancellationToken cancellationToken) + { + var coverageUtility = new CoverageFileUtility(); + + var coverageData = await coverageUtility.MergeCoverageFilesAsync( + files, + cancellationToken).ConfigureAwait(false); + + coverageUtility.WriteCoverageFile(files[0], coverageData); } } } diff --git a/src/Microsoft.TestPlatform.Utilities/Microsoft.TestPlatform.Utilities.csproj b/src/Microsoft.TestPlatform.Utilities/Microsoft.TestPlatform.Utilities.csproj index 0323baf7e8..7d1416479c 100644 --- a/src/Microsoft.TestPlatform.Utilities/Microsoft.TestPlatform.Utilities.csproj +++ b/src/Microsoft.TestPlatform.Utilities/Microsoft.TestPlatform.Utilities.csproj @@ -15,8 +15,9 @@ + - + diff --git a/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec b/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec index 6bad5f5517..579a948c62 100644 --- a/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec +++ b/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec @@ -34,6 +34,7 @@ + @@ -286,6 +287,7 @@ + diff --git a/src/package/nuspec/Microsoft.TestPlatform.nuspec b/src/package/nuspec/Microsoft.TestPlatform.nuspec index 678d736810..504f900f82 100644 --- a/src/package/nuspec/Microsoft.TestPlatform.nuspec +++ b/src/package/nuspec/Microsoft.TestPlatform.nuspec @@ -109,8 +109,7 @@ - - + @@ -268,7 +267,6 @@ - diff --git a/src/package/sign/sign.proj b/src/package/sign/sign.proj index 67b7e8b404..4173e79f43 100644 --- a/src/package/sign/sign.proj +++ b/src/package/sign/sign.proj @@ -131,13 +131,11 @@ - - + - @@ -622,4 +620,4 @@ IntermediatesDirectory="$(IntermediatesDirectory)" Type="$(SignType)" /> - \ No newline at end of file + diff --git a/test/Microsoft.TestPlatform.AcceptanceTests/TranslationLayerTests/CodeCoverageTests.cs b/test/Microsoft.TestPlatform.AcceptanceTests/TranslationLayerTests/CodeCoverageTests.cs index 1185e8bd40..94fabb2a4b 100644 --- a/test/Microsoft.TestPlatform.AcceptanceTests/TranslationLayerTests/CodeCoverageTests.cs +++ b/test/Microsoft.TestPlatform.AcceptanceTests/TranslationLayerTests/CodeCoverageTests.cs @@ -53,8 +53,7 @@ public void TestRunWithCodeCoverage(RunnerInfo runnerInfo) // assert Assert.AreEqual(6, this.runEventHandler.TestResults.Count); - int expectedNumberOfAttachments = testEnvironment.RunnerFramework.Equals(IntegrationTestBase.CoreRunnerFramework) && - testEnvironment.TargetFramework.Equals(IntegrationTestBase.CoreRunnerFramework) ? 2 : 1; + int expectedNumberOfAttachments = 1; Assert.AreEqual(expectedNumberOfAttachments, this.runEventHandler.Attachments.Count); AssertCoverageResults(this.runEventHandler.Attachments); @@ -74,7 +73,7 @@ public void TestRunWithCodeCoverageParallel(RunnerInfo runnerInfo) // assert Assert.AreEqual(6, this.runEventHandler.TestResults.Count); - Assert.AreEqual(testEnvironment.RunnerFramework.Equals(IntegrationTestBase.DesktopRunnerFramework) ? 1 : 2, this.runEventHandler.Attachments.Count); + Assert.AreEqual(1, this.runEventHandler.Attachments.Count); AssertCoverageResults(this.runEventHandler.Attachments); } @@ -99,7 +98,7 @@ public async Task TestRunWithCodeCoverageAndAttachmentsProcessing(RunnerInfo run // Assert testRunAttachmentsProcessingEventHandler.EnsureSuccess(); - Assert.AreEqual(testEnvironment.RunnerFramework.Equals(IntegrationTestBase.DesktopRunnerFramework) ? 1 : 2, this.testRunAttachmentsProcessingEventHandler.Attachments.Count); + Assert.AreEqual(1, this.testRunAttachmentsProcessingEventHandler.Attachments.Count); AssertCoverageResults(this.testRunAttachmentsProcessingEventHandler.Attachments); @@ -121,7 +120,7 @@ public async Task TestRunWithCodeCoverageAndAttachmentsProcessing(RunnerInfo run Assert.AreEqual("Completed", testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.AttachmentsProcessingState]); Assert.AreEqual(2L, testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.NumberOfAttachmentsSentForProcessing]); - Assert.AreEqual(testEnvironment.RunnerFramework.Equals(IntegrationTestBase.DesktopRunnerFramework) ? 1L : 2L, testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.NumberOfAttachmentsAfterProcessing]); + Assert.AreEqual(1L, testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.NumberOfAttachmentsAfterProcessing]); Assert.IsTrue(testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics.ContainsKey(TelemetryDataConstants.TimeTakenInSecForAttachmentsProcessing)); Assert.IsTrue(File.Exists(runEventHandler.Attachments.First().Attachments.First().Uri.LocalPath)); @@ -148,7 +147,7 @@ public async Task TestRunWithCodeCoverageAndAttachmentsProcessingNoMetrics(Runne // Assert testRunAttachmentsProcessingEventHandler.EnsureSuccess(); - Assert.AreEqual(testEnvironment.RunnerFramework.Equals(IntegrationTestBase.DesktopRunnerFramework) ? 1 : 2, this.testRunAttachmentsProcessingEventHandler.Attachments.Count); + Assert.AreEqual(1, this.testRunAttachmentsProcessingEventHandler.Attachments.Count); AssertCoverageResults(this.testRunAttachmentsProcessingEventHandler.Attachments); @@ -195,7 +194,7 @@ public async Task TestRunWithCodeCoverageAndAttachmentsProcessingModuleDuplicate // Assert testRunAttachmentsProcessingEventHandler.EnsureSuccess(); - Assert.AreEqual(testEnvironment.RunnerFramework.Equals(IntegrationTestBase.DesktopRunnerFramework) ? 1 : 3, this.testRunAttachmentsProcessingEventHandler.Attachments.Count); + Assert.AreEqual(1, this.testRunAttachmentsProcessingEventHandler.Attachments.Count); AssertCoverageResults(this.testRunAttachmentsProcessingEventHandler.Attachments); @@ -217,7 +216,7 @@ public async Task TestRunWithCodeCoverageAndAttachmentsProcessingModuleDuplicate Assert.AreEqual("Completed", testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.AttachmentsProcessingState]); Assert.AreEqual(3L, testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.NumberOfAttachmentsSentForProcessing]); - Assert.AreEqual(testEnvironment.RunnerFramework.Equals(IntegrationTestBase.DesktopRunnerFramework) ? 1L : 3L, testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.NumberOfAttachmentsAfterProcessing]); + Assert.AreEqual(1L, testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics[TelemetryDataConstants.NumberOfAttachmentsAfterProcessing]); Assert.IsTrue(testRunAttachmentsProcessingEventHandler.CompleteArgs.Metrics.ContainsKey(TelemetryDataConstants.TimeTakenInSecForAttachmentsProcessing)); Assert.IsTrue(File.Exists(runEventHandler.Attachments.First().Attachments.First().Uri.LocalPath)); @@ -271,7 +270,7 @@ public async Task TestRunWithCodeCoverageAndAttachmentsProcessingCancelled(Runne Assert.IsTrue(testRunAttachmentsProcessingEventHandler.CompleteArgs.IsCanceled); Assert.IsNull(testRunAttachmentsProcessingEventHandler.CompleteArgs.Error); - Assert.IsTrue((testEnvironment.RunnerFramework.Equals(IntegrationTestBase.DesktopRunnerFramework) ? 3 : 0) <= testRunAttachmentsProcessingEventHandler.ProgressArgs.Count); + Assert.IsTrue(3 <= testRunAttachmentsProcessingEventHandler.ProgressArgs.Count); for (int i = 0; i < testRunAttachmentsProcessingEventHandler.ProgressArgs.Count; i++) { VisualStudio.TestPlatform.ObjectModel.Client.TestRunAttachmentsProcessingProgressEventArgs progressArgs = testRunAttachmentsProcessingEventHandler.ProgressArgs[i]; diff --git a/test/Microsoft.TestPlatform.Utilities.UnitTests/CodeCoverageDataAttachmentsHandlerTests.cs b/test/Microsoft.TestPlatform.Utilities.UnitTests/CodeCoverageDataAttachmentsHandlerTests.cs index ff89d295bd..b87bdc8dae 100644 --- a/test/Microsoft.TestPlatform.Utilities.UnitTests/CodeCoverageDataAttachmentsHandlerTests.cs +++ b/test/Microsoft.TestPlatform.Utilities.UnitTests/CodeCoverageDataAttachmentsHandlerTests.cs @@ -78,31 +78,5 @@ public async Task HandleDataCollectionAttachmentSetsShouldThrowIfCancellationReq mockProgressReporter.Verify(p => p.Report(It.IsAny()), Times.Never); } - - [TestMethod] - public async Task HandleDataCollectionAttachmentSetsShouldReturnExistingAttachmentsIfFailedToLoadLibrary() - { - var attachmentSet1 = new AttachmentSet(new Uri("//badrui//"), string.Empty); - attachmentSet1.Attachments.Add(new UriDataAttachment(new Uri("C:\\temp\\aa"), "coverage")); - - var attachmentSet2 = new AttachmentSet(new Uri("//badruj//"), string.Empty); - attachmentSet2.Attachments.Add(new UriDataAttachment(new Uri("C:\\temp\\ab"), "coverage")); - - CancellationTokenSource cts = new CancellationTokenSource(); - - Collection attachment = new Collection - { - attachmentSet1, - attachmentSet2 - }; - - var result = await coverageDataAttachmentsHandler.ProcessAttachmentSetsAsync(attachment, mockProgressReporter.Object, null, cts.Token); - - Assert.AreEqual(2, result.Count); - Assert.IsTrue(result.Contains(attachmentSet1)); - Assert.IsTrue(result.Contains(attachmentSet2)); - - mockProgressReporter.Verify(p => p.Report(It.IsAny()), Times.Never); - } } }