From 65367411f7215763d74d5dbc2ea017771b722667 Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Wed, 5 Feb 2025 15:40:25 -0800 Subject: [PATCH 1/8] Plugin discovery: make linux case sensitive --- .../Plugins/PluginDiscoverer.cs | 3 +- .../Plugins/PluginDiscovererTests.cs | 67 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs b/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs index cc7ce269a60..e418003beb0 100644 --- a/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs +++ b/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs @@ -192,7 +192,8 @@ internal List GetPluginsInNuGetPluginPaths() if (File.Exists(path)) { FileInfo fileInfo = new FileInfo(path); - if (fileInfo.Name.StartsWith("nuget-plugin-", StringComparison.CurrentCultureIgnoreCase)) + StringComparison comparisonType = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; + if (fileInfo.Name.StartsWith("nuget-plugin-", comparisonType)) { // A DotNet tool plugin if (IsValidPluginFile(fileInfo)) diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs index c2e792f67d9..eeade5f0321 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs @@ -519,6 +519,73 @@ public void GetPluginsInNuGetPluginPaths_NoEnvironmentVariables_ReturnsNoPlugins Assert.Empty(plugins); } + [PlatformFact(Platform.Windows)] + public void GetPluginsInNuGetPluginPaths_Windows_CaseInsensitiveMatching() + { + // Arrange + using var testDirectory = TestDirectory.Create(); + + var pluginFilePath1 = Path.Combine(testDirectory.Path, "nuget-plugin-test.exe"); + var pluginFilePath2 = Path.Combine(testDirectory.Path, "NUGET-PLUGIN-TEST.exe"); // Different casing + + File.Create(pluginFilePath1).Dispose(); + File.Create(pluginFilePath2).Dispose(); + + var environmentalVariableReader = new Mock(); + environmentalVariableReader.Setup(env => env.GetEnvironmentVariable(EnvironmentVariableConstants.PluginPaths)).Returns($"{pluginFilePath1}{Path.PathSeparator}{pluginFilePath2}"); + + var pluginDiscoverer = new PluginDiscoverer(environmentalVariableReader.Object); + + // Act + var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); + + // Assert + Assert.Equal(2, plugins.Count); + } + + [PlatformFact(Platform.Linux)] + public void GetPluginsInNuGetPluginPaths_Linux_CaseSensitiveMatching() + { + // Arrange + using var testDirectory = TestDirectory.Create(); + + var correctCasePlugin = Path.Combine(testDirectory.Path, "nuget-plugin-test"); + var incorrectCasePlugin = Path.Combine(testDirectory.Path, "NUGET-PLUGIN-TEST"); // Different casing + + File.Create(correctCasePlugin).Dispose(); + File.Create(incorrectCasePlugin).Dispose(); + +#if NET8_0_OR_GREATER + File.SetUnixFileMode(correctCasePlugin, UnixFileMode.UserExecute | UnixFileMode.UserRead); +#else + // Use chmod for older .NET versions + var process = new Process(); + process.StartInfo.FileName = "/bin/bash"; + process.StartInfo.Arguments = $"-c \"chmod +x {correctCasePlugin} {incorrectCasePlugin}\""; + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardOutput = true; + process.Start(); + process.WaitForExit(); + + if (process.ExitCode != 0) + { + throw new InvalidOperationException($"Failed to set execute permissions for {correctCasePlugin} or {incorrectCasePlugin}"); + } +#endif + + var environmentalVariableReader = new Mock(); + environmentalVariableReader.Setup(env => env.GetEnvironmentVariable(EnvironmentVariableConstants.PluginPaths)).Returns($"{correctCasePlugin}{Path.PathSeparator}{incorrectCasePlugin}"); + + var pluginDiscoverer = new PluginDiscoverer(environmentalVariableReader.Object); + + // Act + var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); + + // Assert + Assert.Single(plugins); + Assert.Contains(plugins, p => p.Path == correctCasePlugin); + } + [PlatformFact(Platform.Windows)] public void IsValidPluginFile_ExeFile_ReturnsTrue() { From da5e800bf2fb6e6a8bf32af0c5194cd91df562cb Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Fri, 7 Feb 2025 15:15:32 -0800 Subject: [PATCH 2/8] Cleanup --- .../Plugins/PluginDiscovererTests.cs | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs index eeade5f0321..0e1b8e51c06 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs @@ -555,23 +555,8 @@ public void GetPluginsInNuGetPluginPaths_Linux_CaseSensitiveMatching() File.Create(correctCasePlugin).Dispose(); File.Create(incorrectCasePlugin).Dispose(); -#if NET8_0_OR_GREATER - File.SetUnixFileMode(correctCasePlugin, UnixFileMode.UserExecute | UnixFileMode.UserRead); -#else - // Use chmod for older .NET versions - var process = new Process(); - process.StartInfo.FileName = "/bin/bash"; - process.StartInfo.Arguments = $"-c \"chmod +x {correctCasePlugin} {incorrectCasePlugin}\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.Start(); - process.WaitForExit(); - - if (process.ExitCode != 0) - { - throw new InvalidOperationException($"Failed to set execute permissions for {correctCasePlugin} or {incorrectCasePlugin}"); - } -#endif + SetFileExecutable(correctCasePlugin, executable: true); + SetFileExecutable(incorrectCasePlugin, executable: true); var environmentalVariableReader = new Mock(); environmentalVariableReader.Setup(env => env.GetEnvironmentVariable(EnvironmentVariableConstants.PluginPaths)).Returns($"{correctCasePlugin}{Path.PathSeparator}{incorrectCasePlugin}"); From 2fac115e63b640201695a83975e8ae26c2d9ab6f Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Fri, 7 Feb 2025 15:23:38 -0800 Subject: [PATCH 3/8] assert --- .../NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs index 0e1b8e51c06..86288fb479b 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs @@ -541,6 +541,8 @@ public void GetPluginsInNuGetPluginPaths_Windows_CaseInsensitiveMatching() // Assert Assert.Equal(2, plugins.Count); + Assert.Contains(plugins, p => p.Path == pluginFilePath1); + Assert.Contains(plugins, p => p.Path == pluginFilePath2); } [PlatformFact(Platform.Linux)] @@ -569,6 +571,7 @@ public void GetPluginsInNuGetPluginPaths_Linux_CaseSensitiveMatching() // Assert Assert.Single(plugins); Assert.Contains(plugins, p => p.Path == correctCasePlugin); + Assert.DoesNotContain(plugins, p => p.Path == incorrectCasePlugin); } [PlatformFact(Platform.Windows)] From c05a6f0d62195e993c70226cdb3d867f8f6e4946 Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Fri, 7 Feb 2025 15:25:09 -0800 Subject: [PATCH 4/8] Do not assert count --- .../NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs index 86288fb479b..8b626b7ea16 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs @@ -540,7 +540,6 @@ public void GetPluginsInNuGetPluginPaths_Windows_CaseInsensitiveMatching() var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); // Assert - Assert.Equal(2, plugins.Count); Assert.Contains(plugins, p => p.Path == pluginFilePath1); Assert.Contains(plugins, p => p.Path == pluginFilePath2); } @@ -569,7 +568,6 @@ public void GetPluginsInNuGetPluginPaths_Linux_CaseSensitiveMatching() var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); // Assert - Assert.Single(plugins); Assert.Contains(plugins, p => p.Path == correctCasePlugin); Assert.DoesNotContain(plugins, p => p.Path == incorrectCasePlugin); } From cd7c65c6c9bf29b97dc01597fb9430b0c39ac288 Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Fri, 7 Feb 2025 15:41:01 -0800 Subject: [PATCH 5/8] Use PathUtility --- src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs b/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs index e418003beb0..1d139637c56 100644 --- a/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs +++ b/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs @@ -192,8 +192,7 @@ internal List GetPluginsInNuGetPluginPaths() if (File.Exists(path)) { FileInfo fileInfo = new FileInfo(path); - StringComparison comparisonType = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; - if (fileInfo.Name.StartsWith("nuget-plugin-", comparisonType)) + if (fileInfo.Name.StartsWith("nuget-plugin-", PathUtility.GetStringComparisonBasedOnOS())) { // A DotNet tool plugin if (IsValidPluginFile(fileInfo)) From 5850afb80af9018080ef069fe9e11efb13af7f79 Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Fri, 7 Feb 2025 16:04:47 -0800 Subject: [PATCH 6/8] test in !Desktop only --- .../Plugins/PluginDiscovererTests.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs index 8b626b7ea16..2571b852662 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs @@ -519,6 +519,7 @@ public void GetPluginsInNuGetPluginPaths_NoEnvironmentVariables_ReturnsNoPlugins Assert.Empty(plugins); } +#if !IS_DESKTOP [PlatformFact(Platform.Windows)] public void GetPluginsInNuGetPluginPaths_Windows_CaseInsensitiveMatching() { @@ -540,8 +541,8 @@ public void GetPluginsInNuGetPluginPaths_Windows_CaseInsensitiveMatching() var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); // Assert - Assert.Contains(plugins, p => p.Path == pluginFilePath1); - Assert.Contains(plugins, p => p.Path == pluginFilePath2); + Assert.Contains(plugins, p => p.Path == pluginFilePath1 && p.RequiresDotnetHost == false); + Assert.Contains(plugins, p => p.Path == pluginFilePath2 && p.RequiresDotnetHost == false); } [PlatformFact(Platform.Linux)] @@ -568,9 +569,10 @@ public void GetPluginsInNuGetPluginPaths_Linux_CaseSensitiveMatching() var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); // Assert - Assert.Contains(plugins, p => p.Path == correctCasePlugin); - Assert.DoesNotContain(plugins, p => p.Path == incorrectCasePlugin); + Assert.Contains(plugins, p => p.Path == correctCasePlugin && p.RequiresDotnetHost == false); + Assert.DoesNotContain(plugins, p => p.Path == incorrectCasePlugin && p.RequiresDotnetHost == false); } +#endif [PlatformFact(Platform.Windows)] public void IsValidPluginFile_ExeFile_ReturnsTrue() From 6956d47e44b6a975ebeeee1b1a1c18b04f083894 Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Tue, 25 Feb 2025 08:35:38 -0800 Subject: [PATCH 7/8] Case sensitive --- .../Plugins/PluginDiscoverer.cs | 14 ++-- .../Plugins/PluginDiscovererTests.cs | 72 +++++-------------- 2 files changed, 27 insertions(+), 59 deletions(-) diff --git a/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs b/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs index 1d139637c56..9f45ce792a4 100644 --- a/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs +++ b/src/NuGet.Core/NuGet.Protocol/Plugins/PluginDiscoverer.cs @@ -192,14 +192,11 @@ internal List GetPluginsInNuGetPluginPaths() if (File.Exists(path)) { FileInfo fileInfo = new FileInfo(path); - if (fileInfo.Name.StartsWith("nuget-plugin-", PathUtility.GetStringComparisonBasedOnOS())) + if (IsValidPluginFile(fileInfo)) { // A DotNet tool plugin - if (IsValidPluginFile(fileInfo)) - { - PluginFile pluginFile = new PluginFile(fileInfo.FullName, new Lazy(() => PluginFileState.Valid), requiresDotnetHost: false); - pluginFiles.Add(pluginFile); - } + PluginFile pluginFile = new PluginFile(fileInfo.FullName, new Lazy(() => PluginFileState.Valid), requiresDotnetHost: false); + pluginFiles.Add(pluginFile); } else { @@ -274,6 +271,11 @@ private static List GetNetToolsPluginsInDirectory(string directoryPa /// internal static bool IsValidPluginFile(FileInfo fileInfo) { + if (!fileInfo.Name.StartsWith("nuget-plugin-", StringComparison.Ordinal)) + { + return false; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return fileInfo.Extension.Equals(".exe", StringComparison.OrdinalIgnoreCase) || diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs index 2571b852662..36784b4662b 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs @@ -519,60 +519,26 @@ public void GetPluginsInNuGetPluginPaths_NoEnvironmentVariables_ReturnsNoPlugins Assert.Empty(plugins); } -#if !IS_DESKTOP - [PlatformFact(Platform.Windows)] - public void GetPluginsInNuGetPluginPaths_Windows_CaseInsensitiveMatching() - { - // Arrange - using var testDirectory = TestDirectory.Create(); - - var pluginFilePath1 = Path.Combine(testDirectory.Path, "nuget-plugin-test.exe"); - var pluginFilePath2 = Path.Combine(testDirectory.Path, "NUGET-PLUGIN-TEST.exe"); // Different casing - - File.Create(pluginFilePath1).Dispose(); - File.Create(pluginFilePath2).Dispose(); - - var environmentalVariableReader = new Mock(); - environmentalVariableReader.Setup(env => env.GetEnvironmentVariable(EnvironmentVariableConstants.PluginPaths)).Returns($"{pluginFilePath1}{Path.PathSeparator}{pluginFilePath2}"); - - var pluginDiscoverer = new PluginDiscoverer(environmentalVariableReader.Object); - - // Act - var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); - - // Assert - Assert.Contains(plugins, p => p.Path == pluginFilePath1 && p.RequiresDotnetHost == false); - Assert.Contains(plugins, p => p.Path == pluginFilePath2 && p.RequiresDotnetHost == false); - } - - [PlatformFact(Platform.Linux)] - public void GetPluginsInNuGetPluginPaths_Linux_CaseSensitiveMatching() + [PlatformTheory(Platform.Windows)] + [InlineData("nuget-plugin-auth.exe", true)] + [InlineData("nuget-plugin-AUTH.bat", true)] + [InlineData("nuGet-plugin-auth.exe", false)] + [InlineData("NUGet-PLUGIN-auth.bat", false)] + public void IsValidPlugin_IsCaseSensitive(string file, bool isValid) { // Arrange - using var testDirectory = TestDirectory.Create(); - - var correctCasePlugin = Path.Combine(testDirectory.Path, "nuget-plugin-test"); - var incorrectCasePlugin = Path.Combine(testDirectory.Path, "NUGET-PLUGIN-TEST"); // Different casing - - File.Create(correctCasePlugin).Dispose(); - File.Create(incorrectCasePlugin).Dispose(); - - SetFileExecutable(correctCasePlugin, executable: true); - SetFileExecutable(incorrectCasePlugin, executable: true); - - var environmentalVariableReader = new Mock(); - environmentalVariableReader.Setup(env => env.GetEnvironmentVariable(EnvironmentVariableConstants.PluginPaths)).Returns($"{correctCasePlugin}{Path.PathSeparator}{incorrectCasePlugin}"); - - var pluginDiscoverer = new PluginDiscoverer(environmentalVariableReader.Object); + using TestDirectory testDirectory = TestDirectory.Create(); + var workingPath = testDirectory.Path; + var pluginFilePath = Path.Combine(workingPath, file); + File.Create(pluginFilePath); + var fileInfo = new FileInfo(pluginFilePath); // Act - var plugins = pluginDiscoverer.GetPluginsInNuGetPluginPaths(); + bool result = PluginDiscoverer.IsValidPluginFile(fileInfo); // Assert - Assert.Contains(plugins, p => p.Path == correctCasePlugin && p.RequiresDotnetHost == false); - Assert.DoesNotContain(plugins, p => p.Path == incorrectCasePlugin && p.RequiresDotnetHost == false); + Assert.Equal(isValid, result); } -#endif [PlatformFact(Platform.Windows)] public void IsValidPluginFile_ExeFile_ReturnsTrue() @@ -580,7 +546,7 @@ public void IsValidPluginFile_ExeFile_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "plugin.exe"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin.exe"); File.Create(pluginFilePath); var fileInfo = new FileInfo(pluginFilePath); @@ -597,7 +563,7 @@ public void IsValidPluginFile_Windows_NonExecutableFile_ReturnsFalse() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var nonPluginFilePath = Path.Combine(workingPath, "plugin.txt"); + var nonPluginFilePath = Path.Combine(workingPath, "nuget-plugin.txt"); File.Create(nonPluginFilePath); var fileInfo = new FileInfo(nonPluginFilePath); @@ -614,7 +580,7 @@ public void IsValidPluginFile_Unix_ExecutableFile_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "plugin"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin"); File.Create(pluginFilePath).Dispose(); #if NET8_0_OR_GREATER @@ -640,7 +606,7 @@ public void IsExecutable_FileIsExecutable_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "plugin"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin"); File.Create(pluginFilePath); // Set execute permissions @@ -661,7 +627,7 @@ public void IsExecutable_FileIsNotExecutable_ReturnsFalse() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "plugin"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin"); File.Create(pluginFilePath); // Remove execute permissions @@ -682,7 +648,7 @@ public void IsExecutable_FileWithSpace_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "plugin with space"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin with space"); File.Create(pluginFilePath).Dispose(); // Set execute permissions From 66db33f3dd0f062fb2ce0bf857864237907ddb16 Mon Sep 17 00:00:00 2001 From: Nigusu Yenework Date: Tue, 25 Feb 2025 08:43:59 -0800 Subject: [PATCH 8/8] test --- .../Plugins/PluginDiscovererTests.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs index 36784b4662b..bbcd4b3a76f 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Plugins/PluginDiscovererTests.cs @@ -546,7 +546,7 @@ public void IsValidPluginFile_ExeFile_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "nuget-plugin.exe"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin-.exe"); File.Create(pluginFilePath); var fileInfo = new FileInfo(pluginFilePath); @@ -563,7 +563,7 @@ public void IsValidPluginFile_Windows_NonExecutableFile_ReturnsFalse() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var nonPluginFilePath = Path.Combine(workingPath, "nuget-plugin.txt"); + var nonPluginFilePath = Path.Combine(workingPath, "nuget-plugin-.txt"); File.Create(nonPluginFilePath); var fileInfo = new FileInfo(nonPluginFilePath); @@ -580,7 +580,7 @@ public void IsValidPluginFile_Unix_ExecutableFile_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "nuget-plugin"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin-"); File.Create(pluginFilePath).Dispose(); #if NET8_0_OR_GREATER @@ -606,7 +606,7 @@ public void IsExecutable_FileIsExecutable_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "nuget-plugin"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin-"); File.Create(pluginFilePath); // Set execute permissions @@ -627,7 +627,7 @@ public void IsExecutable_FileIsNotExecutable_ReturnsFalse() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "nuget-plugin"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin-"); File.Create(pluginFilePath); // Remove execute permissions @@ -648,7 +648,7 @@ public void IsExecutable_FileWithSpace_ReturnsTrue() // Arrange using TestDirectory testDirectory = TestDirectory.Create(); var workingPath = testDirectory.Path; - var pluginFilePath = Path.Combine(workingPath, "nuget-plugin with space"); + var pluginFilePath = Path.Combine(workingPath, "nuget-plugin- with space"); File.Create(pluginFilePath).Dispose(); // Set execute permissions