using MoShiro.Measurement; namespace MoShiro.Measurement.Tests; public sealed class LocalAddressesTests { [Fact] public void Linux_TemporaryTentativeDeprecatedAndFailedAddressesAreNotUsable() { const string text = "2409c0d0000000000000000000000001 02 40 00 80 eth0\n" + // 稳定地址:可用 "2409c0d0000000000000000000000002 02 40 00 01 eth0\n" + // 临时(隐私)地址 "2409c0d0000000000000000000000003 02 40 00 40 eth0\n" + // tentative "2409c0d0000000000000000000000004 02 40 00 20 eth0\n" + // deprecated "2409c0d0000000000000000000000005 02 40 00 08 eth0\n"; // dad 失败 HashSet unusable = LocalAddresses.UnusableIpv6(text); Assert.DoesNotContain("2409:c0d0::1", unusable); Assert.Contains("2409:c0d0::2", unusable); Assert.Contains("2409:c0d0::3", unusable); Assert.Contains("2409:c0d0::4", unusable); Assert.Contains("2409:c0d0::5", unusable); Assert.Empty(LocalAddresses.UnusableIpv6(null)); } [Fact] public void Sample_NeverReturnsLoopbackPrivateOrLinkLocalAddresses() { foreach (string text in LocalAddresses.Sample()) { var address = System.Net.IPAddress.Parse(text); Assert.True(address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ? MoShiro.Protocol.PublicAddress.IsPublicIpv4(address) : MoShiro.Protocol.PublicAddress.IsGlobalIpv6(address)); } } }