Merge changes from topic "cookie_tag_map_raw_dump"

* changes:
  Add option to dump cookieTagMap in base64 format
  Use BpfDump#fromBase64EncodedString
This commit is contained in:
Motomu Utsumi
2022-08-24 03:16:53 +00:00
committed by Gerrit Code Review
3 changed files with 85 additions and 33 deletions

View File

@@ -122,6 +122,7 @@ import android.provider.Settings;
import android.system.ErrnoException;
import android.telephony.TelephonyManager;
import android.util.ArrayMap;
import android.util.Pair;
import androidx.annotation.Nullable;
import androidx.test.InstrumentationRegistry;
@@ -130,8 +131,10 @@ import androidx.test.filters.SmallTest;
import com.android.connectivity.resources.R;
import com.android.internal.util.FileRotator;
import com.android.internal.util.test.BroadcastInterceptingContext;
import com.android.net.module.util.BpfDump;
import com.android.net.module.util.IBpfMap;
import com.android.net.module.util.LocationPermissionChecker;
import com.android.net.module.util.Struct;
import com.android.net.module.util.Struct.U32;
import com.android.net.module.util.Struct.U8;
import com.android.net.module.util.bpf.CookieTagMapKey;
@@ -168,6 +171,7 @@ import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -212,6 +216,11 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
private static final long WAIT_TIMEOUT = 2 * 1000; // 2 secs
private static final int INVALID_TYPE = -1;
private static final String DUMPSYS_BPF_RAW_MAP = "--bpfRawMap";
private static final String DUMPSYS_COOKIE_TAG_MAP = "--cookieTagMap";
private static final String LINE_DELIMITER = "\\n";
private long mElapsedRealtime;
private File mStatsDir;
@@ -2333,12 +2342,27 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
dump.contains(message));
}
private String getDump() {
private String getDump(final String[] args) {
final StringWriter sw = new StringWriter();
mService.dump(new FileDescriptor(), new PrintWriter(sw), new String[]{});
mService.dump(new FileDescriptor(), new PrintWriter(sw), args);
return sw.toString();
}
private String getDump() {
return getDump(new String[]{});
}
private <K extends Struct, V extends Struct> Map<K, V> parseBpfRawMap(
Class<K> keyClass, Class<V> valueClass, String dumpStr) {
final HashMap<K, V> map = new HashMap<>();
for (final String line : dumpStr.split(LINE_DELIMITER)) {
final Pair<K, V> keyValue =
BpfDump.fromBase64EncodedString(keyClass, valueClass, line.trim());
map.put(keyValue.first, keyValue.second);
}
return map;
}
@Test
public void testDumpCookieTagMap() throws ErrnoException {
initBpfMapsWithTagData(UID_BLUE);
@@ -2349,6 +2373,23 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
assertDumpContains(dump, "cookie=3002 tag=0x2 uid=1002");
}
@Test
public void testDumpCookieTagMapBpfRawMap() throws ErrnoException {
initBpfMapsWithTagData(UID_BLUE);
final String dump = getDump(new String[]{DUMPSYS_BPF_RAW_MAP, DUMPSYS_COOKIE_TAG_MAP});
Map<CookieTagMapKey, CookieTagMapValue> cookieTagMap = parseBpfRawMap(
CookieTagMapKey.class, CookieTagMapValue.class, dump);
final CookieTagMapValue val1 = cookieTagMap.get(new CookieTagMapKey(2002));
assertEquals(1, val1.tag);
assertEquals(1002, val1.uid);
final CookieTagMapValue val2 = cookieTagMap.get(new CookieTagMapKey(3002));
assertEquals(2, val2.tag);
assertEquals(1002, val2.uid);
}
@Test
public void testDumpUidCounterSetMap() throws ErrnoException {
initBpfMapsWithTagData(UID_BLUE);