ParseNetworkTests.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using Jellyfin.Networking.Configuration;
  8. using Jellyfin.Networking.Manager;
  9. using Jellyfin.Server.Extensions;
  10. using MediaBrowser.Common.Configuration;
  11. using Microsoft.AspNetCore.Builder;
  12. using Microsoft.AspNetCore.HttpOverrides;
  13. using Microsoft.Extensions.Logging.Abstractions;
  14. using Moq;
  15. using Xunit;
  16. namespace Jellyfin.Server.Tests
  17. {
  18. public class ParseNetworkTests
  19. {
  20. public static TheoryData<bool, bool, string[], IPAddress[], IPNetwork[]> TestNetworks_TestData()
  21. {
  22. var data = new TheoryData<bool, bool, string[], IPAddress[], IPNetwork[]>();
  23. data.Add(
  24. true,
  25. true,
  26. new string[] { "192.168.t", "127.0.0.1", "1234.1232.12.1234" },
  27. new IPAddress[] { IPAddress.Loopback.MapToIPv6() },
  28. Array.Empty<IPNetwork>());
  29. data.Add(
  30. true,
  31. false,
  32. new string[] { "192.168.x", "127.0.0.1", "1234.1232.12.1234" },
  33. new IPAddress[] { IPAddress.Loopback },
  34. Array.Empty<IPNetwork>());
  35. data.Add(
  36. true,
  37. true,
  38. new string[] { "::1" },
  39. Array.Empty<IPAddress>(),
  40. new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });
  41. data.Add(
  42. false,
  43. false,
  44. new string[] { "localhost" },
  45. Array.Empty<IPAddress>(),
  46. Array.Empty<IPNetwork>());
  47. data.Add(
  48. true,
  49. false,
  50. new string[] { "localhost" },
  51. new IPAddress[] { IPAddress.Loopback },
  52. Array.Empty<IPNetwork>());
  53. data.Add(
  54. false,
  55. true,
  56. new string[] { "localhost" },
  57. Array.Empty<IPAddress>(),
  58. new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });
  59. data.Add(
  60. true,
  61. true,
  62. new string[] { "localhost" },
  63. new IPAddress[] { IPAddress.Loopback.MapToIPv6() },
  64. new IPNetwork[] { new IPNetwork(IPAddress.IPv6Loopback, 128) });
  65. return data;
  66. }
  67. [Theory]
  68. [MemberData(nameof(TestNetworks_TestData))]
  69. public void TestNetworks(bool ip4, bool ip6, string[] hostList, IPAddress[] knownProxies, IPNetwork[] knownNetworks)
  70. {
  71. using var nm = CreateNetworkManager();
  72. var settings = new NetworkConfiguration
  73. {
  74. EnableIPV4 = ip4,
  75. EnableIPV6 = ip6
  76. };
  77. ForwardedHeadersOptions options = new ForwardedHeadersOptions();
  78. // Need this here as ::1 and 127.0.0.1 are in them by default.
  79. options.KnownProxies.Clear();
  80. options.KnownNetworks.Clear();
  81. ApiServiceCollectionExtensions.AddProxyAddresses(settings, hostList, options);
  82. Assert.Equal(knownProxies.Length, options.KnownProxies.Count);
  83. foreach (var item in knownProxies)
  84. {
  85. Assert.True(options.KnownProxies.Contains(item));
  86. }
  87. Assert.Equal(knownNetworks.Length, options.KnownNetworks.Count);
  88. foreach (var item in knownNetworks)
  89. {
  90. Assert.NotNull(options.KnownNetworks.FirstOrDefault(x => x.Prefix.Equals(item.Prefix) && x.PrefixLength == item.PrefixLength));
  91. }
  92. }
  93. private static IConfigurationManager GetMockConfig(NetworkConfiguration conf)
  94. {
  95. var configManager = new Mock<IConfigurationManager>
  96. {
  97. CallBase = true
  98. };
  99. configManager.Setup(x => x.GetConfiguration(It.IsAny<string>())).Returns(conf);
  100. return configManager.Object;
  101. }
  102. private static NetworkManager CreateNetworkManager()
  103. {
  104. var conf = new NetworkConfiguration()
  105. {
  106. EnableIPV6 = true,
  107. EnableIPV4 = true,
  108. };
  109. return new NetworkManager(GetMockConfig(conf), new NullLogger<NetworkManager>());
  110. }
  111. }
  112. }