Files
MBN_STOCK_WEBVIEW/tests/MBN_STOCK_WEBVIEW.Playout.Tests/PgmDiagnosticSafetyProbeTests.cs

151 lines
4.2 KiB
C#

using System.Net;
using MBN_STOCK_WEBVIEW.Playout.Diagnostics;
namespace MBN_STOCK_WEBVIEW.Playout.Tests;
public sealed class PgmDiagnosticSafetyProbeTests
{
private const int Port = 30_001;
private const int TargetProcessId = 101;
private const int CompetingProcessId = 202;
[Theory]
[InlineData("127.0.0.1", "127.0.0.1")]
[InlineData("127.0.0.1", "0.0.0.0")]
[InlineData("::1", "::1")]
[InlineData("::1", "::")]
public void TargetOwnedExactOrWildcardListener_IsAccepted(
string requestedAddress,
string listenerAddress)
{
var queried = Evaluate(
requestedAddress,
[Entry(listenerAddress, TargetProcessId)],
out var isOwned);
Assert.True(queried);
Assert.True(isOwned);
}
[Theory]
[InlineData("127.0.0.1", "127.0.0.1", "0.0.0.0")]
[InlineData("127.0.0.1", "0.0.0.0", "127.0.0.1")]
[InlineData("::1", "::1", "::")]
[InlineData("::1", "::", "::1")]
public void MatchingEndpointWithCompetingOwner_FailsClosedEvenAfterTargetRow(
string requestedAddress,
string targetAddress,
string competingAddress)
{
var queried = Evaluate(
requestedAddress,
[
Entry(targetAddress, TargetProcessId),
Entry(competingAddress, CompetingProcessId)
],
out var isOwned);
Assert.True(queried);
Assert.False(isOwned);
}
[Theory]
[InlineData("127.0.0.1", "127.0.0.2")]
[InlineData("::1", "::2")]
public void DifferentLocalAddressOwnedByCompetitor_DoesNotCompete(
string requestedAddress,
string unrelatedAddress)
{
var queried = Evaluate(
requestedAddress,
[
Entry(requestedAddress, TargetProcessId),
Entry(unrelatedAddress, CompetingProcessId)
],
out var isOwned);
Assert.True(queried);
Assert.True(isOwned);
}
[Theory]
[InlineData("127.0.0.1", "127.0.0.2")]
[InlineData("::1", "::2")]
public void TargetOwnedDifferentLocalAddress_IsNotAccepted(
string requestedAddress,
string differentAddress)
{
var queried = Evaluate(
requestedAddress,
[Entry(differentAddress, TargetProcessId)],
out var isOwned);
Assert.True(queried);
Assert.False(isOwned);
}
[Theory]
[InlineData("127.0.0.1", "::")]
[InlineData("::1", "0.0.0.0")]
public void OtherAddressFamilyWildcard_DoesNotMatchRequestedEndpoint(
string requestedAddress,
string otherFamilyWildcard)
{
var queried = Evaluate(
requestedAddress,
[Entry(otherFamilyWildcard, TargetProcessId)],
out var isOwned);
Assert.True(queried);
Assert.False(isOwned);
}
[Theory]
[InlineData("0.0.0.0")]
[InlineData("192.0.2.1")]
[InlineData("::")]
[InlineData("2001:db8::1")]
public void RequestedAddressMustBeLoopback(string requestedAddress)
{
var queried = Evaluate(
requestedAddress,
[Entry(requestedAddress, TargetProcessId)],
out var isOwned);
Assert.False(queried);
Assert.False(isOwned);
}
[Theory]
[InlineData("127.0.0.1", "127.0.0.1")]
[InlineData("::1", "::1")]
public void MatchingEndpointOwnedOnlyByCompetitor_IsRejected(
string requestedAddress,
string competingAddress)
{
var queried = Evaluate(
requestedAddress,
[Entry(competingAddress, CompetingProcessId)],
out var isOwned);
Assert.True(queried);
Assert.False(isOwned);
}
private static bool Evaluate(
string requestedAddress,
IReadOnlyList<TcpListenerOwnershipEntry> listeners,
out bool isOwned) =>
WindowsTcpListenerOwnershipProbe.TryEvaluateOwnership(
IPAddress.Parse(requestedAddress),
Port,
TargetProcessId,
listeners,
out isOwned);
private static TcpListenerOwnershipEntry Entry(
string address,
int processId) =>
new(IPAddress.Parse(address), Port, processId);
}