public static void AssertClaims(this SubnetDirectory <string> directory, IPAssertions claim) { foreach (var ip in claim.Addresses) { Assert.True(directory.TryGetSubnet(ip.ToString(), out var tag)); SubnetDirectoryBuilderTest.RowCounts++; Assert.Equal(claim.Tag, tag); } }
public static void VerifyCIDR(this SubnetDirectory <string> directory, string cidr, string tag) { var tokens = cidr.Split('/'); Assert.Equal(2, tokens.Length); var ip = IPAddress.Parse(tokens[0]); var length = int.Parse(tokens[1]); Assert.Equal(tokens[0], ip.ToString()); var claims = IPAssertions.FromPrefix(tag, ip, length); directory.AssertClaims(claims); }
public async Task CreateSubnetDirectory_AndTestIPs() { var sources = new SourceDefinition[] { new SourceDefinition { Schema = SchemaAwsIPRangesFromFile, Parameters = new Dictionary <string, object>() { { "Tag", "aws" }, { "File", GlobFor("aws-ip-ranges*.json") }, } }, new SourceDefinition { Schema = SchemaAzureIPRangesFromFile, Parameters = new Dictionary <string, object>() { { "Tag", "azure" }, { "File", GlobFor("ServiceTags_Public*.json") }, } }, new SourceDefinition { Schema = SchemaIPPrefixesListFromFile, Parameters = new Dictionary <string, object>() { { "Tag", "gcp" }, { "File", GlobFor("gcp-ip-ranges*.txt") }, } }, }; var otherRules = IPAssertions.Of(null, "0.0.0.0", "1.1.1.1", "255.255.255.255", "127.0.0.1", "8.34.0.0", "8.34.205.12", "34.101.0.0", "34.23.0.0", "8.34.255.255"); var directory = new SubnetDirectory <string>(); foreach (var source in sources) { await _parsers[source.Schema](source.Parameters, (cidr, tag) => directory.TryAddSubnet(cidr, tag, out var unused)); } if (directory.Lookup is IntPrefixTree <string> ) { var lookup = directory.Lookup as IntPrefixTree <string>; AssertTreeStructureCorrectness(lookup.Root); } var sw = new Stopwatch(); sw.Start(); foreach (var source in sources) { await _parsers[source.Schema](source.Parameters, (cidr, tag) => directory.VerifyCIDR(cidr, tag)); } directory.AssertClaims(otherRules); sw.Stop(); _output.WriteLine($"Checked {RowCounts} rows, time elapsed: {sw.ElapsedMilliseconds}"); }
public void BinaryHelperTest() { var cases = new Tuple <string, int[]>[] { Tuple.Create("0.0.0.0", new int[] {}), Tuple.Create("255.255.255.255", Enumerable.Range(0, 32).ToArray()), Tuple.Create("128.0.0.4", new int[] { 0, 29 }), Tuple.Create("13.67.155.16", new int[] { 4, 5, 7, 9, 14, 15, 16, 19, 20, 22, 23, 27 }), }; foreach (var tc in cases) { Assert.True(SubnetDirectory <string> .TryParseIP(tc.Item1, out var ip)); var ones = tc.Item2; for (int i = 0; i < 32; i++) { Assert.Equal(ones.Contains(i), ip.IsSetAt(i)); } } }