Eerste commit
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using MijnBesluit.ServiceBeheer;
|
||||
|
||||
namespace MijnBesluit.SelfCheck;
|
||||
|
||||
/// <summary>
|
||||
/// Controleert wat het installatieschermpje doet met het poortnummer. Het aanmaken van de
|
||||
/// service zelf kan alleen op Windows en met beheerdersrechten; dat valt hier buiten.
|
||||
/// </summary>
|
||||
public static class ServiceChecks
|
||||
{
|
||||
public static void Register(Runner runner)
|
||||
{
|
||||
runner.Test("Poortnummer: onmogelijke waarden worden geweigerd", () =>
|
||||
{
|
||||
Assert.True(ServiceInstellingen.ControleerPoort(0) is not null, "0 is geen poort");
|
||||
Assert.True(ServiceInstellingen.ControleerPoort(70000) is not null, "70000 bestaat niet");
|
||||
Assert.True(ServiceInstellingen.ControleerPoort(-1) is not null, "negatief kan niet");
|
||||
Assert.True(ServiceInstellingen.ControleerPoort(80)!.Contains("gereserveerd"),
|
||||
"onder 1024 wordt uitgelegd waarom het niet mag");
|
||||
Assert.True(ServiceInstellingen.ControleerPoort(5200) is null, "5200 mag gewoon");
|
||||
Assert.True(ServiceInstellingen.ControleerPoort(65535) is null, "de hoogste poort mag");
|
||||
});
|
||||
|
||||
runner.Test("Poortnummer opslaan laat de rest van appsettings.json met rust", () =>
|
||||
{
|
||||
var map = Path.Combine(Path.GetTempPath(), "mb-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(map);
|
||||
var pad = Path.Combine(map, "appsettings.json");
|
||||
|
||||
File.WriteAllText(pad, """
|
||||
{
|
||||
"ConnectionStrings": { "MijnBesluit": "Server=localhost;Database=mijnbesluit" },
|
||||
"Socket": { "Port": 5200, "CertificateFile": "D:\\cert.pfx" },
|
||||
"Smtp": { "Host": "mail.example.nl" }
|
||||
}
|
||||
""");
|
||||
|
||||
var instellingen = new ServiceInstellingen(pad);
|
||||
Assert.True(instellingen.LeesPoort() == 5200, "de bestaande poort wordt gelezen");
|
||||
|
||||
instellingen.SchrijfPoort(5300);
|
||||
|
||||
var opnieuw = new ServiceInstellingen(pad);
|
||||
Assert.True(opnieuw.LeesPoort() == 5300, "de nieuwe poort staat erin");
|
||||
|
||||
var inhoud = File.ReadAllText(pad);
|
||||
Assert.True(inhoud.Contains("Server=localhost"), "de connectiereeks staat er nog");
|
||||
Assert.True(inhoud.Contains("cert.pfx"), "het certificaatpad staat er nog");
|
||||
Assert.True(inhoud.Contains("mail.example.nl"), "de e-mailinstellingen staan er nog");
|
||||
Assert.True(!File.Exists(pad + ".tmp"), "er blijft geen tijdelijk bestand achter");
|
||||
|
||||
Directory.Delete(map, true);
|
||||
});
|
||||
|
||||
runner.Test("Poortnummer opslaan werkt ook zonder bestaand bestand", () =>
|
||||
{
|
||||
var map = Path.Combine(Path.GetTempPath(), "mb-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(map);
|
||||
var pad = Path.Combine(map, "appsettings.json");
|
||||
|
||||
var instellingen = new ServiceInstellingen(pad);
|
||||
Assert.True(instellingen.LeesPoort() == ServiceInstellingen.StandaardPoort,
|
||||
"zonder bestand geldt de standaardpoort");
|
||||
|
||||
instellingen.SchrijfPoort(5400);
|
||||
Assert.True(new ServiceInstellingen(pad).LeesPoort() == 5400, "en daarna staat het er netjes in");
|
||||
|
||||
Directory.Delete(map, true);
|
||||
});
|
||||
|
||||
runner.Test("Een onmogelijke poort wordt niet weggeschreven", () =>
|
||||
{
|
||||
var map = Path.Combine(Path.GetTempPath(), "mb-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(map);
|
||||
var pad = Path.Combine(map, "appsettings.json");
|
||||
|
||||
Assert.Throws<ArgumentOutOfRangeException>(
|
||||
() => new ServiceInstellingen(pad).SchrijfPoort(80),
|
||||
"poort 80 wordt geweigerd");
|
||||
Assert.True(!File.Exists(pad), "en er wordt niets opgeslagen");
|
||||
|
||||
Directory.Delete(map, true);
|
||||
});
|
||||
|
||||
runner.Test("Een bezette poort wordt herkend", () =>
|
||||
{
|
||||
var bezet = new TcpListener(IPAddress.Any, 0);
|
||||
bezet.Start();
|
||||
var poort = ((IPEndPoint)bezet.LocalEndpoint).Port;
|
||||
|
||||
try
|
||||
{
|
||||
Assert.True(!ServiceInstellingen.PoortIsVrij(poort), "de bezette poort wordt als bezet gezien");
|
||||
}
|
||||
finally { bezet.Stop(); }
|
||||
|
||||
Assert.True(ServiceInstellingen.PoortIsVrij(poort), "en na afloop weer als vrij");
|
||||
});
|
||||
|
||||
runner.Test("Een beschadigd appsettings.json wordt niet stilzwijgend gewist", () =>
|
||||
{
|
||||
var map = Path.Combine(Path.GetTempPath(), "mb-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(map);
|
||||
var pad = Path.Combine(map, "appsettings.json");
|
||||
File.WriteAllText(pad, "{ dit is geen geldige json");
|
||||
|
||||
var instellingen = new ServiceInstellingen(pad);
|
||||
Assert.True(instellingen.LeesPoort() == ServiceInstellingen.StandaardPoort,
|
||||
"onleesbare inhoud levert de standaardpoort op in plaats van een fout");
|
||||
|
||||
Directory.Delete(map, true);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user