using Mbproxy.Diagnostics; using Shouldly; using Xunit; namespace Mbproxy.Tests.Diagnostics; /// /// Unit tests for — the pure platform-selection /// logic for the Error+ diagnostic sink. Covers every OS / host combination so the /// selection contract is pinned without needing a real Windows Service or systemd host. /// [Trait("Category", "Unit")] public sealed class DiagnosticSinkSelectorTests { // 'expected' is the underlying int of DiagnosticSink: the enum is internal and // cannot appear in a public (xunit-discoverable) method signature. [Theory] [InlineData(true, true, false, (int)DiagnosticSink.EventLog)] // Windows, hosted as a Windows Service [InlineData(true, false, false, (int)DiagnosticSink.None)] // Windows, interactive / dev run [InlineData(false, false, true, (int)DiagnosticSink.Syslog)] // Linux, hosted as a systemd service [InlineData(false, false, false, (int)DiagnosticSink.None)] // Linux / macOS, interactive / dev run public void Select_PicksExpectedSink( bool isWindows, bool isWindowsService, bool isSystemd, int expected) => ((int)DiagnosticSinkSelector.Select(isWindows, isWindowsService, isSystemd)).ShouldBe(expected); [Fact] public void Select_Windows_TakesPrecedence_OverASpuriousSystemdFlag() => DiagnosticSinkSelector.Select(isWindows: true, isWindowsService: true, isSystemd: true) .ShouldBe(DiagnosticSink.EventLog); [Fact] public void Select_WindowsConsoleRun_GetsNoSink_EvenIfSystemdFlagSet() => DiagnosticSinkSelector.Select(isWindows: true, isWindowsService: false, isSystemd: true) .ShouldBe(DiagnosticSink.None); [Fact] public void Select_NonWindowsWithoutSystemd_GetsNoSink() => DiagnosticSinkSelector.Select(isWindows: false, isWindowsService: false, isSystemd: false) .ShouldBe(DiagnosticSink.None); }