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()); }
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()); }