Merge "Fix IpSecManager CTS tests on 4.4 kernels" am: 7dd13c1315
am: 19e33b5078 Change-Id: I26fac4d14dc6b88ecb9bdbfce88d9f72500ee180
This commit is contained in:
@@ -218,7 +218,7 @@ public class IpSecManagerTest extends AndroidTestCase {
|
||||
mISM.applyTransportModeTransform(accepted, transform);
|
||||
|
||||
// Wait for TCP handshake packets to be counted
|
||||
Thread.sleep(250);
|
||||
StatsChecker.waitForNumPackets(3); // (SYN, SYN+ACK, ACK)
|
||||
|
||||
// Reset StatsChecker, to ignore negotiation overhead.
|
||||
StatsChecker.initStatsChecker();
|
||||
@@ -229,11 +229,18 @@ public class IpSecManagerTest extends AndroidTestCase {
|
||||
Os.read(accepted, in, 0, in.length);
|
||||
assertArrayEquals("Client-to-server encrypted data did not match.", TEST_DATA, in);
|
||||
|
||||
// Allow for newest data + ack packets to be returned before sending next packet
|
||||
// Also add the number of expected packets in each of the previous runs (4 per run)
|
||||
StatsChecker.waitForNumPackets(2 + (4 * i));
|
||||
in = new byte[TEST_DATA.length];
|
||||
|
||||
Os.write(accepted, TEST_DATA, 0, TEST_DATA.length);
|
||||
Os.read(client, in, 0, in.length);
|
||||
assertArrayEquals("Server-to-client encrypted data did not match.", TEST_DATA, in);
|
||||
|
||||
// Allow for all data + ack packets to be returned before sending next packet
|
||||
// Also add the number of expected packets in each of the previous runs (4 per run)
|
||||
StatsChecker.waitForNumPackets(4 * (i + 1));
|
||||
}
|
||||
|
||||
mISM.removeTransportModeTransform(server, transform);
|
||||
@@ -312,6 +319,7 @@ public class IpSecManagerTest extends AndroidTestCase {
|
||||
private static final String LOOPBACK_INTERFACE = "lo";
|
||||
private static final double ERROR_MARGIN_BYTES = 1.05;
|
||||
private static final double ERROR_MARGIN_PKTS = 1.05;
|
||||
private static final int MAX_WAIT_TIME_MILLIS = 1000;
|
||||
|
||||
private static long uidTxBytes;
|
||||
private static long uidRxBytes;
|
||||
@@ -323,6 +331,34 @@ public class IpSecManagerTest extends AndroidTestCase {
|
||||
private static long ifaceTxPackets;
|
||||
private static long ifaceRxPackets;
|
||||
|
||||
/**
|
||||
* This method counts the number of incoming packets, polling intermittently up to
|
||||
* MAX_WAIT_TIME_MILLIS.
|
||||
*/
|
||||
private static void waitForNumPackets(int numPackets) throws Exception {
|
||||
long uidTxDelta = 0;
|
||||
long uidRxDelta = 0;
|
||||
for (int i = 0; i < 100; i++) {
|
||||
uidTxDelta = TrafficStats.getUidTxPackets(Os.getuid()) - uidTxPackets;
|
||||
uidRxDelta = TrafficStats.getUidRxPackets(Os.getuid()) - uidRxPackets;
|
||||
|
||||
// TODO: Check Rx packets as well once kernel security policy bug is fixed.
|
||||
// (b/70635417)
|
||||
if (uidTxDelta >= numPackets) {
|
||||
return;
|
||||
}
|
||||
Thread.sleep(MAX_WAIT_TIME_MILLIS / 100);
|
||||
}
|
||||
fail(
|
||||
"Not enough traffic was recorded to satisfy the provided conditions: wanted "
|
||||
+ numPackets
|
||||
+ ", got "
|
||||
+ uidTxDelta
|
||||
+ " tx and "
|
||||
+ uidRxDelta
|
||||
+ " rx packets");
|
||||
}
|
||||
|
||||
private static void assertUidStatsDelta(
|
||||
int expectedTxByteDelta,
|
||||
int expectedTxPacketDelta,
|
||||
@@ -449,9 +485,6 @@ public class IpSecManagerTest extends AndroidTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for stats to be counted
|
||||
Thread.sleep(250);
|
||||
|
||||
checkStatsChecker(
|
||||
protocol,
|
||||
ipHdrLen,
|
||||
@@ -499,6 +532,8 @@ public class IpSecManagerTest extends AndroidTestCase {
|
||||
expectedPackets += sendCount;
|
||||
}
|
||||
|
||||
StatsChecker.waitForNumPackets(expectedPackets);
|
||||
|
||||
if (udpEncapLen != 0) {
|
||||
StatsChecker.assertUidStatsDelta(
|
||||
expectedOuterBytes, expectedPackets, expectedOuterBytes, expectedPackets);
|
||||
|
||||
Reference in New Issue
Block a user