| File: MacSingleInstanceTests.cs | Web Access |
| Project: src\tests\Aspire.Tray.Tests\Aspire.Tray.Tests.csproj (Aspire.Tray.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.Versioning; namespace Aspire.Tray.Tests; public class MacSingleInstanceTests { public static bool SupportsMac => OperatingSystem.IsMacOS(); [Fact(Skip = "The state directory is macOS-specific.", SkipUnless = nameof(SupportsMac))] [SupportedOSPlatform("macos")] public void ControlEndpointUsesTheUserProfileRuntimeDirectory() { var directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".aspire", "tray", "runtime"); Assert.Equal(directory, SingleInstance.DirectoryPath); Assert.Equal(Path.Combine(directory, "control-v1.sock"), SingleInstance.ActivationPipeName); Assert.Equal(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Application Support", "Aspire", "Tray"), SingleInstance.LegacyStateDirectoryPath); } [Theory(Skip = "The lock uses Darwin flock.", SkipUnless = nameof(SupportsMac))] [InlineData(false)] [InlineData(true)] [SupportedOSPlatform("macos")] public void StateDirectoryIsOwnerOnlyBeforeAcquiringLock(bool directoryExists) { var parent = Directory.CreateTempSubdirectory("aspire-tray-permissions-"); try { var directory = Path.Combine(parent.FullName, "state"); if (directoryExists) { Directory.CreateDirectory(directory); File.SetUnixFileMode(directory, UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute | UnixFileMode.GroupRead | UnixFileMode.GroupExecute | UnixFileMode.OtherRead | UnixFileMode.OtherExecute); } using var lease = SingleInstance.TryAcquire(directory); Assert.NotNull(lease); Assert.Equal(UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute, File.GetUnixFileMode(directory)); } finally { parent.Delete(recursive: true); } } }