ParseNetworkTests.cs 3.3 KB

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