releases/tests/Paca.Tests/App/DesktopGatewayDaemonCommandLineGateTests.cs
Yun Chan 3ac77180b4
Some checks failed
release / test (push) Failing after 13m30s
release / macos (push) Has been cancelled
release / windows (push) Has been cancelled
release / android (push) Has been cancelled
release / linux (push) Has been cancelled
fix(installer): use {autodesktop} for per-user desktop shortcut safety and fix IPersistFile 0x80070005 error
2026-09-19 08:25:34 +09:00

82 lines
3.2 KiB
C#

using System;
using System.IO;
using Paca.App;
using Paca.Tests.Infrastructure;
using Xunit;
namespace Paca.Tests.App;
/// <summary>
/// Gate 153 ~ 155: 데스크톱 백그라운드 게이트웨이 서비스 인스톨러 연동 및 시작프로그램 CLI 모드 기계적 검증
/// </summary>
public class DesktopGatewayDaemonCommandLineGateTests
{
[Fact]
public void Gate153_CommandLineArgs_GatewayDaemonMode_Detected()
{
// 1. --gateway-daemon 인자 전달 시 백그라운드 무음 데몬 모드
var mode1 = DesktopStartupModeParser.Parse(new[] { "--gateway-daemon" });
Assert.Equal(DesktopStartupMode.GatewayDaemonSilent, mode1);
// 2. 대소문자 무관 감지
var mode2 = DesktopStartupModeParser.Parse(new[] { "--GATEWAY-DAEMON" });
Assert.Equal(DesktopStartupMode.GatewayDaemonSilent, mode2);
// 3. 인자 없음 -> 일반 GUI 모드
var mode3 = DesktopStartupModeParser.Parse(Array.Empty<string>());
Assert.Equal(DesktopStartupMode.NormalGui, mode3);
// 4. 기타 인자 -> 일반 GUI 모드
var mode4 = DesktopStartupModeParser.Parse(new[] { "--minimize" });
Assert.Equal(DesktopStartupMode.NormalGui, mode4);
}
[Fact]
public void Gate154_GatewayDaemon_StartupRegistryEntry_Configurator()
{
var exePath = @"C:\Users\Username\AppData\Local\Programs\Paca\Paca.exe";
var runValue = WindowsStartupRegistryHelper.FormatRunCommand(exePath);
Assert.Equal("\"C:\\Users\\Username\\AppData\\Local\\Programs\\Paca\\Paca.exe\" --gateway-daemon", runValue);
}
[Fact]
public void Gate155_InstallerScript_Includes_GatewayService_Task_And_Registry()
{
var installerPath = Path.Combine(SourceTree.Root, "build", "installer.iss");
Assert.True(File.Exists(installerPath), "installer.iss must exist");
var content = File.ReadAllText(installerPath);
// 게이트웨이 서비스 설치 태스크 확인
Assert.Contains("gatewayservice", content);
Assert.Contains("PacaGatewayDaemon", content);
Assert.Contains("--gateway-daemon", content);
}
[Fact]
public void Gate156_AppStartup_DaemonConfig_Defaults()
{
var config = new Paca.Server.Gateway.GatewayStartupConfig();
Assert.Equal(52100, config.HttpPort);
Assert.Equal(52101, config.BeaconUdpPort);
Assert.True(config.AutoStartUdpBeacon);
}
[Fact]
public void Gate157_InstallerScript_MustUseAutoDesktop_And_MustNotContainCommonDesktop_ForPerUserSafety()
{
var installerPath = Path.Combine(SourceTree.Root, "build", "installer.iss");
Assert.True(File.Exists(installerPath), "installer.iss must exist");
var content = File.ReadAllText(installerPath);
// Standard user (PrivilegesRequired=lowest) has no write permission to {commondesktop} (C:\Users\Public\Desktop).
// Saving a shortcut to {commondesktop} throws IPersistFile::Save 0x80070005 (Access is Denied).
// It must use {autodesktop} which resolves to {userdesktop} for standard users.
Assert.DoesNotContain("{commondesktop}", content);
Assert.Contains("{autodesktop}\\{#APP_NAME}", content);
Assert.DoesNotContain("{commonprograms}", content);
}
}