diff --git a/Directory.Build.props b/Directory.Build.props
index f35456164..a1fc5f0e7 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -4,7 +4,7 @@
- 1.0.21
+ 1.0.22
diff --git a/GitHubReleaseNotes.txt b/GitHubReleaseNotes.txt
index 822d051f9..c07cf8394 100644
--- a/GitHubReleaseNotes.txt
+++ b/GitHubReleaseNotes.txt
@@ -1,3 +1,3 @@
https://github.com/StefH/GitHubReleaseNotes
-GitHubReleaseNotes.exe --output CHANGELOG.md --skip-empty-releases --version 1.0.21.0
\ No newline at end of file
+GitHubReleaseNotes.exe --output CHANGELOG.md --skip-empty-releases --version 1.0.22.0
\ No newline at end of file
diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
index 7380eccac..176c3d4db 100644
--- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
@@ -131,18 +131,18 @@ public void ReadStaticMappings([CanBeNull] string folder = null)
{
if (folder == null)
{
- folder = _fileSystemHandler.GetMappingFolder();
+ folder = _settings.FileSystemHandler.GetMappingFolder();
}
- if (!_fileSystemHandler.FolderExists(folder))
+ if (!_settings.FileSystemHandler.FolderExists(folder))
{
- _logger.Info("The Static Mapping folder '{0}' does not exist, reading Static MappingFiles will be skipped.", folder);
+ _settings.Logger.Info("The Static Mapping folder '{0}' does not exist, reading Static MappingFiles will be skipped.", folder);
return;
}
- foreach (string filename in _fileSystemHandler.EnumerateFiles(folder).OrderBy(f => f))
+ foreach (string filename in _settings.FileSystemHandler.EnumerateFiles(folder).OrderBy(f => f))
{
- _logger.Info("Reading Static MappingFile : '{0}'", filename);
+ _settings.Logger.Info("Reading Static MappingFile : '{0}'", filename);
try
{
@@ -150,7 +150,7 @@ public void ReadStaticMappings([CanBeNull] string folder = null)
}
catch
{
- _logger.Error("Static MappingFile : '{0}' could not be read. This file will be skipped.", filename);
+ _settings.Logger.Error("Static MappingFile : '{0}' could not be read. This file will be skipped.", filename);
}
}
}
@@ -172,28 +172,28 @@ public void WatchStaticMappings([CanBeNull] string folder = null)
return;
}
- _logger.Info("Watching folder '{0}' for new, updated and deleted MappingFiles.", folder);
+ _settings.Logger.Info("Watching folder '{0}' for new, updated and deleted MappingFiles.", folder);
var watcher = new EnhancedFileSystemWatcher(folder, "*.json", EnhancedFileSystemWatcherTimeoutMs);
watcher.Created += (sender, args) =>
{
- _logger.Info("MappingFile created : '{0}', reading file.", args.FullPath);
+ _settings.Logger.Info("MappingFile created : '{0}', reading file.", args.FullPath);
if (!ReadStaticMappingAndAddOrUpdate(args.FullPath))
{
- _logger.Error("Unable to read MappingFile '{0}'.", args.FullPath);
+ _settings.Logger.Error("Unable to read MappingFile '{0}'.", args.FullPath);
}
};
watcher.Changed += (sender, args) =>
{
- _logger.Info("MappingFile updated : '{0}', reading file.", args.FullPath);
+ _settings.Logger.Info("MappingFile updated : '{0}', reading file.", args.FullPath);
if (!ReadStaticMappingAndAddOrUpdate(args.FullPath))
{
- _logger.Error("Unable to read MappingFile '{0}'.", args.FullPath);
+ _settings.Logger.Error("Unable to read MappingFile '{0}'.", args.FullPath);
}
};
watcher.Deleted += (sender, args) =>
{
- _logger.Info("MappingFile deleted : '{0}'", args.FullPath);
+ _settings.Logger.Info("MappingFile deleted : '{0}'", args.FullPath);
string filenameWithoutExtension = Path.GetFileNameWithoutExtension(args.FullPath);
if (Guid.TryParse(filenameWithoutExtension, out Guid guidFromFilename))
@@ -220,7 +220,7 @@ public bool ReadStaticMappingAndAddOrUpdate([NotNull] string path)
string filenameWithoutExtension = Path.GetFileNameWithoutExtension(path);
- if (FileHelper.TryReadMappingFileWithRetryAndDelay(_fileSystemHandler, path, out string value))
+ if (FileHelper.TryReadMappingFileWithRetryAndDelay(_settings.FileSystemHandler, path, out string value))
{
var mappingModels = DeserializeObjectToArray(JsonConvert.DeserializeObject(value));
foreach (var mappingModel in mappingModels)
@@ -361,7 +361,7 @@ private ResponseMessage MappingGet(RequestMessage requestMessage)
if (mapping == null)
{
- _logger.Warn("HttpStatusCode set to 404 : Mapping not found");
+ _settings.Logger.Warn("HttpStatusCode set to 404 : Mapping not found");
return ResponseMessageBuilder.Create("Mapping not found", 404);
}
@@ -405,12 +405,12 @@ private void SaveMappingToFile(IMapping mapping, string folder = null)
{
if (folder == null)
{
- folder = _fileSystemHandler.GetMappingFolder();
+ folder = _settings.FileSystemHandler.GetMappingFolder();
}
- if (!_fileSystemHandler.FolderExists(folder))
+ if (!_settings.FileSystemHandler.FolderExists(folder))
{
- _fileSystemHandler.CreateFolder(folder);
+ _settings.FileSystemHandler.CreateFolder(folder);
}
var model = MappingConverter.ToMappingModel(mapping);
@@ -418,9 +418,9 @@ private void SaveMappingToFile(IMapping mapping, string folder = null)
string path = Path.Combine(folder, filename);
- _logger.Info("Saving Mapping file {0}", filename);
+ _settings.Logger.Info("Saving Mapping file {0}", filename);
- _fileSystemHandler.WriteMappingFile(path, JsonConvert.SerializeObject(model, _jsonSerializerSettings));
+ _settings.FileSystemHandler.WriteMappingFile(path, JsonConvert.SerializeObject(model, _jsonSerializerSettings));
}
private static string SanitizeFileName(string name, char replaceChar = '_')
@@ -460,12 +460,12 @@ private ResponseMessage MappingsPost(RequestMessage requestMessage)
}
catch (ArgumentException a)
{
- _logger.Error("HttpStatusCode set to 400 {0}", a);
+ _settings.Logger.Error("HttpStatusCode set to 400 {0}", a);
return ResponseMessageBuilder.Create(a.Message, 400);
}
catch (Exception e)
{
- _logger.Error("HttpStatusCode set to 500 {0}", e);
+ _settings.Logger.Error("HttpStatusCode set to 500 {0}", e);
return ResponseMessageBuilder.Create(e.ToString(), 500);
}
}
@@ -540,7 +540,7 @@ private ResponseMessage RequestGet(RequestMessage requestMessage)
if (entry == null)
{
- _logger.Warn("HttpStatusCode set to 404 : Request not found");
+ _settings.Logger.Warn("HttpStatusCode set to 404 : Request not found");
return ResponseMessageBuilder.Create("Request not found", 404);
}
@@ -683,7 +683,7 @@ private IRequestBuilder InitRequestBuilder(RequestModel requestModel, bool pathO
if (pathOrUrlRequired && !pathOrUrlmatchersValid)
{
- _logger.Error("Path or Url matcher is missing for this mapping, this mapping will not be added.");
+ _settings.Logger.Error("Path or Url matcher is missing for this mapping, this mapping will not be added.");
return null;
}
diff --git a/src/WireMock.Net/Server/FluentMockServer.AdminFiles.cs b/src/WireMock.Net/Server/FluentMockServer.AdminFiles.cs
index 5c72015ab..40dc6374c 100644
--- a/src/WireMock.Net/Server/FluentMockServer.AdminFiles.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.AdminFiles.cs
@@ -16,13 +16,13 @@ private ResponseMessage FilePost(RequestMessage requestMessage)
{
string filename = GetFileNameFromRequestMessage(requestMessage);
- string mappingFolder = _fileSystemHandler.GetMappingFolder();
- if (!_fileSystemHandler.FolderExists(mappingFolder))
+ string mappingFolder = _settings.FileSystemHandler.GetMappingFolder();
+ if (!_settings.FileSystemHandler.FolderExists(mappingFolder))
{
- _fileSystemHandler.CreateFolder(mappingFolder);
+ _settings.FileSystemHandler.CreateFolder(mappingFolder);
}
- _fileSystemHandler.WriteFile(filename, requestMessage.BodyAsBytes);
+ _settings.FileSystemHandler.WriteFile(filename, requestMessage.BodyAsBytes);
return ResponseMessageBuilder.Create("File created");
}
@@ -31,13 +31,13 @@ private ResponseMessage FilePut(RequestMessage requestMessage)
{
string filename = GetFileNameFromRequestMessage(requestMessage);
- if (!_fileSystemHandler.FileExists(filename))
+ if (!_settings.FileSystemHandler.FileExists(filename))
{
- _logger.Info("The file '{0}' does not exist, updating file will be skipped.", filename);
+ _settings.Logger.Info("The file '{0}' does not exist, updating file will be skipped.", filename);
return ResponseMessageBuilder.Create("File is not found", 404);
}
- _fileSystemHandler.WriteFile(filename, requestMessage.BodyAsBytes);
+ _settings.FileSystemHandler.WriteFile(filename, requestMessage.BodyAsBytes);
return ResponseMessageBuilder.Create("File updated");
}
@@ -46,13 +46,13 @@ private ResponseMessage FileGet(RequestMessage requestMessage)
{
string filename = GetFileNameFromRequestMessage(requestMessage);
- if (!_fileSystemHandler.FileExists(filename))
+ if (!_settings.FileSystemHandler.FileExists(filename))
{
- _logger.Info("The file '{0}' does not exist.", filename);
+ _settings.Logger.Info("The file '{0}' does not exist.", filename);
return ResponseMessageBuilder.Create("File is not found", 404);
}
- byte[] bytes = _fileSystemHandler.ReadFile(filename);
+ byte[] bytes = _settings.FileSystemHandler.ReadFile(filename);
var response = new ResponseMessage
{
StatusCode = 200,
@@ -82,9 +82,9 @@ private ResponseMessage FileHead(RequestMessage requestMessage)
{
string filename = GetFileNameFromRequestMessage(requestMessage);
- if (!_fileSystemHandler.FileExists(filename))
+ if (!_settings.FileSystemHandler.FileExists(filename))
{
- _logger.Info("The file '{0}' does not exist.", filename);
+ _settings.Logger.Info("The file '{0}' does not exist.", filename);
return ResponseMessageBuilder.Create(404);
}
@@ -95,13 +95,13 @@ private ResponseMessage FileDelete(RequestMessage requestMessage)
{
string filename = GetFileNameFromRequestMessage(requestMessage);
- if (!_fileSystemHandler.FileExists(filename))
+ if (!_settings.FileSystemHandler.FileExists(filename))
{
- _logger.Info("The file '{0}' does not exist.", filename);
+ _settings.Logger.Info("The file '{0}' does not exist.", filename);
return ResponseMessageBuilder.Create("File is not deleted", 404);
}
- _fileSystemHandler.DeleteFile(filename);
+ _settings.FileSystemHandler.DeleteFile(filename);
return ResponseMessageBuilder.Create("File deleted.");
}
diff --git a/src/WireMock.Net/Server/FluentMockServer.cs b/src/WireMock.Net/Server/FluentMockServer.cs
index 93b0b906d..752782882 100644
--- a/src/WireMock.Net/Server/FluentMockServer.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.cs
@@ -27,8 +27,6 @@ public partial class FluentMockServer : IDisposable
{
private const int ServerStartDelayInMs = 100;
- private readonly IWireMockLogger _logger;
- private readonly IFileSystemHandler _fileSystemHandler;
private readonly IFluentMockServerSettings _settings;
private readonly IOwinSelfHost _httpServer;
private readonly IWireMockMiddlewareOptions _options = new WireMockMiddlewareOptions();
@@ -187,13 +185,13 @@ public static FluentMockServer StartWithAdminInterfaceAndReadStaticMappings(para
private FluentMockServer(IFluentMockServerSettings settings)
{
_settings = settings;
- settings.Logger = settings.Logger ?? new WireMockNullLogger();
- _logger = settings.Logger;
- _fileSystemHandler = settings.FileSystemHandler ?? new LocalFileSystemHandler();
+ // Set default values if not provided
+ _settings.Logger = settings.Logger ?? new WireMockNullLogger();
+ _settings.FileSystemHandler = settings.FileSystemHandler ?? new LocalFileSystemHandler();
- _logger.Info("WireMock.Net by Stef Heyenrath (https://github.com/WireMock-Net/WireMock.Net)");
- _logger.Debug("WireMock.Net server settings {0}", JsonConvert.SerializeObject(settings, Formatting.Indented));
+ _settings.Logger.Info("WireMock.Net by Stef Heyenrath (https://github.com/WireMock-Net/WireMock.Net)");
+ _settings.Logger.Debug("WireMock.Net server settings {0}", JsonConvert.SerializeObject(settings, Formatting.Indented));
if (settings.Urls != null)
{
@@ -205,10 +203,10 @@ private FluentMockServer(IFluentMockServerSettings settings)
Urls = new[] { $"{(settings.UseSSL == true ? "https" : "http")}://localhost:{port}" };
}
- _options.FileSystemHandler = _fileSystemHandler;
+ _options.FileSystemHandler = _settings.FileSystemHandler;
_options.PreWireMockMiddlewareInit = settings.PreWireMockMiddlewareInit;
_options.PostWireMockMiddlewareInit = settings.PostWireMockMiddlewareInit;
- _options.Logger = _logger;
+ _options.Logger = _settings.Logger;
#if USE_ASPNETCORE
_httpServer = new AspNetCoreSelfHost(_options, Urls);
@@ -371,7 +369,7 @@ public void AddGlobalProcessingDelay(TimeSpan delay)
[PublicAPI]
public void AllowPartialMapping(bool allow = true)
{
- _logger.Info("AllowPartialMapping is set to {0}", allow);
+ _settings.Logger.Info("AllowPartialMapping is set to {0}", allow);
_options.AllowPartialMapping = allow;
}
diff --git a/test/WireMock.Net.Tests/FluentMockServerTests.cs b/test/WireMock.Net.Tests/FluentMockServerTests.cs
index 4499c0630..97bdead27 100644
--- a/test/WireMock.Net.Tests/FluentMockServerTests.cs
+++ b/test/WireMock.Net.Tests/FluentMockServerTests.cs
@@ -175,9 +175,11 @@ public async Task FluentMockServer_Should_exclude_restrictedResponseHeader()
}
[Theory]
- [InlineData("GET")]
- [InlineData("TRACE")]
[InlineData("DELETE")]
+#if !NET452
+ [InlineData("TRACE")]
+ [InlineData("GET")]
+#endif
public async Task FluentMockServer_Should_exclude_body_for_methods_where_body_is_definitely_disallowed(string method)
{
// Assign
diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyFromFileTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyFromFileTests.cs
new file mode 100644
index 000000000..4d316b55d
--- /dev/null
+++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithBodyFromFileTests.cs
@@ -0,0 +1,45 @@
+using FluentAssertions;
+using System.IO;
+using System.Net;
+using System.Net.Http;
+using System.Threading.Tasks;
+using WireMock.RequestBuilders;
+using WireMock.ResponseBuilders;
+using WireMock.Server;
+using Xunit;
+
+namespace WireMock.Net.Tests.ResponseBuilders
+{
+ public class ResponseWithBodyFromFileTests
+ {
+ [Fact]
+ public async Task Response_ProvideResponse_WithBodyFromFile()
+ {
+ // Arrange
+ var server = FluentMockServer.Start();
+
+ string path = Path.Combine(Directory.GetCurrentDirectory(), "__admin", "mappings", "MyXmlResponse.xml");
+
+ server
+ .Given(
+ Request
+ .Create()
+ .UsingGet()
+ .WithPath("/v1/content")
+ )
+ .RespondWith(
+ Response
+ .Create()
+ .WithStatusCode(HttpStatusCode.OK)
+ .WithHeader("Content-Type", "application/xml")
+ .WithBodyFromFile(path)
+ );
+
+ // Act
+ var response = await new HttpClient().GetStringAsync("http://localhost:" + server.Ports[0] + "/v1/content");
+
+ // Assert
+ response.Should().Contain("world");
+ }
+ }
+}
\ No newline at end of file