ParseNetworkTests.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. /// <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. NetworkManager.SystemIP6Enabled = ip6;
  33. var settings = new NetworkConfiguration
  34. {
  35. EnableIPV4 = ip4,
  36. EnableIPV6 = ip6
  37. };
  38. var result = match + ',';
  39. ForwardedHeadersOptions options = new ForwardedHeadersOptions();
  40. // Need this here as ::1 and 127.0.0.1 are in them by default.
  41. options.KnownProxies.Clear();
  42. options.KnownNetworks.Clear();
  43. ApiServiceCollectionExtensions.ParseList(settings, hostList.Split(","), options);
  44. var sb = new StringBuilder();
  45. foreach (var item in options.KnownProxies)
  46. {
  47. sb.Append(item);
  48. sb.Append(',');
  49. }
  50. foreach (var item in options.KnownNetworks)
  51. {
  52. sb.Append(item.Prefix);
  53. sb.Append('/');
  54. sb.Append(item.PrefixLength.ToString(CultureInfo.InvariantCulture));
  55. sb.Append(',');
  56. }
  57. Assert.Equal(sb.ToString(), result);
  58. }
  59. private static IConfigurationManager GetMockConfig(NetworkConfiguration conf)
  60. {
  61. var configManager = new Mock<IConfigurationManager>
  62. {
  63. CallBase = true
  64. };
  65. configManager.Setup(x => x.GetConfiguration(It.IsAny<string>())).Returns(conf);
  66. return configManager.Object;
  67. }
  68. private static NetworkManager CreateNetworkManager()
  69. {
  70. var conf = new NetworkConfiguration()
  71. {
  72. EnableIPV6 = true,
  73. EnableIPV4 = true,
  74. };
  75. return new NetworkManager(GetMockConfig(conf), new NullLogger<NetworkManager>());
  76. }
  77. }
  78. }