ParseNetworkTests.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System.Globalization;
  2. using System.Text;
  3. using Jellyfin.Networking.Configuration;
  4. using Jellyfin.Networking.Manager;
  5. using Jellyfin.Server.Extensions;
  6. using MediaBrowser.Common.Configuration;
  7. using Microsoft.AspNetCore.Builder;
  8. using Microsoft.Extensions.Logging.Abstractions;
  9. using Moq;
  10. using Xunit;
  11. namespace Jellyfin.Server.Tests
  12. {
  13. public class ParseNetworkTests
  14. {
  15. /// <summary>
  16. /// Order of the result has always got to be hosts, then networks.
  17. /// </summary>
  18. /// <param name="ip4">IP4 enabled.</param>
  19. /// <param name="ip6">IP6 enabled.</param>
  20. /// <param name="hostList">List to parse.</param>
  21. /// <param name="match">What it should match.</param>
  22. [Theory]
  23. // [InlineData(true, true, "192.168.0.0/16,www.yahoo.co.uk", "::ffff:212.82.100.150,::ffff:192.168.0.0/16")] <- fails on Max. www.yahoo.co.uk resolves to a different ip address.
  24. // [InlineData(true, false, "192.168.0.0/16,www.yahoo.co.uk", "212.82.100.150,192.168.0.0/16")]
  25. [InlineData(true, true, "192.168.t,127.0.0.1,1234.1232.12.1234", "::ffff:127.0.0.1")]
  26. [InlineData(true, false, "192.168.x,127.0.0.1,1234.1232.12.1234", "127.0.0.1")]
  27. [InlineData(true, true, "::1", "::1/128")]
  28. public void TestNetworks(bool ip4, bool ip6, string hostList, string match)
  29. {
  30. using var nm = CreateNetworkManager();
  31. var settings = new NetworkConfiguration
  32. {
  33. EnableIPV4 = ip4,
  34. EnableIPV6 = ip6
  35. };
  36. var result = match + ",";
  37. ForwardedHeadersOptions options = new ForwardedHeadersOptions();
  38. // Need this here as ::1 and 127.0.0.1 are in them by default.
  39. options.KnownProxies.Clear();
  40. options.KnownNetworks.Clear();
  41. ApiServiceCollectionExtensions.AddProxyAddresses(settings, hostList.Split(','), options);
  42. var sb = new StringBuilder();
  43. foreach (var item in options.KnownProxies)
  44. {
  45. sb.Append(item)
  46. .Append(',');
  47. }
  48. foreach (var item in options.KnownNetworks)
  49. {
  50. sb.Append(item.Prefix)
  51. .Append('/')
  52. .Append(item.PrefixLength.ToString(CultureInfo.InvariantCulture))
  53. .Append(',');
  54. }
  55. Assert.Equal(sb.ToString(), result);
  56. }
  57. private static IConfigurationManager GetMockConfig(NetworkConfiguration conf)
  58. {
  59. var configManager = new Mock<IConfigurationManager>
  60. {
  61. CallBase = true
  62. };
  63. configManager.Setup(x => x.GetConfiguration(It.IsAny<string>())).Returns(conf);
  64. return configManager.Object;
  65. }
  66. private static NetworkManager CreateNetworkManager()
  67. {
  68. var conf = new NetworkConfiguration()
  69. {
  70. EnableIPV6 = true,
  71. EnableIPV4 = true,
  72. };
  73. return new NetworkManager(GetMockConfig(conf), new NullLogger<NetworkManager>());
  74. }
  75. }
  76. }