public void BandwidthControllerPressureTest(Random r, int totalPacket) { int[] bandwidth = { 1, 2, 5 }; int[] bandwidthCount = { 0, 0, 0 }; int nPacket = 0; BandwidthControlBuffer controller = ConstructBandwidthController(bandwidth); for (int i = 0; i < totalPacket; i++) { controller.Enqueue(NewPacket(r.Next(1, 64), 0), 0); controller.Enqueue(NewPacket(r.Next(1, 64), 1), 1); controller.Enqueue(NewPacket(r.Next(1, 64), 2), 2); } for (int i = 0; i < totalPacket * 3 / 4; i++) { Packet next = controller.Dequeue(); bandwidthCount[next.Data.ID] += next.GetLength(); nPacket++; } if (totalPacket > 10000) { Assert.AreEqual((double)bandwidthCount[0] / bandwidthCount[1], (double)bandwidth[0] / bandwidth[1], 0.1); Assert.AreEqual((double)bandwidthCount[2] / bandwidthCount[1], (double)bandwidth[2] / bandwidth[1], 0.1); } testContextInstance.WriteLine("Actural bandwidth: " + string.Join(", ", bandwidthCount)); while (controller.Peek() != null) { controller.Dequeue(); nPacket++; } Assert.AreEqual(nPacket, totalPacket * 3); }
public void TestBandwidthControllerBasic() { BandwidthControlBuffer controller = ConstructBandwidthController(); controller.Enqueue(NewPacket(1, 0), 0); AssertPacket(controller.Peek(), 1, 0); AssertPacket(controller.Dequeue(), 1, 0); Assert.AreEqual(controller.Peek(), null); Assert.AreEqual(controller.Dequeue(), null); Assert.AreEqual(controller.Peek(), null); controller.Enqueue(NewPacket(1, 0), 0); AssertPacket(controller.Peek(), 1, 0); AssertPacket(controller.Dequeue(), 1, 0); Assert.AreEqual(controller.Peek(), null); Assert.AreEqual(controller.Dequeue(), null); Assert.AreEqual(controller.Peek(), null); controller.Enqueue(NewPacket(1, 2), 2); AssertPacket(controller.Peek(), 1, 2); AssertPacket(controller.Dequeue(), 1, 2); Assert.AreEqual(controller.Peek(), null); Assert.AreEqual(controller.Dequeue(), null); Assert.AreEqual(controller.Peek(), null); controller.Enqueue(NewPacket(1, 1), 1); AssertPacket(controller.Peek(), 1, 1); AssertPacket(controller.Dequeue(), 1, 1); Assert.AreEqual(controller.Peek(), null); Assert.AreEqual(controller.Dequeue(), null); Assert.AreEqual(controller.Peek(), null); }