Skip to content

Commit

Permalink
FixNullRef (#295) (#297)
Browse files Browse the repository at this point in the history
  • Loading branch information
StefH committed Jul 15, 2019
1 parent 4bcc27f commit 1db2bc7
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 52 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
</PropertyGroup>

<PropertyGroup>
<VersionPrefix>1.0.21</VersionPrefix>
<VersionPrefix>1.0.22</VersionPrefix>
</PropertyGroup>

<Choose>
Expand Down
2 changes: 1 addition & 1 deletion GitHubReleaseNotes.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
https://github.com/StefH/GitHubReleaseNotes

GitHubReleaseNotes.exe --output CHANGELOG.md --skip-empty-releases --version 1.0.21.0
GitHubReleaseNotes.exe --output CHANGELOG.md --skip-empty-releases --version 1.0.22.0
46 changes: 23 additions & 23 deletions src/WireMock.Net/Server/FluentMockServer.Admin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,26 +131,26 @@ 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
{
ReadStaticMappingAndAddOrUpdate(filename);
}
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);
}
}
}
Expand All @@ -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))
Expand All @@ -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<MappingModel>(JsonConvert.DeserializeObject(value));
foreach (var mappingModel in mappingModels)
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -405,22 +405,22 @@ 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);
string filename = (!string.IsNullOrEmpty(mapping.Title) ? SanitizeFileName(mapping.Title) : mapping.Guid.ToString()) + ".json";

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 = '_')
Expand Down Expand Up @@ -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);
}
}
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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;
}

Expand Down
30 changes: 15 additions & 15 deletions src/WireMock.Net/Server/FluentMockServer.AdminFiles.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
Expand All @@ -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");
}
Expand All @@ -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,
Expand Down Expand Up @@ -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);
}

Expand All @@ -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.");
}

Expand Down
18 changes: 8 additions & 10 deletions src/WireMock.Net/Server/FluentMockServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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)
{
Expand All @@ -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);
Expand Down Expand Up @@ -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;
}

Expand Down
6 changes: 4 additions & 2 deletions test/WireMock.Net.Tests/FluentMockServerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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("<hello>world</hello>");
}
}
}

0 comments on commit 1db2bc7

Please sign in to comment.