Skip to content

Commit 8fa1369

Browse files
committed
fixup! Allow configProperties "STARTUP_HOOKS" and env "DOTNET_STARTUP_HOOKS" to both be present
1 parent 5a613c0 commit 8fa1369

File tree

2 files changed

+55
-7
lines changed

2 files changed

+55
-7
lines changed

Diff for: src/installer/tests/HostActivation.Tests/StartupHooks.cs

+54
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class StartupHooks : IClassFixture<StartupHooks.SharedTestState>
1313
{
1414
private SharedTestState sharedTestState;
1515
private string startupHookVarName = "DOTNET_STARTUP_HOOKS";
16+
private string startupHookRuntimeConfigName = "STARTUP_HOOKS";
1617
private string startupHookSupport = "System.StartupHookProvider.IsSupported";
1718

1819
public StartupHooks(StartupHooks.SharedTestState fixture)
@@ -105,6 +106,59 @@ public void Muxer_activation_of_Multiple_StartupHooks_Succeeds()
105106
.And.HaveStdOutContaining("Hello World");
106107
}
107108

109+
[Fact]
110+
public void Muxer_activation_of_RuntimeConfig_StartupHook_Succeeds()
111+
{
112+
var fixture = sharedTestState.PortableAppFixture.Copy();
113+
var dotnet = fixture.BuiltDotnet;
114+
var appDll = fixture.TestProject.AppDll;
115+
116+
var startupHookFixture = sharedTestState.StartupHookFixture.Copy();
117+
var startupHookDll = startupHookFixture.TestProject.AppDll;
118+
119+
RuntimeConfig.FromFile(fixture.TestProject.RuntimeConfigJson)
120+
.WithProperty(startupHookRuntimeConfigName, startupHookDll)
121+
.Save();
122+
123+
// RuntimeConfig defined startup hook
124+
dotnet.Exec(appDll)
125+
.CaptureStdOut()
126+
.CaptureStdErr()
127+
.Execute()
128+
.Should().Pass()
129+
.And.HaveStdOutContaining("Hello from startup hook!")
130+
.And.HaveStdOutContaining("Hello World");
131+
}
132+
133+
[Fact]
134+
public void Muxer_activation_of_RuntimeConfig_And_Environment_StartupHooks_Succeeds()
135+
{
136+
var fixture = sharedTestState.PortableAppFixture.Copy();
137+
var dotnet = fixture.BuiltDotnet;
138+
var appDll = fixture.TestProject.AppDll;
139+
140+
var startupHookFixture = sharedTestState.StartupHookFixture.Copy();
141+
var startupHookDll = startupHookFixture.TestProject.AppDll;
142+
143+
RuntimeConfig.FromFile(fixture.TestProject.RuntimeConfigJson)
144+
.WithProperty(startupHookRuntimeConfigName, startupHookDll)
145+
.Save();
146+
147+
var startupHook2Fixture = sharedTestState.StartupHookWithDependencyFixture.Copy();
148+
var startupHook2Dll = startupHook2Fixture.TestProject.AppDll;
149+
150+
// RuntimeConfig and Environment startup hook
151+
dotnet.Exec(appDll)
152+
.EnvironmentVariable(startupHookVarName, startupHook2Dll)
153+
.CaptureStdOut()
154+
.CaptureStdErr()
155+
.Execute()
156+
.Should().Pass()
157+
.And.HaveStdOutContaining("Hello from startup hook!")
158+
.And.HaveStdOutContaining("Hello from startup hook with dependency!")
159+
.And.HaveStdOutContaining("Hello World");
160+
}
161+
108162
// Empty startup hook variable
109163
[Fact]
110164
public void Muxer_activation_of_Empty_StartupHook_Variable_Succeeds()

Diff for: src/native/corehost/hostpolicy/hostpolicy_context.cpp

+1-7
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,7 @@ int hostpolicy_context_t::initialize(hostpolicy_init_t &hostpolicy_init, const a
284284
const pal::char_t *config_startup_hooks;
285285
if (coreclr_properties.try_get(common_property::StartUpHooks, &config_startup_hooks))
286286
{
287-
#ifdef TARGET_UNIX
288-
char separator = ':';
289-
#else
290-
char separator = ';';
291-
#endif // TARGET_UNIX
292-
293-
startup_hooks.push_back(separator);
287+
startup_hooks.push_back(PATH_SEPARATOR);
294288
startup_hooks.append(config_startup_hooks);
295289
}
296290

0 commit comments

Comments
 (0)