ParseNetworkTests.cs 3.1 KB

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