Przeglądaj źródła

Merge pull request #5768 from Bond-009/dangling

Bond-009 4 lat temu
rodzic
commit
8a73e19f5e

+ 2 - 0
jellyfin.ruleset

@@ -78,5 +78,7 @@
     <Rule Id="CA1303" Action="None" />
     <!-- disable warning CA1308: Normalize strings to uppercase -->
     <Rule Id="CA1308" Action="None" />
+    <!-- disable warning CA2101: Specify marshaling for P/Invoke string arguments -->
+    <Rule Id="CA2101" Action="None" />
   </Rules>
 </RuleSet>

+ 25 - 0
tests/Jellyfin.Server.Implementations.Tests/IO/ManagedFileSystemTests.cs

@@ -1,3 +1,7 @@
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.IO;
+using System.Runtime.InteropServices;
 using AutoFixture;
 using AutoFixture.AutoMoq;
 using Emby.Server.Implementations.IO;
@@ -38,5 +42,26 @@ namespace Jellyfin.Server.Implementations.Tests.IO
                 Assert.Equal(expectedAbsolutePath, generatedPath);
             }
         }
+
+        [SkippableFact]
+        public void GetFileInfo_DanglingSymlink_ExistsFalse()
+        {
+            Skip.If(RuntimeInformation.IsOSPlatform(OSPlatform.Windows));
+
+            string testFileDir = Path.Combine(Path.GetTempPath(), "jellyfin-test-data");
+            string testFileName = Path.Combine(testFileDir, Path.GetRandomFileName() + "-danglingsym.link");
+
+            Directory.CreateDirectory(testFileDir);
+            Assert.Equal(0, symlink("thispathdoesntexist", testFileName));
+            Assert.True(File.Exists(testFileName));
+
+            var metadata = _sut.GetFileInfo(testFileName);
+            Assert.False(metadata.Exists);
+        }
+
+        [SuppressMessage("Naming Rules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Have to")]
+        [DllImport("libc", SetLastError = true, CharSet = CharSet.Ansi)]
+        [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
+        private static extern int symlink(string target, string linkpath);
     }
 }

+ 1 - 0
tests/Jellyfin.Server.Implementations.Tests/Jellyfin.Server.Implementations.Tests.csproj

@@ -28,6 +28,7 @@
     <PackageReference Include="Moq" Version="4.16.1" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
+    <PackageReference Include="Xunit.SkippableFact" Version="1.4.13" />
     <PackageReference Include="coverlet.collector" Version="3.0.3" />
   </ItemGroup>