mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-01-19 00:27:04 +01:00
@@ -9,6 +9,7 @@ namespace WireMock.Http
|
||||
/// </summary>
|
||||
public static class PortUtil
|
||||
{
|
||||
private static readonly IPEndPoint DefaultLoopbackEndpoint = new IPEndPoint(IPAddress.Loopback, port: 0);
|
||||
private static readonly Regex UrlDetailsRegex = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>\d+)?/", RegexOptions.Compiled);
|
||||
|
||||
/// <summary>
|
||||
@@ -17,17 +18,10 @@ namespace WireMock.Http
|
||||
/// <remarks>see http://stackoverflow.com/questions/138043/find-the-next-tcp-port-in-net.</remarks>
|
||||
public static int FindFreeTcpPort()
|
||||
{
|
||||
TcpListener tcpListener = null;
|
||||
try
|
||||
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
|
||||
{
|
||||
tcpListener = new TcpListener(IPAddress.Loopback, 0);
|
||||
tcpListener.Start();
|
||||
|
||||
return ((IPEndPoint)tcpListener.LocalEndpoint).Port;
|
||||
}
|
||||
finally
|
||||
{
|
||||
tcpListener?.Stop();
|
||||
socket.Bind(DefaultLoopbackEndpoint);
|
||||
return ((IPEndPoint)socket.LocalEndPoint).Port;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace WireMock.Owin
|
||||
// Set start
|
||||
if (!_options.Scenarios.ContainsKey(mapping.Scenario) && mapping.IsStartState)
|
||||
{
|
||||
_options.Scenarios.Add(mapping.Scenario, null);
|
||||
_options.Scenarios.TryAdd(mapping.Scenario, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using WireMock.Logging;
|
||||
using WireMock.Matchers;
|
||||
@@ -23,7 +22,9 @@ namespace WireMock.Owin
|
||||
|
||||
public bool AllowPartialMapping { get; set; }
|
||||
|
||||
public IDictionary<Guid, Mapping> Mappings { get; } = new ConcurrentDictionary<Guid, Mapping>();
|
||||
public ConcurrentDictionary<Guid, Mapping> Mappings { get; } = new ConcurrentDictionary<Guid, Mapping>(); // Checked
|
||||
|
||||
public ConcurrentDictionary<string, object> Scenarios { get; } = new ConcurrentDictionary<string, object>(); // Checked
|
||||
|
||||
public ObservableCollection<LogEntry> LogEntries { get; } = new ConcurentObservableCollection<LogEntry>();
|
||||
|
||||
@@ -31,8 +32,6 @@ namespace WireMock.Owin
|
||||
|
||||
public int? MaxRequestLogCount { get; set; }
|
||||
|
||||
public IDictionary<string, object> Scenarios { get; } = new ConcurrentDictionary<string, object>();
|
||||
|
||||
#if !NETSTANDARD
|
||||
public Action<IAppBuilder> PreWireMockMiddlewareInit { get; set; }
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using WireMock.Util;
|
||||
@@ -8,14 +7,14 @@ using WireMock.Validation;
|
||||
namespace WireMock
|
||||
{
|
||||
/// <summary>
|
||||
/// The response.
|
||||
/// The ResponseMessage.
|
||||
/// </summary>
|
||||
public class ResponseMessage
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the headers.
|
||||
/// </summary>
|
||||
public IDictionary<string, WireMockList<string>> Headers { get; set; } = new ConcurrentDictionary<string, WireMockList<string>>();
|
||||
public IDictionary<string, WireMockList<string>> Headers { get; set; } = new Dictionary<string, WireMockList<string>>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status code.
|
||||
|
||||
@@ -210,7 +210,7 @@ namespace WireMock.Server
|
||||
if (settings.SaveMapping)
|
||||
{
|
||||
var mapping = ToMapping(requestMessage, responseMessage, settings.BlackListedHeaders ?? new string[] { });
|
||||
_options.Mappings.Add(mapping.Guid, mapping);
|
||||
_options.Mappings.TryAdd(mapping.Guid, mapping);
|
||||
|
||||
if (settings.SaveMappingToFile)
|
||||
{
|
||||
@@ -577,7 +577,7 @@ namespace WireMock.Server
|
||||
#region Scenarios
|
||||
private ResponseMessage ScenariosGet(RequestMessage requestMessage)
|
||||
{
|
||||
var scenarios = Scenarios.Select(s => new
|
||||
var scenarios = Scenarios.ToArray().Select(s => new
|
||||
{
|
||||
Name = s.Key,
|
||||
Started = s.Value != null,
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace WireMock.Server
|
||||
/// Gets the scenarios.
|
||||
/// </summary>
|
||||
[PublicAPI]
|
||||
public IDictionary<string, object> Scenarios => new ConcurrentDictionary<string, object>(_options.Scenarios);
|
||||
public ConcurrentDictionary<string, object> Scenarios => new ConcurrentDictionary<string, object>(_options.Scenarios); // Checked
|
||||
|
||||
#region Start/Stop
|
||||
/// <summary>
|
||||
@@ -292,9 +292,9 @@ namespace WireMock.Server
|
||||
[PublicAPI]
|
||||
public void ResetMappings()
|
||||
{
|
||||
foreach (var nonAdmin in _options.Mappings.Where(m => !m.Value.IsAdminInterface))
|
||||
foreach (var nonAdmin in _options.Mappings.ToArray().Where(m => !m.Value.IsAdminInterface))
|
||||
{
|
||||
_options.Mappings.Remove(nonAdmin);
|
||||
_options.Mappings.TryRemove(nonAdmin.Key, out _);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ namespace WireMock.Server
|
||||
// Check a mapping exists with the same GUID, if so, remove it.
|
||||
if (_options.Mappings.ContainsKey(guid))
|
||||
{
|
||||
return _options.Mappings.Remove(guid);
|
||||
return _options.Mappings.TryRemove(guid, out _);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -317,7 +317,7 @@ namespace WireMock.Server
|
||||
private bool DeleteMapping(string path)
|
||||
{
|
||||
// Check a mapping exists with the same path, if so, remove it.
|
||||
var mapping = _options.Mappings.FirstOrDefault(entry => string.Equals(entry.Value.Path, path, StringComparison.OrdinalIgnoreCase));
|
||||
var mapping = _options.Mappings.ToArray().FirstOrDefault(entry => string.Equals(entry.Value.Path, path, StringComparison.OrdinalIgnoreCase));
|
||||
return DeleteMapping(mapping.Key);
|
||||
}
|
||||
|
||||
@@ -415,7 +415,7 @@ namespace WireMock.Server
|
||||
}
|
||||
else
|
||||
{
|
||||
_options.Mappings.Add(mapping.Guid, mapping);
|
||||
_options.Mappings.TryAdd(mapping.Guid, mapping);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user