Bumped package version to 1.6.3. Added unit tests for serving files. Fixed issues and improved the security of the serve file extensions and the ability to compress files.

This commit is contained in:
2023-06-28 18:37:46 -07:00
parent d96c44e542
commit c2f60ff19f
4 changed files with 231 additions and 43 deletions

View File

@ -12,29 +12,98 @@ namespace Rest.Net.Tests
{
public class ServeFileTests
{
public string BaseDirectory = null;
public string TestDirectory = null;
public string TestFile = null;
public ServeFileTests()
{
this.TestDirectory = Path.Combine(Environment.CurrentDirectory, "test/");
this.BaseDirectory = Path.Combine(Environment.CurrentDirectory, "test");
if (!Directory.Exists(this.BaseDirectory))
Directory.CreateDirectory(this.BaseDirectory);
this.TestDirectory = Path.Combine(this.BaseDirectory, "test2");
if (!Directory.Exists(this.TestDirectory))
Directory.CreateDirectory(this.TestDirectory);
this.TestFile = Path.Combine(this.TestDirectory, "test.html");
this.TestFile = Path.Combine(this.BaseDirectory, "test.html");
if (!File.Exists(this.TestFile))
File.WriteAllText(this.TestFile, "hello world");
}
[Fact]
public void ServeMultipleShouldWorkForFiles()
public void ServeMultiple_File_ShouldWork()
{
HttpListenerResponseExtensions.ResolveMultiPagePath(Path.Combine(Environment.CurrentDirectory, "test"), "../../test.html", null, out string resolvedPath, out bool isDirecotry).Should().BeTrue();
HttpListenerResponseExtensions.ResolveMultiPagePath(this.BaseDirectory, "/test.html", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirecotry.Should().BeFalse();
isDirectory.Should().BeFalse();
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}
[Fact]
public void ServeMultiple_Directory_ShouldWork()
{
HttpListenerResponseExtensions.ResolveMultiPagePath(this.BaseDirectory, "/test2", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirectory.Should().BeTrue();
resolvedPath.Should().BeEquivalentTo(this.TestDirectory);
}
[Fact]
public void ServeMultiple_NavigatingUp_Should_NotWork()
{
HttpListenerResponseExtensions.ResolveMultiPagePath(this.BaseDirectory, "../test.html", null, out string resolvedPath, out bool isDirectory).Should().BeFalse();
}
[Fact]
public void ServeMultiple_Correct_NavigatingUp_Should_Work()
{
HttpListenerResponseExtensions.ResolveMultiPagePath(this.BaseDirectory, "a/b/../../test.html", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirectory.Should().BeFalse();
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}
[Fact]
public void ServeMultiple_NavigatingUp_Multiple_Should_NotWork()
{
HttpListenerResponseExtensions.ResolveMultiPagePath(this.BaseDirectory, "test/../../test.html", null, out string resolvedPath, out bool isDirectory).Should().BeFalse();
}
[Fact]
public void ServeSingle_File_ShouldWork()
{
HttpListenerResponseExtensions.ResolveSinglePagePath(this.BaseDirectory, "/test.html", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirectory.Should().BeFalse();
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}
[Fact]
public void ServeSingle_Directory_ShouldWork()
{
HttpListenerResponseExtensions.ResolveSinglePagePath(this.BaseDirectory, "/test2", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirectory.Should().BeTrue();
resolvedPath.Should().BeEquivalentTo(this.TestDirectory);
}
[Fact]
public void ServeSingle_File_Route_ShouldWork()
{
HttpListenerResponseExtensions.ResolveSinglePagePath(this.BaseDirectory, "/a/b/test.html", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirectory.Should().BeFalse();
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}