private static void TestReceivePackets(int numPacketsToSend, int numPacketsToWait, int numPacketsToBreakLoop, double secondsToWait, int packetSize, PacketCommunicatorReceiveResult expectedResult, int expectedNumPackets, double expectedMinSeconds, double expectedMaxSeconds) { string testDescription = "NumPacketsToSend=" + numPacketsToSend + ". NumPacketsToWait=" + numPacketsToWait + ". NumPacketsToBreakLoop=" + numPacketsToBreakLoop + ". SecondsToWait=" + secondsToWait + ". PacketSize=" + packetSize; const string SourceMac = "11:22:33:44:55:66"; const string DestinationMac = "77:88:99:AA:BB:CC"; using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetFilter("ether src " + SourceMac + " and ether dst " + DestinationMac); Packet sentPacket = _random.NextEthernetPacket(packetSize, SourceMac, DestinationMac); PacketCommunicatorReceiveResult result = PacketCommunicatorReceiveResult.None; for (int i = 0; i != numPacketsToSend; ++i) communicator.SendPacket(sentPacket); PacketHandler handler = new PacketHandler(sentPacket, communicator, numPacketsToBreakLoop); Thread thread = new Thread(delegate() { if (numPacketsToBreakLoop == 0) communicator.Break(); result = communicator.ReceivePackets(numPacketsToWait, handler.Handle); }); DateTime startWaiting = DateTime.Now; thread.Start(); if (!thread.Join(TimeSpan.FromSeconds(secondsToWait))) thread.Abort(); DateTime finishedWaiting = DateTime.Now; Assert.AreEqual(expectedResult, result, testDescription); Assert.AreEqual(expectedNumPackets, handler.NumPacketsHandled); MoreAssert.IsInRange(expectedMinSeconds, expectedMaxSeconds, (finishedWaiting - startWaiting).TotalSeconds); } }
private static void TestReceivePackets(int numPacketsToSend, int numPacketsToGet, int numPacketsToBreakLoop, PacketCommunicatorReceiveResult expectedResult, int expectedNumPackets, double expectedMinSeconds, double expectedMaxSeconds) { string testDescription = "NumPacketsToSend=" + numPacketsToSend + ". NumPacketsToGet=" + numPacketsToGet + ". NumPacketsToBreakLoop=" + numPacketsToBreakLoop; const string SourceMac = "11:22:33:44:55:66"; const string DestinationMac = "77:88:99:AA:BB:CC"; Packet expectedPacket = _random.NextEthernetPacket(24, SourceMac, DestinationMac); using (PacketCommunicator communicator = OpenOfflineDevice(numPacketsToSend, expectedPacket)) { communicator.SetFilter("ether src " + SourceMac + " and ether dst " + DestinationMac); if (numPacketsToBreakLoop == 0) communicator.Break(); PacketHandler handler = new PacketHandler(expectedPacket, expectedMinSeconds, expectedMaxSeconds, communicator, numPacketsToBreakLoop); PacketCommunicatorReceiveResult result = PacketCommunicatorReceiveResult.None; Thread thread = new Thread(delegate() { result = communicator.ReceivePackets(numPacketsToGet, handler.Handle); }); thread.Start(); if (!thread.Join(TimeSpan.FromSeconds(5))) { thread.Abort(); } Assert.AreEqual(expectedResult, result, testDescription); Assert.AreEqual(expectedNumPackets, handler.NumPacketsHandled); } }
private static void TestReceiveSomePackets(int numPacketsToSend, int numPacketsToGet, int numPacketsToBreakLoop, int packetSize, bool nonBlocking, PacketCommunicatorReceiveResult expectedResult, int expectedNumPackets, double expectedMinSeconds, double expectedMaxSeconds) { string testDescription = "NumPacketsToSend=" + numPacketsToSend + ". NumPacketsToGet=" + numPacketsToGet + ". NumPacketsToBreakLoop=" + numPacketsToBreakLoop + ". PacketSize=" + packetSize + ". NonBlocking=" + nonBlocking; const string SourceMac = "11:22:33:44:55:66"; const string DestinationMac = "77:88:99:AA:BB:CC"; Packet packetToSend = _random.NextEthernetPacket(packetSize, SourceMac, DestinationMac); using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.NonBlocking = nonBlocking; Assert.AreEqual(nonBlocking, communicator.NonBlocking); communicator.SetFilter("ether src " + SourceMac + " and ether dst " + DestinationMac); int numPacketsGot; for (int i = 0; i != numPacketsToSend; ++i) communicator.SendPacket(packetToSend); if (numPacketsToBreakLoop == 0) communicator.Break(); PacketHandler handler = new PacketHandler(packetToSend, communicator, numPacketsToBreakLoop); DateTime startWaiting = DateTime.Now; PacketCommunicatorReceiveResult result = communicator.ReceiveSomePackets(out numPacketsGot, numPacketsToGet, handler.Handle); DateTime finishedWaiting = DateTime.Now; Assert.AreEqual(expectedResult, result); Assert.AreEqual(expectedNumPackets, numPacketsGot, "NumPacketsGot. Test: " + testDescription); Assert.AreEqual(expectedNumPackets, handler.NumPacketsHandled, "NumPacketsHandled. Test: " + testDescription); MoreAssert.IsInRange(expectedMinSeconds, expectedMaxSeconds, (finishedWaiting - startWaiting).TotalSeconds, testDescription); } }
private static void TestGetSomePackets(int numPacketsToSend, int numPacketsToGet, int numPacketsToBreakLoop, PacketCommunicatorReceiveResult expectedResult, int expectedNumPackets, double expectedMinSeconds, double expectedMaxSeconds) { string testDescription = "NumPacketsToSend=" + numPacketsToSend + ". NumPacketsToGet=" + numPacketsToGet + ". NumPacketsToBreakLoop=" + numPacketsToBreakLoop; const string SourceMac = "11:22:33:44:55:66"; const string DestinationMac = "77:88:99:AA:BB:CC"; Packet expectedPacket = _random.NextEthernetPacket(100, SourceMac, DestinationMac); using (PacketCommunicator communicator = OpenOfflineDevice(numPacketsToSend, expectedPacket)) { communicator.SetFilter("ether src " + SourceMac + " and ether dst " + DestinationMac); if (numPacketsToBreakLoop == 0) communicator.Break(); PacketHandler handler = new PacketHandler(expectedPacket, expectedMinSeconds, expectedMaxSeconds, communicator, numPacketsToBreakLoop); int numPacketsGot; PacketCommunicatorReceiveResult result = communicator.ReceiveSomePackets(out numPacketsGot, numPacketsToGet, handler.Handle); Assert.AreEqual(expectedResult, result); Assert.AreEqual(expectedNumPackets, numPacketsGot, "NumPacketsGot. Test: " + testDescription); Assert.AreEqual(expectedNumPackets, handler.NumPacketsHandled, "NumPacketsHandled. Test: " + testDescription); } }