mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-01-23 15:13:22 +01:00
Fix tests
This commit is contained in:
parent
9e480f6efb
commit
1ba8e2c93c
5 changed files with 32 additions and 34 deletions
|
|
@ -290,7 +290,7 @@ namespace Jellyfin.Server.Extensions
|
|||
}
|
||||
else if (NetworkUtils.TryParseToSubnet(allowedProxies[i], out var subnet))
|
||||
{
|
||||
AddIPAddress(config, options, subnet.BaseAddress, subnet.PrefixLength);
|
||||
AddIPAddress(config, options, subnet.Address, subnet.Subnet.PrefixLength);
|
||||
}
|
||||
else if (NetworkUtils.TryParseHost(allowedProxies[i], out var addresses, config.EnableIPv4, config.EnableIPv6))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using System.Net;
|
|||
using System.Net.Sockets;
|
||||
using System.Text.RegularExpressions;
|
||||
using Jellyfin.Extensions;
|
||||
using MediaBrowser.Model.Net;
|
||||
|
||||
namespace MediaBrowser.Common.Net;
|
||||
|
||||
|
|
@ -166,7 +167,7 @@ public static partial class NetworkUtils
|
|||
/// <param name="result">Collection of <see cref="IPNetwork"/>.</param>
|
||||
/// <param name="negated">Boolean signaling if negated or not negated values should be parsed.</param>
|
||||
/// <returns><c>True</c> if parsing was successful.</returns>
|
||||
public static bool TryParseToSubnets(string[] values, [NotNullWhen(true)] out IReadOnlyList<IPNetwork>? result, bool negated = false)
|
||||
public static bool TryParseToSubnets(string[] values, [NotNullWhen(true)] out IReadOnlyList<IPData>? result, bool negated = false)
|
||||
{
|
||||
if (values is null || values.Length == 0)
|
||||
{
|
||||
|
|
@ -174,28 +175,28 @@ public static partial class NetworkUtils
|
|||
return false;
|
||||
}
|
||||
|
||||
var tmpResult = new List<IPNetwork>();
|
||||
List<IPData>? tmpResult = null;
|
||||
for (int a = 0; a < values.Length; a++)
|
||||
{
|
||||
if (TryParseToSubnet(values[a], out var innerResult, negated))
|
||||
{
|
||||
tmpResult.Add(innerResult);
|
||||
(tmpResult ??= new()).Add(innerResult);
|
||||
}
|
||||
}
|
||||
|
||||
result = tmpResult;
|
||||
return tmpResult.Count > 0;
|
||||
return result is not null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Try parsing a string into an <see cref="IPNetwork"/>, respecting exclusions.
|
||||
/// Inputs without a subnet mask will be represented as <see cref="IPNetwork"/> with a single IP.
|
||||
/// Try parsing a string into an <see cref="IPData"/>, respecting exclusions.
|
||||
/// Inputs without a subnet mask will be represented as <see cref="IPData"/> with a single IP.
|
||||
/// </summary>
|
||||
/// <param name="value">Input string to be parsed.</param>
|
||||
/// <param name="result">An <see cref="IPNetwork"/>.</param>
|
||||
/// <param name="result">An <see cref="IPData"/>.</param>
|
||||
/// <param name="negated">Boolean signaling if negated or not negated values should be parsed.</param>
|
||||
/// <returns><c>True</c> if parsing was successful.</returns>
|
||||
public static bool TryParseToSubnet(ReadOnlySpan<char> value, out IPNetwork result, bool negated = false)
|
||||
public static bool TryParseToSubnet(ReadOnlySpan<char> value, [NotNullWhen(true)] out IPData? result, bool negated = false)
|
||||
{
|
||||
// If multiple IP addresses are in a comma-separated string, the individual addresses may contain leading and/or trailing whitespace
|
||||
value = value.Trim();
|
||||
|
|
@ -213,10 +214,12 @@ public static partial class NetworkUtils
|
|||
return false;
|
||||
}
|
||||
|
||||
if (value.Contains('/'))
|
||||
var index = value.IndexOf('/');
|
||||
if (index != -1)
|
||||
{
|
||||
if (IPNetwork.TryParse(value, out result))
|
||||
if (IPAddress.TryParse(value[..index], out var address) && IPNetwork.TryParse(value, out var subnet))
|
||||
{
|
||||
result = new IPData(address, subnet);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -224,12 +227,12 @@ public static partial class NetworkUtils
|
|||
{
|
||||
if (address.AddressFamily == AddressFamily.InterNetwork)
|
||||
{
|
||||
result = address.Equals(IPAddress.Any) ? NetworkConstants.IPv4Any : new IPNetwork(address, NetworkConstants.MinimumIPv4PrefixSize);
|
||||
result = address.Equals(IPAddress.Any) ? new IPData(IPAddress.Any, NetworkConstants.IPv4Any) : new IPData(address, new IPNetwork(address, NetworkConstants.MinimumIPv4PrefixSize));
|
||||
return true;
|
||||
}
|
||||
else if (address.AddressFamily == AddressFamily.InterNetworkV6)
|
||||
{
|
||||
result = address.Equals(IPAddress.IPv6Any) ? NetworkConstants.IPv6Any : new IPNetwork(address, NetworkConstants.MinimumIPv6PrefixSize);
|
||||
result = address.Equals(IPAddress.IPv6Any) ? new IPData(IPAddress.IPv6Any, NetworkConstants.IPv6Any) : new IPData(address, new IPNetwork(address, NetworkConstants.MinimumIPv6PrefixSize));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ public sealed class LimitedConcurrencyLibraryScheduler : ILimitedConcurrencyLibr
|
|||
|
||||
await item.Worker(item.Data).ConfigureAwait(true);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error while performing a library operation");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -340,12 +340,12 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||
}
|
||||
else
|
||||
{
|
||||
_lanSubnets = lanSubnets;
|
||||
_lanSubnets = lanSubnets.Select(x => x.Subnet).ToArray();
|
||||
}
|
||||
|
||||
_excludedSubnets = NetworkUtils.TryParseToSubnets(subnets, out var excludedSubnets, true)
|
||||
? excludedSubnets
|
||||
: new List<IPNetwork>();
|
||||
? excludedSubnets.Select(x => x.Subnet).ToArray()
|
||||
: Array.Empty<IPNetwork>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -375,7 +375,7 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||
if (localNetworkAddresses.Length > 0 && !string.IsNullOrWhiteSpace(localNetworkAddresses[0]))
|
||||
{
|
||||
var bindAddresses = localNetworkAddresses.Select(p => NetworkUtils.TryParseToSubnet(p, out var network)
|
||||
? network.BaseAddress
|
||||
? network.Address
|
||||
: (interfaces.Where(x => x.Name.Equals(p, StringComparison.OrdinalIgnoreCase))
|
||||
.Select(x => x.Address)
|
||||
.FirstOrDefault() ?? IPAddress.None))
|
||||
|
|
@ -444,7 +444,7 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||
var remoteFilteredSubnets = remoteIPFilter.Where(x => x.Contains('/', StringComparison.OrdinalIgnoreCase)).ToArray();
|
||||
if (NetworkUtils.TryParseToSubnets(remoteFilteredSubnets, out var remoteAddressFilterResult, false))
|
||||
{
|
||||
remoteAddressFilter = remoteAddressFilterResult.ToList();
|
||||
remoteAddressFilter = remoteAddressFilterResult.Select(x => x.Subnet).ToList();
|
||||
}
|
||||
|
||||
// Parse everything else as an IP and construct subnet with a single IP
|
||||
|
|
@ -555,10 +555,9 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||
}
|
||||
else if (NetworkUtils.TryParseToSubnet(identifier, out var result))
|
||||
{
|
||||
var data = new IPData(result.BaseAddress, result);
|
||||
publishedServerUrls.Add(
|
||||
new PublishedServerUriOverride(
|
||||
data,
|
||||
result,
|
||||
replacement,
|
||||
true,
|
||||
true));
|
||||
|
|
@ -620,16 +619,12 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||
foreach (var details in interfaceList)
|
||||
{
|
||||
var parts = details.Split(',');
|
||||
if (NetworkUtils.TryParseToSubnet(parts[0], out var subnet))
|
||||
if (NetworkUtils.TryParseToSubnet(parts[0], out var data))
|
||||
{
|
||||
var address = subnet.BaseAddress;
|
||||
var index = int.Parse(parts[1], CultureInfo.InvariantCulture);
|
||||
if (address.AddressFamily == AddressFamily.InterNetwork || address.AddressFamily == AddressFamily.InterNetworkV6)
|
||||
data.Index = int.Parse(parts[1], CultureInfo.InvariantCulture);
|
||||
if (data.AddressFamily == AddressFamily.InterNetwork || data.AddressFamily == AddressFamily.InterNetworkV6)
|
||||
{
|
||||
var data = new IPData(address, subnet, parts[2])
|
||||
{
|
||||
Index = index
|
||||
};
|
||||
data.Name = parts[2];
|
||||
interfaces.Add(data);
|
||||
}
|
||||
}
|
||||
|
|
@ -919,7 +914,7 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||
{
|
||||
if (NetworkUtils.TryParseToSubnet(address, out var subnet))
|
||||
{
|
||||
return IsInLocalNetwork(subnet.BaseAddress);
|
||||
return IsInLocalNetwork(subnet.Address);
|
||||
}
|
||||
|
||||
return NetworkUtils.TryParseHost(address, out var addresses, IsIPv4Enabled, IsIPv6Enabled)
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ namespace Jellyfin.Networking.Tests
|
|||
public void IPv4SubnetMaskMatchesValidIPAddress(string netMask, string ipAddress)
|
||||
{
|
||||
var ipa = IPAddress.Parse(ipAddress);
|
||||
Assert.True(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
Assert.True(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -131,7 +131,7 @@ namespace Jellyfin.Networking.Tests
|
|||
public void IPv4SubnetMaskDoesNotMatchInvalidIPAddress(string netMask, string ipAddress)
|
||||
{
|
||||
var ipa = IPAddress.Parse(ipAddress);
|
||||
Assert.False(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
Assert.False(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -147,7 +147,7 @@ namespace Jellyfin.Networking.Tests
|
|||
[InlineData("2001:db8:abcd:0012::0/128", "2001:0DB8:ABCD:0012:0000:0000:0000:0000")]
|
||||
public void IPv6SubnetMaskMatchesValidIPAddress(string netMask, string ipAddress)
|
||||
{
|
||||
Assert.True(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
Assert.True(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -158,7 +158,7 @@ namespace Jellyfin.Networking.Tests
|
|||
[InlineData("2001:db8:abcd:0012::0/128", "2001:0DB8:ABCD:0012:0000:0000:0000:0001")]
|
||||
public void IPv6SubnetMaskDoesNotMatchInvalidIPAddress(string netMask, string ipAddress)
|
||||
{
|
||||
Assert.False(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
Assert.False(NetworkUtils.TryParseToSubnet(netMask, out var subnet) && subnet.Subnet.Contains(IPAddress.Parse(ipAddress)));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue