Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
Expand Down Expand Up @@ -41,11 +42,19 @@ public static void KillTree(this Process process, TimeSpan timeout)

private static void GetAllChildIdsUnix(int parentId, ISet<int> children, TimeSpan timeout)
{
RunProcessAndWaitForExit(
"pgrep",
$"-P {parentId}",
timeout,
out var stdout);
string stdout;
try
{
RunProcessAndWaitForExit(
"pgrep",
$"-P {parentId}",
timeout,
out stdout);
}
catch (Win32Exception)
{
return;
}

if (!string.IsNullOrEmpty(stdout))
{
Expand All @@ -72,11 +81,26 @@ private static void GetAllChildIdsUnix(int parentId, ISet<int> children, TimeSpa

private static void KillProcessUnix(int processId, TimeSpan timeout)
{
RunProcessAndWaitForExit(
"kill",
$"-TERM {processId}",
timeout,
out var stdout);
try
{
using (Process process = Process.GetProcessById(processId))
{
process.Kill();
process.WaitForExit((int)timeout.TotalMilliseconds);
}
}
catch (ArgumentException)
{
// Ignore if process has already exited.
}
catch (InvalidOperationException)
{
// Ignore if process has already exited.
}
catch (Win32Exception)
{
// Ignore permission or process-not-found errors.
}
}

private static void RunProcessAndWaitForExit(string fileName, string arguments, TimeSpan timeout, out string stdout)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
<PropertyGroup>
<TargetFrameworks>$(NetCoreAppCurrent);$(NetFrameworkCurrent)</TargetFrameworks>
<EnableDefaultItems>true</EnableDefaultItems>
<!-- ActiveIssue in AssemblyInfo.cs -->
<IgnoreForCI>true</IgnoreForCI>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@
using Xunit;

[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)]
[assembly: ActiveIssue("https://github.com/dotnet/runtime/issues/34090")] // Note: remove IgnoreForCI from .csproj when reenabling
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting.IntegrationTesting;
Expand Down Expand Up @@ -50,23 +49,22 @@ private async Task ExecuteShutdownTest(string testName, string shutdownMechanic)
builder.AddXunit(_output);
});

// TODO refactor deployers to not depend on source code
// see https://github.com/dotnet/extensions/issues/1697 and https://github.com/dotnet/aspnetcore/issues/10268
#pragma warning disable 0618
var applicationPath = string.Empty; // disabled for now
#pragma warning restore 0618
string applicationPath = AppContext.BaseDirectory;

Version version = Environment.Version;
var deploymentParameters = new DeploymentParameters(
applicationPath,
RuntimeFlavor.CoreClr,
RuntimeArchitecture.x64)
{
ApplicationName = "Microsoft.Extensions.Hosting.TestApp",
TargetFramework = $"net{version.Major}.{version.Minor}",
ApplicationType = ApplicationType.Portable,
PublishApplicationBeforeDeployment = true,
PreservePublishedApplicationForDebugging = true,
StatusMessagesEnabled = false
};
deploymentParameters.ApplicationPublisher = new ExistingOutputApplicationPublisher(applicationPath);
Comment on lines +60 to +67

deploymentParameters.EnvironmentVariables["DOTNET_STARTMECHANIC"] = shutdownMechanic;

Expand Down Expand Up @@ -154,5 +152,19 @@ private static void WaitForExitOrKill(Process process)

Assert.Equal(0, process.ExitCode);
}

private sealed class ExistingOutputApplicationPublisher : ApplicationPublisher
{
private readonly string _applicationPath;

public ExistingOutputApplicationPublisher(string applicationPath)
: base(applicationPath)
{
_applicationPath = applicationPath;
}

public override Task<PublishedApplication> Publish(DeploymentParameters deploymentParameters, ILogger logger)
=> Task.FromResult(new PublishedApplication(_applicationPath, logger));
}
}
}
Loading