Merge "Run NetworkStackIntegrationTest with Parameterized.class."
diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java b/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java
index bbbe0ba..6ade54f 100644
--- a/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java
+++ b/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java
@@ -146,7 +146,6 @@
import androidx.annotation.NonNull;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.HexDump;
import com.android.internal.util.StateMachine;
@@ -181,6 +180,7 @@
import org.junit.Test;
import org.junit.rules.TestName;
import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mock;
@@ -224,7 +224,7 @@
*
* Tests in this class can either be run with signature permissions, or with root access.
*/
-@RunWith(AndroidJUnit4.class)
+@RunWith(Parameterized.class)
@SmallTest
public abstract class IpClientIntegrationTestCommon {
private static final int DATA_BUFFER_LEN = 4096;
@@ -247,6 +247,17 @@
@Rule
public final TestName mTestNameRule = new TestName();
+ // Indicate whether the flag of parsing netlink event is enabled or not. If it's disabled,
+ // integration test still covers the old codepath(i.e. using NetworkObserver), otherwise,
+ // test goes through the new codepath(i.e. processRtNetlinkxxx).
+ @Parameterized.Parameter(0)
+ public boolean mIsNetlinkEventParseEnabled;
+
+ @Parameterized.Parameters
+ public static Iterable<? extends Object> data() {
+ return Arrays.asList(Boolean.valueOf("false"), Boolean.valueOf("true"));
+ }
+
/**
* Indicates that a test requires signature permissions to run.
*
@@ -553,8 +564,14 @@
@Before
public void setUp() throws Exception {
- final Method testMethod = IpClientIntegrationTestCommon.class.getMethod(
- mTestNameRule.getMethodName());
+ // Suffix "[0]" or "[1]" is added to the end of test method name after running with
+ // Parameterized.class, that's intended behavior, to iterate each test method with the
+ // parameterize value. However, Class#getMethod() throws NoSuchMethodException when
+ // searching the target test method name due to this change. Just keep the original test
+ // method name to fix NoSuchMethodException, and find the correct annotation associated
+ // to test method.
+ final String testMethodName = mTestNameRule.getMethodName().split("\\[")[0];
+ final Method testMethod = IpClientIntegrationTestCommon.class.getMethod(testMethodName);
mIsSignatureRequiredTest = testMethod.getAnnotation(SignatureRequiredTest.class) != null;
assumeFalse(testSkipped());
@@ -567,6 +584,12 @@
}
mIIpClient = makeIIpClient(mIfaceName, mCb);
+
+ // Depend on the parameterized value to enable/disable netlink message refactor flag.
+ // Make sure both of the old codepath(rely on the INetdUnsolicitedEventListener aidl)
+ // and new codepath(parse netlink event from kernel) will be executed.
+ setFeatureEnabled(NetworkStackUtils.IPCLIENT_PARSE_NETLINK_EVENTS_VERSION,
+ mIsNetlinkEventParseEnabled /* default value */);
}
protected void setUpMocks() throws Exception {