-
-
Notifications
You must be signed in to change notification settings - Fork 196
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improved relative path checking based on file existence (#411)
* Improved relative path checking based on file existence If the file exists at the relative path, then use it. If not, then use the path as is. * Apply File.Exists logic to ReadResponseBodyAsString as well * Make path handling more robust since path is user defined * Unit tests for relative path feature * Replace all back and forward slashes with system dependent DirectorySeparatorChar * Attempt fix broken directory separator chars for Unix platforms * Revert wrapping GetMappingFolder with CleanPath * Move CleanPath logic to its own class * Remove whitespace * Remove more whitespace * Improve CleanPath method * Move PathUtils tests to separate class Add another test to ResponseWithBodyFromFileTests * Fix Response_ProvideResponse_WithBodyFromFile_InAdminMappingFolder * Debug Linux CI build * Debug Linux CI * print all files from admin mappings folder * Debug CleanPath * Fix removed leading directory separator char in Linux breaks file path Remove debugging statements * Move combine to PathUtils * PathUtils + PathUtilsTests * Remove replicated (3x) tests throughout ResponseWithBodyFromFileTests Co-authored-by: Stef Heyenrath <Stef.Heyenrath@gmail.com>
- Loading branch information
1 parent
06ae9d7
commit 5e76a82
Showing
6 changed files
with
155 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
using System.IO; | ||
|
||
namespace WireMock.Util | ||
{ | ||
internal static class PathUtils | ||
{ | ||
/// <summary> | ||
/// Robust handling of the user defined path. | ||
/// Also supports Unix and Windows platforms | ||
/// </summary> | ||
/// <param name="path">The path to clean</param> | ||
public static string CleanPath(string path) | ||
{ | ||
return path?.Replace('/', Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar); | ||
} | ||
|
||
/// <summary> | ||
/// Removes leading directory separator chars from the filepath, which could break Path.Combine | ||
/// </summary> | ||
/// <param name="path">The path to remove the loading DirectorySeparatorChars</param> | ||
public static string RemoveLeadingDirectorySeparators(string path) | ||
{ | ||
return path?.TrimStart(new[] { Path.DirectorySeparatorChar }); | ||
} | ||
|
||
/// <summary> | ||
/// Combine two paths | ||
/// </summary> | ||
/// <param name="root">The root path</param> | ||
/// <param name="path">The path</param> | ||
public static string Combine(string root, string path) | ||
{ | ||
return Path.Combine(root, RemoveLeadingDirectorySeparators(path)); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
using NFluent; | ||
using System.IO; | ||
using WireMock.Util; | ||
using Xunit; | ||
|
||
namespace WireMock.Net.Tests.Util | ||
{ | ||
public class PathUtilsTests | ||
{ | ||
[Theory] | ||
[InlineData(@"subdirectory/MyXmlResponse.xml")] | ||
[InlineData(@"subdirectory\MyXmlResponse.xml")] | ||
public void PathUtils_CleanPath(string path) | ||
{ | ||
// Act | ||
var cleanPath = PathUtils.CleanPath(path); | ||
|
||
// Assert | ||
Check.That(cleanPath).Equals("subdirectory" + Path.DirectorySeparatorChar + "MyXmlResponse.xml"); | ||
} | ||
|
||
[Theory] | ||
[InlineData(null, null)] | ||
[InlineData("", "")] | ||
[InlineData("a", "a")] | ||
[InlineData(@"/", "")] | ||
[InlineData(@"//", "")] | ||
[InlineData(@"//a", "a")] | ||
[InlineData(@"\", "")] | ||
[InlineData(@"\\", "")] | ||
[InlineData(@"\\a", "a")] | ||
public void PathUtils_CleanPath_RemoveLeadingDirectorySeparators(string path, string expected) | ||
{ | ||
// Arrange | ||
var cleanPath = PathUtils.CleanPath(path); | ||
|
||
// Act | ||
var withoutDirectorySeparators = PathUtils.RemoveLeadingDirectorySeparators(cleanPath); | ||
|
||
// Assert | ||
Check.That(withoutDirectorySeparators).Equals(expected); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 3 additions & 0 deletions
3
test/WireMock.Net.Tests/__admin/mappings/subdirectory/MyXmlResponse.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<xml> | ||
<hello>world</hello> | ||
</xml> |