Skip to content

Commit b6eff6b

Browse files
authored
Add back constructor with port and protocol (#341)
1 parent 0bd55ec commit b6eff6b

File tree

2 files changed

+184
-1
lines changed

2 files changed

+184
-1
lines changed

nanoFramework.WebServer/WebServer.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,16 @@ public static UrlParameter[] ExtractRouteParameters(string route, string rawUrl,
258258

259259
#region Constructors
260260

261+
/// <summary>
262+
/// Instantiates a new web server.
263+
/// </summary>
264+
/// <param name="port">Port number to listen on.</param>
265+
/// <param name="protocol"><see cref="HttpProtocol"/> version to use with web server.</param>
266+
public WebServer(
267+
int port,
268+
HttpProtocol protocol) : this(port, protocol, null, null)
269+
{ }
270+
261271
/// <summary>
262272
/// Instantiates a new web server.
263273
/// </summary>

tests/nanoFramework.WebServer.Tests/WebServerTests.cs

Lines changed: 174 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
// See LICENSE file in the project root for full license information.
44
//
55

6-
using nanoFramework.TestFramework;
76
using System;
7+
using System.Net;
8+
using nanoFramework.TestFramework;
89

910
namespace nanoFramework.WebServer.Tests
1011
{
@@ -201,5 +202,177 @@ public void ExtractRouteParameters_Should_HandleQueryParameters()
201202
Assert.AreEqual("id", parameters[0].Name, "Parameter name should be 'id'");
202203
Assert.AreEqual("123", parameters[0].Value, "Parameter value should be '123'");
203204
}
205+
206+
[TestMethod]
207+
public void WebServerConstructors()
208+
{
209+
// Test basic constructor with port and protocol only (HTTP)
210+
var httpServer = new WebServer(8080, HttpProtocol.Http);
211+
Assert.AreEqual(8080, httpServer.Port);
212+
Assert.AreEqual(HttpProtocol.Http, httpServer.Protocol);
213+
httpServer.Dispose();
214+
215+
// Test basic constructor with port and protocol only (HTTPS)
216+
var httpsServer = new WebServer(8443, HttpProtocol.Https);
217+
Assert.AreEqual(8443, httpsServer.Port);
218+
Assert.AreEqual(HttpProtocol.Https, httpsServer.Protocol);
219+
httpsServer.Dispose();
220+
}
221+
222+
[TestMethod]
223+
public void WebServerConstructor_WithIPAddress_HTTP()
224+
{
225+
// Test constructor with IP address for HTTP
226+
var address = IPAddress.Parse("127.0.0.1");
227+
var server = new WebServer(8080, HttpProtocol.Http, address);
228+
229+
Assert.AreEqual(8080, server.Port);
230+
Assert.AreEqual(HttpProtocol.Http, server.Protocol);
231+
server.Dispose();
232+
}
233+
234+
[TestMethod]
235+
public void WebServerConstructor_WithIPAddress_HTTPS()
236+
{
237+
// Test constructor with IP address for HTTPS
238+
var address = IPAddress.Parse("192.168.1.100");
239+
var server = new WebServer(8443, HttpProtocol.Https, address);
240+
241+
Assert.AreEqual(8443, server.Port);
242+
Assert.AreEqual(HttpProtocol.Https, server.Protocol);
243+
server.Dispose();
244+
}
245+
246+
[TestMethod]
247+
public void WebServerConstructor_WithoutIPAddress()
248+
{
249+
// Test constructor without (should bind to default interface)
250+
var server = new WebServer(9000, HttpProtocol.Http);
251+
252+
Assert.AreEqual(9000, server.Port);
253+
Assert.AreEqual(HttpProtocol.Http, server.Protocol);
254+
server.Dispose();
255+
}
256+
257+
[TestMethod]
258+
public void WebServerConstructor_WithControllers_HTTP()
259+
{
260+
// Test constructor with controllers for HTTP
261+
var controllers = new Type[] { typeof(TestController) };
262+
var server = new WebServer(8080, HttpProtocol.Http, controllers);
263+
264+
Assert.AreEqual(8080, server.Port);
265+
Assert.AreEqual(HttpProtocol.Http, server.Protocol);
266+
server.Dispose();
267+
}
268+
269+
[TestMethod]
270+
public void WebServerConstructor_WithControllers_HTTPS()
271+
{
272+
// Test constructor with controllers for HTTPS
273+
var controllers = new Type[] { typeof(TestController), typeof(AnotherTestController) };
274+
var server = new WebServer(8443, HttpProtocol.Https, controllers);
275+
276+
Assert.AreEqual(8443, server.Port);
277+
Assert.AreEqual(HttpProtocol.Https, server.Protocol);
278+
server.Dispose();
279+
}
280+
281+
[TestMethod]
282+
public void WebServerConstructor_WithEmptyControllers()
283+
{
284+
// Test constructor with empty controllers array
285+
var controllers = new Type[0];
286+
var server = new WebServer(9002, HttpProtocol.Http, controllers);
287+
288+
Assert.AreEqual(9002, server.Port);
289+
Assert.AreEqual(HttpProtocol.Http, server.Protocol);
290+
server.Dispose();
291+
}
292+
293+
[TestMethod]
294+
public void WebServerConstructor_FullConstructor_HTTP()
295+
{
296+
// Test full constructor with IP address and controllers for HTTP
297+
var address = IPAddress.Parse("10.0.0.1");
298+
var controllers = new Type[] { typeof(TestController) };
299+
var server = new WebServer(8080, HttpProtocol.Http, address, controllers);
300+
301+
Assert.AreEqual(8080, server.Port);
302+
Assert.AreEqual(HttpProtocol.Http, server.Protocol);
303+
server.Dispose();
304+
}
305+
306+
[TestMethod]
307+
public void WebServerConstructor_FullConstructor_HTTPS()
308+
{
309+
// Test full constructor with IP address and controllers for HTTPS
310+
var address = IPAddress.Parse("172.16.0.1");
311+
var controllers = new Type[] { typeof(TestController), typeof(AnotherTestController) };
312+
var server = new WebServer(8443, HttpProtocol.Https, address, controllers);
313+
314+
Assert.AreEqual(8443, server.Port);
315+
Assert.AreEqual(HttpProtocol.Https, server.Protocol);
316+
server.Dispose();
317+
}
318+
319+
[TestMethod]
320+
public void WebServerConstructor_IsRunningProperty()
321+
{
322+
// Test IsRunning property is false initially for all constructor variations
323+
var server1 = new WebServer(8080, HttpProtocol.Http);
324+
var server2 = new WebServer(8081, HttpProtocol.Http, IPAddress.Parse("127.0.0.1"));
325+
var server3 = new WebServer(8082, HttpProtocol.Http, new Type[] { typeof(TestController) });
326+
var server4 = new WebServer(8083, HttpProtocol.Http, IPAddress.Parse("127.0.0.1"), new Type[] { typeof(TestController) });
327+
328+
Assert.IsFalse(server1.IsRunning);
329+
Assert.IsFalse(server2.IsRunning);
330+
Assert.IsFalse(server3.IsRunning);
331+
Assert.IsFalse(server4.IsRunning);
332+
333+
server1.Dispose();
334+
server2.Dispose();
335+
server3.Dispose();
336+
server4.Dispose();
337+
}
338+
339+
[TestMethod]
340+
public void WebServerConstructor_DifferentPortNumbers()
341+
{
342+
// Test various port numbers across different constructor overloads
343+
var server1 = new WebServer(80, HttpProtocol.Http);
344+
var server2 = new WebServer(443, HttpProtocol.Https, IPAddress.Parse("127.0.0.1"));
345+
var server3 = new WebServer(3000, HttpProtocol.Http, new Type[] { typeof(TestController) });
346+
var server4 = new WebServer(5000, HttpProtocol.Https, IPAddress.Parse("127.0.0.1"), new Type[] { typeof(TestController) });
347+
348+
Assert.AreEqual(80, server1.Port);
349+
Assert.AreEqual(443, server2.Port);
350+
Assert.AreEqual(3000, server3.Port);
351+
Assert.AreEqual(5000, server4.Port);
352+
353+
server1.Dispose();
354+
server2.Dispose();
355+
server3.Dispose();
356+
server4.Dispose();
357+
}
358+
}
359+
360+
// Test controller classes for constructor tests
361+
internal class TestController
362+
{
363+
[Route("test")]
364+
public void TestMethod(WebServerEventArgs e)
365+
{
366+
WebServer.OutputAsStream(e.Context.Response, "Test response");
367+
}
368+
}
369+
370+
internal class AnotherTestController
371+
{
372+
[Route("another")]
373+
public void AnotherMethod(WebServerEventArgs e)
374+
{
375+
WebServer.OutputAsStream(e.Context.Response, "Another response");
376+
}
204377
}
205378
}

0 commit comments

Comments
 (0)