From d5c0276b342cc12337d45788a8b91e135f61b878 Mon Sep 17 00:00:00 2001 From: Yang Sun Date: Wed, 6 Dec 2023 19:29:55 +0800 Subject: [PATCH 1/2] Mark NetworkStaticLibTestsLib as test for lint This can avoid VisibleForTesting warnings in tests. Test: atest NetworkStaticLibTests Change-Id: If6abc33cf266246aeac22ff4b53cfba386c8979f --- staticlibs/tests/unit/Android.bp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/staticlibs/tests/unit/Android.bp b/staticlibs/tests/unit/Android.bp index 031e52f878..0dfca57f44 100644 --- a/staticlibs/tests/unit/Android.bp +++ b/staticlibs/tests/unit/Android.bp @@ -33,7 +33,10 @@ android_library { "//packages/modules/Connectivity/Tethering/tests:__subpackages__", "//packages/modules/NetworkStack/tests/integration", ], - lint: { strict_updatability_linting: true }, + lint: { + strict_updatability_linting: true, + test: true + }, } android_test { From 9ea3be13fcbe563d244cc5f7d82a9d64dcebc1f0 Mon Sep 17 00:00:00 2001 From: Yang Sun Date: Wed, 6 Dec 2023 19:40:51 +0800 Subject: [PATCH 2/2] Add support for NLM_F_DUMP request in StructNLMsgHdr Test: atest NetworkStaticLibTests:com.android.net.moduletests.util.netlink.StructNlMsgHdrTest Change-Id: I395560fb1edfb1c806b2ed4c74a7a3081c7b2515 --- .../module/util/netlink/NetlinkMessage.java | 1 + .../module/util/netlink/StructNlMsgHdr.java | 10 +++-- .../util/netlink/StructNlMsgHdrTest.java | 39 ++++++++++++++++++- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/staticlibs/device/com/android/net/module/util/netlink/NetlinkMessage.java b/staticlibs/device/com/android/net/module/util/netlink/NetlinkMessage.java index 111e0bae9a..781a04e6cf 100644 --- a/staticlibs/device/com/android/net/module/util/netlink/NetlinkMessage.java +++ b/staticlibs/device/com/android/net/module/util/netlink/NetlinkMessage.java @@ -142,6 +142,7 @@ public class NetlinkMessage { return (NetlinkMessage) RtNetlinkAddressMessage.parse(nlmsghdr, byteBuffer); case NetlinkConstants.RTM_NEWROUTE: case NetlinkConstants.RTM_DELROUTE: + case NetlinkConstants.RTM_GETROUTE: return (NetlinkMessage) RtNetlinkRouteMessage.parse(nlmsghdr, byteBuffer); case NetlinkConstants.RTM_NEWNEIGH: case NetlinkConstants.RTM_DELNEIGH: diff --git a/staticlibs/device/com/android/net/module/util/netlink/StructNlMsgHdr.java b/staticlibs/device/com/android/net/module/util/netlink/StructNlMsgHdr.java index ff37639283..527236695c 100644 --- a/staticlibs/device/com/android/net/module/util/netlink/StructNlMsgHdr.java +++ b/staticlibs/device/com/android/net/module/util/netlink/StructNlMsgHdr.java @@ -71,13 +71,17 @@ public class StructNlMsgHdr { } sb.append("NLM_F_ECHO"); } - if ((flags & NLM_F_ROOT) != 0) { + if ((flags & NLM_F_DUMP) == NLM_F_DUMP) { + if (sb.length() > 0) { + sb.append("|"); + } + sb.append("NLM_F_DUMP"); + } else if ((flags & NLM_F_ROOT) != 0) { // NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH if (sb.length() > 0) { sb.append("|"); } sb.append("NLM_F_ROOT"); - } - if ((flags & NLM_F_MATCH) != 0) { + } else if ((flags & NLM_F_MATCH) != 0) { if (sb.length() > 0) { sb.append("|"); } diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/netlink/StructNlMsgHdrTest.java b/staticlibs/tests/unit/src/com/android/net/module/util/netlink/StructNlMsgHdrTest.java index b7f68c6236..a0d8b8cc06 100644 --- a/staticlibs/tests/unit/src/com/android/net/module/util/netlink/StructNlMsgHdrTest.java +++ b/staticlibs/tests/unit/src/com/android/net/module/util/netlink/StructNlMsgHdrTest.java @@ -16,6 +16,7 @@ package com.android.net.module.util.netlink; +import static com.android.net.module.util.netlink.StructNlMsgHdr.NLM_F_DUMP; import static org.junit.Assert.fail; import android.system.OsConstants; @@ -48,10 +49,14 @@ public class StructNlMsgHdrTest { public static final String TEST_NLMSG_PID_STR = "nlmsg_pid{5678}"; private StructNlMsgHdr makeStructNlMsgHdr(short type) { + return makeStructNlMsgHdr(type, TEST_NLMSG_FLAGS); + } + + private StructNlMsgHdr makeStructNlMsgHdr(short type, short flags) { final StructNlMsgHdr struct = new StructNlMsgHdr(); struct.nlmsg_len = TEST_NLMSG_LEN; struct.nlmsg_type = type; - struct.nlmsg_flags = TEST_NLMSG_FLAGS; + struct.nlmsg_flags = flags; struct.nlmsg_seq = TEST_NLMSG_SEQ; struct.nlmsg_pid = TEST_NLMSG_PID; return struct; @@ -62,6 +67,11 @@ public class StructNlMsgHdrTest { fail("\"" + actualValue + "\" does not contain \"" + expectedSubstring + "\""); } + private static void assertNotContains(String actualValue, String unexpectedSubstring) { + if (!actualValue.contains(unexpectedSubstring)) return; + fail("\"" + actualValue + "\" contains \"" + unexpectedSubstring + "\""); + } + @Test public void testToString() { StructNlMsgHdr struct = makeStructNlMsgHdr(NetlinkConstants.RTM_NEWADDR); @@ -99,4 +109,31 @@ public class StructNlMsgHdrTest { assertContains(s, TEST_NLMSG_PID_STR); assertContains(s, "nlmsg_type{20(SOCK_DIAG_BY_FAMILY)}"); } + + @Test + public void testToString_flags_dumpRequest() { + final short flags = StructNlMsgHdr.NLM_F_REQUEST | StructNlMsgHdr.NLM_F_DUMP; + StructNlMsgHdr struct = makeStructNlMsgHdr(NetlinkConstants.RTM_GETROUTE, flags); + + String s = struct.toString(OsConstants.NETLINK_ROUTE); + + assertContains(s, "RTM_GETROUTE"); + assertContains(s, "NLM_F_REQUEST"); + assertContains(s, "NLM_F_DUMP"); + // NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH; + assertNotContains(s, "NLM_F_MATCH"); + assertNotContains(s, "NLM_F_ROOT"); + } + + @Test + public void testToString_flags_root() { + final short flags = StructNlMsgHdr.NLM_F_ROOT; + StructNlMsgHdr struct = makeStructNlMsgHdr(NetlinkConstants.RTM_GETROUTE, flags); + + String s = struct.toString(OsConstants.NETLINK_ROUTE); + + assertContains(s, "NLM_F_ROOT"); + // NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH; + assertNotContains(s, "NLM_F_DUMP"); + } }