Files
jellyfin/tests/Jellyfin.Server.Tests/ParseNetworkTests.cs

128 lines
4.4 KiB
C#
Raw Normal View History

using System;
using System.Linq;
using System.Net;
using Jellyfin.Networking.Manager;
using Jellyfin.Server.Extensions;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Net;
using Microsoft.AspNetCore.Builder;
2023-10-11 00:02:37 +02:00
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Xunit;
2023-11-14 19:12:17 +01:00
using IConfigurationManager = MediaBrowser.Common.Configuration.IConfigurationManager;
namespace Jellyfin.Server.Tests
{
public class ParseNetworkTests
{
public static TheoryData<bool, bool, string[], IPAddress[], IPNetwork[]> TestNetworks_TestData()
{
var data = new TheoryData<bool, bool, string[], IPAddress[], IPNetwork[]>();
data.Add(
true,
true,
2022-07-20 11:47:48 +02:00
new string[] { "192.168.t", "127.0.0.1", "::1", "1234.1232.12.1234" },
2022-12-13 10:39:37 +01:00
new IPAddress[] { IPAddress.Loopback },
2022-07-20 11:47:48 +02:00
new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });
data.Add(
true,
false,
new string[] { "192.168.x", "127.0.0.1", "1234.1232.12.1234" },
new IPAddress[] { IPAddress.Loopback },
Array.Empty<IPNetwork>());
data.Add(
true,
true,
new string[] { "::1" },
Array.Empty<IPAddress>(),
new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });
data.Add(
false,
false,
new string[] { "localhost" },
Array.Empty<IPAddress>(),
Array.Empty<IPNetwork>());
data.Add(
true,
false,
new string[] { "localhost" },
new IPAddress[] { IPAddress.Loopback },
Array.Empty<IPNetwork>());
data.Add(
false,
true,
new string[] { "localhost" },
Array.Empty<IPAddress>(),
new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });
data.Add(
true,
true,
new string[] { "localhost" },
2022-07-20 11:47:48 +02:00
new IPAddress[] { IPAddress.Loopback },
new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });
return data;
}
[Theory]
[MemberData(nameof(TestNetworks_TestData))]
public void TestNetworks(bool ip4, bool ip6, string[] hostList, IPAddress[] knownProxies, IPNetwork[] knownNetworks)
{
using var nm = CreateNetworkManager();
2021-01-17 13:35:30 +00:00
var settings = new NetworkConfiguration
{
2023-02-15 22:34:44 +01:00
EnableIPv4 = ip4,
EnableIPv6 = ip6
2021-01-17 13:35:30 +00:00
};
ForwardedHeadersOptions options = new ForwardedHeadersOptions();
// Need this here as ::1 and 127.0.0.1 are in them by default.
options.KnownProxies.Clear();
2025-11-11 17:41:46 +01:00
options.KnownIPNetworks.Clear();
ApiServiceCollectionExtensions.AddProxyAddresses(settings, hostList, options);
Assert.Equal(knownProxies.Length, options.KnownProxies.Count);
foreach (var item in knownProxies)
{
Assert.True(options.KnownProxies.Contains(item));
}
2025-11-11 17:41:46 +01:00
Assert.Equal(knownNetworks.Length, options.KnownIPNetworks.Count);
foreach (var item in knownNetworks)
{
2025-11-11 17:41:46 +01:00
Assert.NotEqual(default, options.KnownIPNetworks.FirstOrDefault(x => x.BaseAddress.Equals(item.BaseAddress) && x.PrefixLength == item.PrefixLength));
}
}
2021-01-17 13:35:30 +00:00
private static IConfigurationManager GetMockConfig(NetworkConfiguration conf)
{
var configManager = new Mock<IConfigurationManager>
{
CallBase = true
};
configManager.Setup(x => x.GetConfiguration(It.IsAny<string>())).Returns(conf);
2021-01-19 10:50:17 +00:00
return configManager.Object;
2021-01-17 13:35:30 +00:00
}
private static NetworkManager CreateNetworkManager()
{
var conf = new NetworkConfiguration()
{
2023-02-15 22:34:44 +01:00
EnableIPv6 = true,
EnableIPv4 = true,
2021-01-17 13:35:30 +00:00
};
2023-10-11 00:02:37 +02:00
var startupConf = new Mock<IConfiguration>();
return new NetworkManager(GetMockConfig(conf), startupConf.Object, new NullLogger<NetworkManager>());
2021-01-17 13:35:30 +00:00
}
}
}