Refactor assertion into assertInRange() method

It's hard to read in current design, refactor the
assertion into assertInRange() for readability.

Bug: 153614624
Test: atest android.net.cts.TrafficStatsTest
Change-Id: I6d939dd62cad3d6ba23a3c5ca7b1e6a8b4131a90
Merged-In: I6d939dd62cad3d6ba23a3c5ca7b1e6a8b4131a90
(cherry picked from commit af3469bdc7031d80f3d3838518fd7518b3e8eb9c)
This commit is contained in:
Aaron Huang
2020-03-24 05:32:24 +00:00
parent 146e767b32
commit 2b1fbd6404

View File

@@ -24,6 +24,7 @@ import android.os.SystemProperties;
import android.platform.test.annotations.AppModeFull; import android.platform.test.annotations.AppModeFull;
import android.test.AndroidTestCase; import android.test.AndroidTestCase;
import android.util.Log; import android.util.Log;
import android.util.Range;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@@ -36,6 +37,13 @@ import java.util.concurrent.TimeUnit;
public class TrafficStatsTest extends AndroidTestCase { public class TrafficStatsTest extends AndroidTestCase {
private static final String LOG_TAG = "TrafficStatsTest"; private static final String LOG_TAG = "TrafficStatsTest";
/** Verify the given value is in range [lower, upper] */
private void assertInRange(String tag, long value, long lower, long upper) {
final Range range = new Range(lower, upper);
assertTrue(tag + ": " + value + " is not within range [" + lower + ", " + upper + "]",
range.contains(value));
}
public void testValidMobileStats() { public void testValidMobileStats() {
// We can't assume a mobile network is even present in this test, so // We can't assume a mobile network is even present in this test, so
// we simply assert that a valid value is returned. // we simply assert that a valid value is returned.
@@ -107,12 +115,12 @@ public class TrafficStatsTest extends AndroidTestCase {
@Override @Override
public void run() { public void run() {
try { try {
Socket socket = new Socket("localhost", server.getLocalPort()); final Socket socket = new Socket("localhost", server.getLocalPort());
// Make sure that each write()+flush() turns into a packet: // Make sure that each write()+flush() turns into a packet:
// disable Nagle. // disable Nagle.
socket.setTcpNoDelay(true); socket.setTcpNoDelay(true);
OutputStream out = socket.getOutputStream(); final OutputStream out = socket.getOutputStream();
byte[] buf = new byte[byteCount]; final byte[] buf = new byte[byteCount];
TrafficStats.setThreadStatsTag(0x42); TrafficStats.setThreadStatsTag(0x42);
TrafficStats.tagSocket(socket); TrafficStats.tagSocket(socket);
for (int i = 0; i < packetCount; i++) { for (int i = 0; i < packetCount; i++) {
@@ -135,12 +143,12 @@ public class TrafficStatsTest extends AndroidTestCase {
int read = 0; int read = 0;
try { try {
Socket socket = server.accept(); final Socket socket = server.accept();
socket.setTcpNoDelay(true); socket.setTcpNoDelay(true);
TrafficStats.setThreadStatsTag(0x43); TrafficStats.setThreadStatsTag(0x43);
TrafficStats.tagSocket(socket); TrafficStats.tagSocket(socket);
InputStream in = socket.getInputStream(); final InputStream in = socket.getInputStream();
byte[] buf = new byte[byteCount]; final byte[] buf = new byte[byteCount];
while (read < byteCount * packetCount) { while (read < byteCount * packetCount) {
int n = in.read(buf); int n = in.read(buf);
assertTrue("Unexpected EOF", n > 0); assertTrue("Unexpected EOF", n > 0);
@@ -156,24 +164,24 @@ public class TrafficStatsTest extends AndroidTestCase {
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
} }
NetworkStats testStats = TrafficStats.stopDataProfiling(null); final NetworkStats testStats = TrafficStats.stopDataProfiling(null);
long mobileTxPacketsAfter = TrafficStats.getMobileTxPackets(); final long mobileTxPacketsAfter = TrafficStats.getMobileTxPackets();
long mobileRxPacketsAfter = TrafficStats.getMobileRxPackets(); final long mobileRxPacketsAfter = TrafficStats.getMobileRxPackets();
long mobileTxBytesAfter = TrafficStats.getMobileTxBytes(); final long mobileTxBytesAfter = TrafficStats.getMobileTxBytes();
long mobileRxBytesAfter = TrafficStats.getMobileRxBytes(); final long mobileRxBytesAfter = TrafficStats.getMobileRxBytes();
long totalTxPacketsAfter = TrafficStats.getTotalTxPackets(); final long totalTxPacketsAfter = TrafficStats.getTotalTxPackets();
long totalRxPacketsAfter = TrafficStats.getTotalRxPackets(); final long totalRxPacketsAfter = TrafficStats.getTotalRxPackets();
long totalTxBytesAfter = TrafficStats.getTotalTxBytes(); final long totalTxBytesAfter = TrafficStats.getTotalTxBytes();
long totalRxBytesAfter = TrafficStats.getTotalRxBytes(); final long totalRxBytesAfter = TrafficStats.getTotalRxBytes();
long uidTxBytesAfter = TrafficStats.getUidTxBytes(Process.myUid()); final long uidTxBytesAfter = TrafficStats.getUidTxBytes(Process.myUid());
long uidRxBytesAfter = TrafficStats.getUidRxBytes(Process.myUid()); final long uidRxBytesAfter = TrafficStats.getUidRxBytes(Process.myUid());
long uidTxPacketsAfter = TrafficStats.getUidTxPackets(Process.myUid()); final long uidTxPacketsAfter = TrafficStats.getUidTxPackets(Process.myUid());
long uidRxPacketsAfter = TrafficStats.getUidRxPackets(Process.myUid()); final long uidRxPacketsAfter = TrafficStats.getUidRxPackets(Process.myUid());
long uidTxDeltaBytes = uidTxBytesAfter - uidTxBytesBefore; final long uidTxDeltaBytes = uidTxBytesAfter - uidTxBytesBefore;
long uidTxDeltaPackets = uidTxPacketsAfter - uidTxPacketsBefore; final long uidTxDeltaPackets = uidTxPacketsAfter - uidTxPacketsBefore;
long uidRxDeltaBytes = uidRxBytesAfter - uidRxBytesBefore; final long uidRxDeltaBytes = uidRxBytesAfter - uidRxBytesBefore;
long uidRxDeltaPackets = uidRxPacketsAfter - uidRxPacketsBefore; final long uidRxDeltaPackets = uidRxPacketsAfter - uidRxPacketsBefore;
// Localhost traffic *does* count against per-UID stats. // Localhost traffic *does* count against per-UID stats.
/* /*
@@ -192,10 +200,13 @@ public class TrafficStatsTest extends AndroidTestCase {
// Some other tests don't cleanup connections correctly. // Some other tests don't cleanup connections correctly.
// They have the same UID, so we discount their lingering traffic // They have the same UID, so we discount their lingering traffic
// which happens only on non-localhost, such as TCP FIN retranmission packets // which happens only on non-localhost, such as TCP FIN retranmission packets
long deltaTxOtherPackets = (totalTxPacketsAfter - totalTxPacketsBefore) - uidTxDeltaPackets; final long deltaTxOtherPackets = (totalTxPacketsAfter - totalTxPacketsBefore)
long deltaRxOtherPackets = (totalRxPacketsAfter - totalRxPacketsBefore) - uidRxDeltaPackets; - uidTxDeltaPackets;
final long deltaRxOtherPackets = (totalRxPacketsAfter - totalRxPacketsBefore)
- uidRxDeltaPackets;
if (deltaTxOtherPackets > 0 || deltaRxOtherPackets > 0) { if (deltaTxOtherPackets > 0 || deltaRxOtherPackets > 0) {
Log.i(LOG_TAG, "lingering traffic data: " + deltaTxOtherPackets + "/" + deltaRxOtherPackets); Log.i(LOG_TAG, "lingering traffic data: " + deltaTxOtherPackets + "/"
+ deltaRxOtherPackets);
} }
// Check the per uid stats read from data profiling have the stats expected. The data // Check the per uid stats read from data profiling have the stats expected. The data
@@ -203,39 +214,29 @@ public class TrafficStatsTest extends AndroidTestCase {
// networkStatsService and in this way we can verify the detail networkStats of a given uid // networkStatsService and in this way we can verify the detail networkStats of a given uid
// is correct. // is correct.
NetworkStats.Entry entry = testStats.getTotal(null, Process.myUid()); NetworkStats.Entry entry = testStats.getTotal(null, Process.myUid());
assertTrue("txPackets detail: " + entry.txPackets + " uidTxPackets: " + uidTxDeltaPackets, assertInRange("txPackets detail", entry.txPackets, packetCount + minExpectedExtraPackets,
entry.txPackets >= packetCount + minExpectedExtraPackets uidTxDeltaPackets);
&& entry.txPackets <= uidTxDeltaPackets); assertInRange("rxPackets detail", entry.rxPackets, packetCount + minExpectedExtraPackets,
assertTrue("rxPackets detail: " + entry.rxPackets + " uidRxPackets: " + uidRxDeltaPackets, uidRxDeltaPackets);
entry.rxPackets >= packetCount + minExpectedExtraPackets assertInRange("txBytes detail", entry.txBytes, tcpPacketToIpBytes(packetCount, byteCount)
&& entry.rxPackets <= uidRxDeltaPackets); + tcpPacketToIpBytes(minExpectedExtraPackets, 0), uidTxDeltaBytes);
assertTrue("txBytes detail: " + entry.txBytes + " uidTxDeltaBytes: " + uidTxDeltaBytes, assertInRange("rxBytes detail", entry.rxBytes, tcpPacketToIpBytes(packetCount, byteCount)
entry.txBytes >= tcpPacketToIpBytes(packetCount, byteCount) + tcpPacketToIpBytes(minExpectedExtraPackets, 0), uidRxDeltaBytes);
+ tcpPacketToIpBytes(minExpectedExtraPackets, 0) && entry.txBytes <= uidTxDeltaBytes);
assertTrue("rxBytes detail: " + entry.rxBytes + " uidRxDeltaBytes: " + uidRxDeltaBytes,
entry.rxBytes >= tcpPacketToIpBytes(packetCount, byteCount)
+ tcpPacketToIpBytes(minExpectedExtraPackets, 0) && entry.rxBytes <= uidRxDeltaBytes);
assertTrue("uidtxp: " + uidTxPacketsBefore + " -> " + uidTxPacketsAfter + " delta=" + uidTxDeltaPackets + assertInRange("uidtxp", uidTxDeltaPackets, packetCount + minExpectedExtraPackets,
" Wanted: " + uidTxDeltaPackets + ">=" + packetCount + "+" + minExpectedExtraPackets + " && " + packetCount + packetCount + maxExpectedExtraPackets + deltaTxOtherPackets);
uidTxDeltaPackets + "<=" + packetCount + "+" + packetCount + "+" + maxExpectedExtraPackets + "+" + deltaTxOtherPackets, assertInRange("uidrxp", uidRxDeltaPackets, packetCount + minExpectedExtraPackets,
uidTxDeltaPackets >= packetCount + minExpectedExtraPackets && packetCount + packetCount + maxExpectedExtraPackets + deltaRxOtherPackets);
uidTxDeltaPackets <= packetCount + packetCount + maxExpectedExtraPackets + deltaTxOtherPackets); assertInRange("uidtxb", uidTxDeltaBytes, tcpPacketToIpBytes(packetCount, byteCount)
assertTrue("uidrxp: " + uidRxPacketsBefore + " -> " + uidRxPacketsAfter + " delta=" + uidRxDeltaPackets + + tcpPacketToIpBytes(minExpectedExtraPackets, 0),
" Wanted: " + uidRxDeltaPackets + ">=" + packetCount + "+" + minExpectedExtraPackets + " && " + tcpPacketToIpBytes(packetCount, byteCount)
uidRxDeltaPackets + "<=" + packetCount + "+" + packetCount + "+" + maxExpectedExtraPackets, + tcpPacketToIpBytes(packetCount + maxExpectedExtraPackets
uidRxDeltaPackets >= packetCount + minExpectedExtraPackets && + deltaTxOtherPackets, 0));
uidRxDeltaPackets <= packetCount + packetCount + maxExpectedExtraPackets + deltaRxOtherPackets); assertInRange("uidrxb", uidRxDeltaBytes, tcpPacketToIpBytes(packetCount, byteCount)
assertTrue("uidtxb: " + uidTxBytesBefore + " -> " + uidTxBytesAfter + " delta=" + uidTxDeltaBytes + + tcpPacketToIpBytes(minExpectedExtraPackets, 0),
" Wanted: " + uidTxDeltaBytes + ">=" + tcpPacketToIpBytes(packetCount, byteCount) + "+" + tcpPacketToIpBytes(minExpectedExtraPackets, 0) + " && " + tcpPacketToIpBytes(packetCount, byteCount)
uidTxDeltaBytes + "<=" + tcpPacketToIpBytes(packetCount, byteCount) + "+" + tcpPacketToIpBytes(packetCount + maxExpectedExtraPackets, 0), + tcpPacketToIpBytes(packetCount + maxExpectedExtraPackets
uidTxDeltaBytes >= tcpPacketToIpBytes(packetCount, byteCount) + tcpPacketToIpBytes(minExpectedExtraPackets, 0) && + deltaRxOtherPackets, 0));
uidTxDeltaBytes <= tcpPacketToIpBytes(packetCount, byteCount) + tcpPacketToIpBytes(packetCount + maxExpectedExtraPackets + deltaTxOtherPackets, 0));
assertTrue("uidrxb: " + uidRxBytesBefore + " -> " + uidRxBytesAfter + " delta=" + uidRxDeltaBytes +
" Wanted: " + uidRxDeltaBytes + ">=" + tcpPacketToIpBytes(packetCount, byteCount) + "+" + tcpPacketToIpBytes(minExpectedExtraPackets, 0) + " && " +
uidRxDeltaBytes + "<=" + tcpPacketToIpBytes(packetCount, byteCount) + "+" + tcpPacketToIpBytes(packetCount + maxExpectedExtraPackets, 0),
uidRxDeltaBytes >= tcpPacketToIpBytes(packetCount, byteCount) + tcpPacketToIpBytes(minExpectedExtraPackets, 0) &&
uidRxDeltaBytes <= tcpPacketToIpBytes(packetCount, byteCount) + tcpPacketToIpBytes(packetCount + maxExpectedExtraPackets + deltaRxOtherPackets, 0));
// Localhost traffic *does* count against total stats. // Localhost traffic *does* count against total stats.
// Check the total stats increased after test data transfer over localhost has been made. // Check the total stats increased after test data transfer over localhost has been made.
@@ -272,17 +273,13 @@ public class TrafficStatsTest extends AndroidTestCase {
// Localhost traffic should *not* count against mobile stats, // Localhost traffic should *not* count against mobile stats,
// There might be some other traffic, but nowhere near 1MB. // There might be some other traffic, but nowhere near 1MB.
assertTrue("mtxp: " + mobileTxPacketsBefore + " -> " + mobileTxPacketsAfter, assertInRange("mtxp", mobileTxPacketsAfter, mobileTxPacketsBefore,
mobileTxPacketsAfter >= mobileTxPacketsBefore && mobileTxPacketsBefore + 500);
mobileTxPacketsAfter <= mobileTxPacketsBefore + 500); assertInRange("mrxp", mobileRxPacketsAfter, mobileRxPacketsBefore,
assertTrue("mrxp: " + mobileRxPacketsBefore + " -> " + mobileRxPacketsAfter, mobileRxPacketsBefore + 500);
mobileRxPacketsAfter >= mobileRxPacketsBefore && assertInRange("mtxb", mobileTxBytesAfter, mobileTxBytesBefore,
mobileRxPacketsAfter <= mobileRxPacketsBefore + 500); mobileTxBytesBefore + 200000);
assertTrue("mtxb: " + mobileTxBytesBefore + " -> " + mobileTxBytesAfter, assertInRange("mrxb", mobileRxBytesAfter, mobileRxBytesBefore,
mobileTxBytesAfter >= mobileTxBytesBefore && mobileRxBytesBefore + 200000);
mobileTxBytesAfter <= mobileTxBytesBefore + 200000);
assertTrue("mrxb: " + mobileRxBytesBefore + " -> " + mobileRxBytesAfter,
mobileRxBytesAfter >= mobileRxBytesBefore &&
mobileRxBytesAfter <= mobileRxBytesBefore + 200000);
} }
} }