示例#1
0
 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);
     }
 }
示例#2
0
        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);
        }
示例#3
0
        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}");
        }
示例#4
0
        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));
                }
            }
        }