Пример #1
0
        public void TestSymbolicExecutionAcl()
        {
            var random = new Random(1);
            var lines  = new List <AclLine>();

            bool parity = false;

            for (int i = 0; i < 19; i++)
            {
                parity = !parity;
                var dlow  = (uint)random.Next();
                var dhigh = (uint)random.Next((int)dlow, int.MaxValue);
                var slow  = (uint)random.Next();
                var shigh = (uint)random.Next((int)slow, int.MaxValue);

                var line = new AclLine
                {
                    DstIp     = Prefix.Random(24, 32),
                    SrcIp     = Prefix.Random(24, 32),
                    Permitted = parity,
                };

                Console.WriteLine($"{line.DstIp}, {line.SrcIp}, {line.Permitted}");

                lines.Add(line);
            }

            var acl = new Acl {
                Lines = lines.ToArray()
            };

            var function = Function <IpHeader, bool>(p => acl.Process(p, 0));

            Assert.AreEqual(20, function.GenerateInputs().Count());
        }
Пример #2
0
        public void TestSymbolicExecutionPacketAcl()
        {
            var p1 = new Prefix {
                Length = 24, Address = Ip.Parse("72.1.2.0").Value
            };
            var p2 = new Prefix {
                Length = 24, Address = Ip.Parse("1.2.3.0").Value
            };
            var p3 = new Prefix {
                Length = 32, Address = Ip.Parse("8.8.8.8").Value
            };
            var p4 = new Prefix {
                Length = 32, Address = Ip.Parse("9.9.9.9").Value
            };
            var aclLine1 = new AclLine {
                DstIp = p1, SrcIp = p2, Permitted = true
            };
            var aclLine2 = new AclLine {
                DstIp = p3, SrcIp = p4, Permitted = true
            };
            var lines = new AclLine[2] {
                aclLine1, aclLine2
            };
            var acl = new Acl {
                Lines = lines
            };

            var f = Function <IpHeader, bool>(h => acl.Process(h, 0));

            Assert.AreEqual(3, f.GenerateInputs().Count());
        }