uscheduler/src/MaksIT.UScheduler.Tests/HostServiceRegistrationTests.cs

57 lines
2.2 KiB
C#

using MaksIT.UScheduler.Shared;
namespace MaksIT.UScheduler.Tests;
public class HostServiceRegistrationTests {
[Fact]
public void FormatWindowsCreateArguments_RequiresSpaceAfterEquals() {
var arguments = HostServiceRegistration.FormatWindowsCreateArguments(
"MaksIT.UScheduler",
Path.Combine(Path.GetTempPath(), "MaksIT.UScheduler.exe"));
Assert.Contains("binPath= ", arguments, StringComparison.Ordinal);
Assert.Contains("start= auto", arguments, StringComparison.Ordinal);
Assert.DoesNotContain("start=auto", arguments, StringComparison.Ordinal);
Assert.Contains("create \"MaksIT.UScheduler\"", arguments, StringComparison.Ordinal);
}
[Fact]
public void FormatSystemdUnit_UsesNotifyLifetimeAndQuotedPaths() {
var unit = HostServiceRegistration.FormatSystemdUnit(
"MaksIT.UScheduler",
Path.Combine(Path.GetTempPath(), "MaksIT.UScheduler"),
"Schedules PowerShell scripts.");
Assert.Contains("Type=notify", unit, StringComparison.Ordinal);
Assert.Contains("ExecStart=\"", unit, StringComparison.Ordinal);
Assert.Contains("WorkingDirectory=\"", unit, StringComparison.Ordinal);
Assert.Contains("WantedBy=multi-user.target", unit, StringComparison.Ordinal);
Assert.Contains("SyslogIdentifier=MaksIT.UScheduler", unit, StringComparison.Ordinal);
Assert.Contains("KillSignal=SIGTERM", unit, StringComparison.Ordinal);
}
[Fact]
public void IsValidServiceName_AcceptsDefaultAndRejectsUnsafe() {
Assert.True(HostServiceRegistration.IsValidServiceName("MaksIT.UScheduler"));
Assert.False(HostServiceRegistration.IsValidServiceName("MaksIT Scheduler"));
Assert.False(HostServiceRegistration.IsValidServiceName("../evil"));
Assert.False(HostServiceRegistration.IsValidServiceName(""));
}
[Fact]
public void GetSystemdUnitPath_IsUnderSystemdSystem() =>
Assert.Equal(
"/etc/systemd/system/MaksIT.UScheduler.service",
HostServiceRegistration.GetSystemdUnitPath("MaksIT.UScheduler"));
[Fact]
public void GetExecutableFileName_MatchesHost() {
var name = HostServiceManager.GetExecutableFileName();
if (OperatingSystem.IsWindows())
Assert.Equal("MaksIT.UScheduler.exe", name);
else
Assert.Equal("MaksIT.UScheduler", name);
}
}