diff --git a/README.md b/README.md
index 3a0ade6c..6a9953bc 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
# WireMock.Net
-A C# .NET version based on https://github.com/alexvictoor/WireMock which tries to mimic the functionality from http://WireMock.org
+A C# .NET version based on https://github.com/alexvictoor/WireMock which mimics the functionality from http://WireMock.org
[](https://ci.appveyor.com/project/StefH/wiremock-net)
-[](https://www.nuget.org/packages/WireMock.Net)
+[](https://www.nuget.org/packages/WireMock.Net)
Based on class HttpListener from the .net framework, it is very lightweight and have no external dependencies.
diff --git a/src/WireMock.Net/Http/Ports.cs b/src/WireMock.Net/Http/PortUtil.cs
similarity index 96%
rename from src/WireMock.Net/Http/Ports.cs
rename to src/WireMock.Net/Http/PortUtil.cs
index 4fa6d268..223d2535 100644
--- a/src/WireMock.Net/Http/Ports.cs
+++ b/src/WireMock.Net/Http/PortUtil.cs
@@ -6,7 +6,7 @@ namespace WireMock.Http
///
/// The ports.
///
- public static class Ports
+ public static class PortUtil
{
///
/// The find free TCP port.
diff --git a/src/WireMock.Net/Http/TinyHttpServer.cs b/src/WireMock.Net/Http/TinyHttpServer.cs
index c2502969..61acb0e8 100644
--- a/src/WireMock.Net/Http/TinyHttpServer.cs
+++ b/src/WireMock.Net/Http/TinyHttpServer.cs
@@ -1,7 +1,10 @@
using System;
+using System.Collections.Generic;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
+using JetBrains.Annotations;
+using WireMock.Validation;
namespace WireMock.Http
{
@@ -24,20 +27,43 @@ namespace WireMock.Http
///
public bool IsStarted { get; private set; }
+ ///
+ /// Gets the url.
+ ///
+ ///
+ /// The urls.
+ ///
+ public List Urls { get; } = new List();
+
+ ///
+ /// Gets the ports.
+ ///
+ ///
+ /// The ports.
+ ///
+ public List Ports { get; } = new List();
+
///
/// Initializes a new instance of the class.
///
- /// The urls.
+ /// The uriPrefixes.
/// The http handler.
- public TinyHttpServer(string[] urls, Action httpHandler)
+ public TinyHttpServer([NotNull] Action httpHandler, [NotNull] params string[] uriPrefixes)
{
+ Check.NotNull(httpHandler, nameof(httpHandler));
+ Check.NotEmpty(uriPrefixes, nameof(uriPrefixes));
+
_httpHandler = httpHandler;
// Create a listener.
_listener = new HttpListener();
- foreach (string urlPrefix in urls)
+ foreach (string uriPrefix in uriPrefixes)
{
- _listener.Prefixes.Add(urlPrefix);
+ var uri = new Uri(uriPrefix);
+ Urls.Add(uri);
+ Ports.Add(uri.Port);
+
+ _listener.Prefixes.Add(uriPrefix);
}
}
diff --git a/src/WireMock.Net/ResponseBuilders/IDelayResponseBuilder.cs b/src/WireMock.Net/ResponseBuilders/IDelayResponseBuilder.cs
index eb94efc9..458d3dd7 100644
--- a/src/WireMock.Net/ResponseBuilders/IDelayResponseBuilder.cs
+++ b/src/WireMock.Net/ResponseBuilders/IDelayResponseBuilder.cs
@@ -1,5 +1,4 @@
using System;
-using JetBrains.Annotations;
namespace WireMock.ResponseBuilders
{
diff --git a/src/WireMock.Net/ResponseBuilders/IHeadersResponseBuilder.cs b/src/WireMock.Net/ResponseBuilders/IHeadersResponseBuilder.cs
index 32300e1d..4a2b8054 100644
--- a/src/WireMock.Net/ResponseBuilders/IHeadersResponseBuilder.cs
+++ b/src/WireMock.Net/ResponseBuilders/IHeadersResponseBuilder.cs
@@ -1,5 +1,4 @@
-using System.Collections;
-using System.Collections.Generic;
+using System.Collections.Generic;
using JetBrains.Annotations;
namespace WireMock.ResponseBuilders
diff --git a/src/WireMock.Net/Server/FluentMockServer.cs b/src/WireMock.Net/Server/FluentMockServer.cs
index cb73f42e..2fe4b0db 100644
--- a/src/WireMock.Net/Server/FluentMockServer.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.cs
@@ -32,6 +32,14 @@ namespace WireMock.Server
private TimeSpan _requestProcessingDelay = TimeSpan.Zero;
+ ///
+ /// Gets the ports.
+ ///
+ ///
+ /// The ports.
+ ///
+ public List Ports { get; }
+
///
/// Gets the urls.
///
@@ -77,7 +85,7 @@ namespace WireMock.Server
Check.Condition(port, p => p >= 0, nameof(port));
if (port == 0)
- port = Ports.FindFreeTcpPort();
+ port = PortUtil.FindFreeTcpPort();
return new FluentMockServer(false, port, ssl);
}
@@ -107,7 +115,7 @@ namespace WireMock.Server
Check.Condition(port, p => p >= 0, nameof(port));
if (port == 0)
- port = Ports.FindFreeTcpPort();
+ port = PortUtil.FindFreeTcpPort();
return new FluentMockServer(true, port, ssl);
}
@@ -133,7 +141,9 @@ namespace WireMock.Server
{
Urls = urls;
- _httpServer = new TinyHttpServer(urls, HandleRequestAsync);
+ _httpServer = new TinyHttpServer(HandleRequestAsync, urls);
+ Ports = _httpServer.Ports;
+
_httpServer.Start();
if (startAdminInterface)
@@ -142,7 +152,6 @@ namespace WireMock.Server
}
}
-
///
/// Stop this server.
///
diff --git a/src/WireMock.Net/project.json b/src/WireMock.Net/project.json
index 4de32033..65ba6292 100644
--- a/src/WireMock.Net/project.json
+++ b/src/WireMock.Net/project.json
@@ -1,5 +1,5 @@
{
- "version": "1.0.0.0",
+ "version": "1.0.1.0",
"title": "WireMock.Net",
"description": "Lightweight Http Mocking Server for .Net, inspired by WireMock from the Java landscape.",
"authors": [ "Alexandre Victoor", "Stef Heyenrath" ],
@@ -15,7 +15,7 @@
"projectUrl": "https://github.com/StefH/WireMock.Net",
"iconUrl": "https://raw.githubusercontent.com/StefH/WireMock.Net/master/WireMock.Net-Logo.png",
"licenseUrl": "https://raw.githubusercontent.com/StefH/WireMock.Net/master/LICENSE",
- "releaseNotes": "First version"
+ "releaseNotes": "Added Admin-Interface"
},
"buildOptions": {
diff --git a/test/WireMock.Net.Tests/FluentMockServerTests.cs b/test/WireMock.Net.Tests/FluentMockServerTests.cs
index f98e16ef..f6b2e0b6 100644
--- a/test/WireMock.Net.Tests/FluentMockServerTests.cs
+++ b/test/WireMock.Net.Tests/FluentMockServerTests.cs
@@ -71,7 +71,7 @@ namespace WireMock.Net.Tests
_server = FluentMockServer.Start();
// when
- await new HttpClient().GetAsync("http://localhost:" + _server.Port + "/foo");
+ await new HttpClient().GetAsync("http://localhost:" + _server.Ports[0] + "/foo");
// then
Check.That(_server.LogEntries).HasSize(1);
@@ -95,7 +95,7 @@ namespace WireMock.Net.Tests
.WithBody(@"{ msg: ""Hello world!""}"));
// when
- var response = await new HttpClient().GetStringAsync("http://localhost:" + _server.Port + "/foo");
+ var response = await new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo");
// then
Check.That(response).IsEqualTo(@"{ msg: ""Hello world!""}");
@@ -110,7 +110,7 @@ namespace WireMock.Net.Tests
_server.Given(Request.Create().WithPath("/foo").UsingGet()).RespondWith(Response.Create().WithBodyAsBase64("SGVsbG8gV29ybGQ/"));
// when
- var response = await new HttpClient().GetStringAsync("http://localhost:" + _server.Port + "/foo");
+ var response = await new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo");
// then
Check.That(response).IsEqualTo("Hello World?");
@@ -123,7 +123,7 @@ namespace WireMock.Net.Tests
_server = FluentMockServer.Start();
// when
- var response = await new HttpClient().GetAsync("http://localhost:" + _server.Port + "/foo");
+ var response = await new HttpClient().GetAsync("http://localhost:" + _server.Ports[0] + "/foo");
// then
Check.That(response.StatusCode).IsEqualTo(HttpStatusCode.NotFound);
@@ -137,8 +137,8 @@ namespace WireMock.Net.Tests
_server = FluentMockServer.Start();
// when
- await new HttpClient().GetAsync("http://localhost:" + _server.Port + "/foo");
- await new HttpClient().GetAsync("http://localhost:" + _server.Port + "/bar");
+ await new HttpClient().GetAsync("http://localhost:" + _server.Ports[0] + "/foo");
+ await new HttpClient().GetAsync("http://localhost:" + _server.Ports[0] + "/bar");
// then
var result = _server.SearchLogsFor(Request.Create().WithPath(new RegexMatcher("^/b.*"))).ToList();
@@ -146,7 +146,7 @@ namespace WireMock.Net.Tests
var requestLogged = result.First();
Check.That(requestLogged.RequestMessage.Path).IsEqualTo("/bar");
- Check.That(requestLogged.RequestMessage.Url).IsEqualTo("http://localhost:" + _server.Port + "/bar");
+ Check.That(requestLogged.RequestMessage.Url).IsEqualTo("http://localhost:" + _server.Ports[0] + "/bar");
}
[Test]
@@ -156,7 +156,7 @@ namespace WireMock.Net.Tests
_server = FluentMockServer.Start();
// when
- await new HttpClient().GetAsync("http://localhost:" + _server.Port + "/foo");
+ await new HttpClient().GetAsync("http://localhost:" + _server.Ports[0] + "/foo");
_server.Reset();
// then
@@ -180,7 +180,7 @@ namespace WireMock.Net.Tests
_server.Reset();
// then
- Check.ThatAsyncCode(() => new HttpClient().GetStringAsync("http://localhost:" + _server.Port + "/foo"))
+ Check.ThatAsyncCode(() => new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo"))
.ThrowsAny();
}
@@ -206,7 +206,7 @@ namespace WireMock.Net.Tests
.WithBody("REDIRECT SUCCESSFUL"));
// when
- var response = await new HttpClient().GetStringAsync("http://localhost:" + _server.Port + "/foo");
+ var response = await new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo");
// then
Check.That(response).IsEqualTo("REDIRECT SUCCESSFUL");
@@ -228,7 +228,7 @@ namespace WireMock.Net.Tests
// when
var watch = new Stopwatch();
watch.Start();
- await new HttpClient().GetStringAsync("http://localhost:" + _server.Port + "/foo");
+ await new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo");
watch.Stop();
// then
@@ -248,7 +248,7 @@ namespace WireMock.Net.Tests
// when
var watch = new Stopwatch();
watch.Start();
- await new HttpClient().GetStringAsync("http://localhost:" + _server.Port + "/foo");
+ await new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo");
watch.Stop();
// then
diff --git a/test/WireMock.Net.Tests/Http/TinyHttpServerTests.cs b/test/WireMock.Net.Tests/Http/TinyHttpServerTests.cs
index 84880b58..099dac0d 100644
--- a/test/WireMock.Net.Tests/Http/TinyHttpServerTests.cs
+++ b/test/WireMock.Net.Tests/Http/TinyHttpServerTests.cs
@@ -22,10 +22,10 @@ namespace WireMock.Net.Tests.Http
public void Should_call_handler_on_request()
{
// given
- var port = Ports.FindFreeTcpPort();
+ var port = PortUtil.FindFreeTcpPort();
bool called = false;
var urlPrefix = "http://localhost:" + port + "/";
- var server = new TinyHttpServer(urlPrefix, ctx => called = true);
+ var server = new TinyHttpServer(ctx => called = true, urlPrefix);
server.Start();
// when
diff --git a/test/WireMock.Net.Tests/HttpListenerRequestMapperTests.cs b/test/WireMock.Net.Tests/HttpListenerRequestMapperTests.cs
index 6fb4923a..8b155a91 100644
--- a/test/WireMock.Net.Tests/HttpListenerRequestMapperTests.cs
+++ b/test/WireMock.Net.Tests/HttpListenerRequestMapperTests.cs
@@ -104,7 +104,7 @@ namespace WireMock.Net.Tests
{
private static volatile RequestMessage _lastRequestMessage;
- private MapperServer(string urlPrefix, Action httpHandler) : base(urlPrefix, httpHandler)
+ private MapperServer(Action httpHandler, string urlPrefix) : base(httpHandler, urlPrefix)
{
}
@@ -125,16 +125,16 @@ namespace WireMock.Net.Tests
public new static MapperServer Start()
{
- var port = Ports.FindFreeTcpPort();
+ int port = PortUtil.FindFreeTcpPort();
UrlPrefix = "http://localhost:" + port + "/";
var server = new MapperServer(
- UrlPrefix,
context =>
{
LastRequestMessage = new HttpListenerRequestMapper().Map(context.Request);
context.Response.Close();
- });
+ }, UrlPrefix);
((TinyHttpServer)server).Start();
+
return server;
}
diff --git a/test/WireMock.Net.Tests/HttpListenerResponseMapperTests.cs b/test/WireMock.Net.Tests/HttpListenerResponseMapperTests.cs
index 8e72c3e3..cd0326c6 100644
--- a/test/WireMock.Net.Tests/HttpListenerResponseMapperTests.cs
+++ b/test/WireMock.Net.Tests/HttpListenerResponseMapperTests.cs
@@ -70,10 +70,7 @@ namespace WireMock.Net.Tests
[TearDown]
public void StopServer()
{
- if (_server != null)
- {
- _server.Stop();
- }
+ _server?.Stop();
}
///
@@ -84,17 +81,16 @@ namespace WireMock.Net.Tests
///
public HttpListenerResponse CreateHttpListenerResponse()
{
- var port = Ports.FindFreeTcpPort();
+ var port = PortUtil.FindFreeTcpPort();
var urlPrefix = "http://localhost:" + port + "/";
var responseReady = new AutoResetEvent(false);
HttpListenerResponse response = null;
_server = new TinyHttpServer(
- urlPrefix,
context =>
{
response = context.Response;
responseReady.Set();
- });
+ }, urlPrefix);
_server.Start();
_responseMsgTask = new HttpClient().GetAsync(urlPrefix);
responseReady.WaitOne();