diff options
author | lucaslin <lucaslin@google.com> | 2021-01-29 19:19:27 +0800 |
---|---|---|
committer | Lucas Lin <lucaslin@google.com> | 2021-02-01 07:24:37 +0000 |
commit | 6082d3788eb5e5baa10dad0ca9423700472bf00f (patch) | |
tree | 05862389584d43d625e4f2fdebf9f3c213f44bc6 /client-libs/tests/unit | |
parent | a7af478653f62e5e3c210691eef814453d9a8c90 (diff) | |
download | net-6082d3788eb5e5baa10dad0ca9423700472bf00f.tar.gz |
Have a collection of utilities for netd - NetdUtils
Some files which will be inside mainline module depend on
NetworkManagementService to talk to netd, but after they become
a part of mainline module, they cannot access @hide API of
NetworkManagementService.
So create a NetdUtils to help them to talk to netd.
Bug: 170598012
Test: atest CtsNetTestCasesLatestSdk NetdStaticLibTests
Change-Id: I8bee1204b9533b70844da0b3768427438fd0c890
Diffstat (limited to 'client-libs/tests/unit')
-rw-r--r-- | client-libs/tests/unit/Android.bp | 39 | ||||
-rw-r--r-- | client-libs/tests/unit/AndroidManifest.xml | 28 | ||||
-rw-r--r-- | client-libs/tests/unit/src/com/android/net/module/util/NetdUtilsTest.java | 103 |
3 files changed, 170 insertions, 0 deletions
diff --git a/client-libs/tests/unit/Android.bp b/client-libs/tests/unit/Android.bp new file mode 100644 index 00000000..fc8a2c6c --- /dev/null +++ b/client-libs/tests/unit/Android.bp @@ -0,0 +1,39 @@ +android_library { + name: "NetdStaticLibTestsLib", + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], + min_sdk_version: "29", + static_libs: [ + "androidx.test.rules", + "mockito-target-extended-minus-junit4", + "net-tests-utils-host-device-common", + "netd-client", + ], + libs: [ + "android.test.runner", + "android.test.base", + ], + visibility: [ + // Visible for Tethering and NetworkStack integration test and link NetdStaticLibTestsLib + // there, so that the tests under client-libs can also be run when running tethering and + // NetworkStack MTS. + "//packages/modules/Connectivity/Tethering/tests/integration", + "//packages/modules/NetworkStack/tests/integration", + ] +} + +android_test { + name: "NetdStaticLibTests", + certificate: "platform", + static_libs: [ + "NetdStaticLibTestsLib", + ], + jni_libs: [ + // For mockito extended + "libdexmakerjvmtiagent", + "libstaticjvmtiagent", + ], + test_suites: ["device-tests"], +} diff --git a/client-libs/tests/unit/AndroidManifest.xml b/client-libs/tests/unit/AndroidManifest.xml new file mode 100644 index 00000000..7a07d3d5 --- /dev/null +++ b/client-libs/tests/unit/AndroidManifest.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2021 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.frameworks.clientlibs.tests"> + + <application android:debuggable="true"> + <uses-library android:name="android.test.runner" /> + </application> + + <instrumentation + android:name="androidx.test.runner.AndroidJUnitRunner" + android:targetPackage="com.android.frameworks.clientlibs.tests" + android:label="Netd Static Library Tests" /> +</manifest> diff --git a/client-libs/tests/unit/src/com/android/net/module/util/NetdUtilsTest.java b/client-libs/tests/unit/src/com/android/net/module/util/NetdUtilsTest.java new file mode 100644 index 00000000..306b1bb2 --- /dev/null +++ b/client-libs/tests/unit/src/com/android/net/module/util/NetdUtilsTest.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.net.module.util; + +import static com.android.testutils.MiscAsserts.assertThrows; + +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.net.INetd; +import android.net.InterfaceConfigurationParcel; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Arrays; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class NetdUtilsTest { + @Mock private INetd mNetd; + + private static final String IFACE = "TEST_IFACE"; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + } + + private void setupFlagsForInterfaceConfiguration(String[] flags) throws Exception { + final InterfaceConfigurationParcel config = new InterfaceConfigurationParcel(); + config.flags = flags; + when(mNetd.interfaceGetCfg(eq(IFACE))).thenReturn(config); + } + + private void verifyMethodsAndArgumentsOfSetInterface(boolean ifaceUp) throws Exception { + final String[] flagsContainDownAndUp = new String[] {"flagA", "down", "flagB", "up"}; + final String[] flagsForInterfaceDown = new String[] {"flagA", "down", "flagB"}; + final String[] flagsForInterfaceUp = new String[] {"flagA", "up", "flagB"}; + final String[] expectedFinalFlags; + setupFlagsForInterfaceConfiguration(flagsContainDownAndUp); + if (ifaceUp) { + // "down" flag will be removed from flagsContainDownAndUp when interface is up. Set + // expectedFinalFlags to flagsForInterfaceUp. + expectedFinalFlags = flagsForInterfaceUp; + NetdUtils.setInterfaceUp(mNetd, IFACE); + } else { + // "up" flag will be removed from flagsContainDownAndUp when interface is down. Set + // expectedFinalFlags to flagsForInterfaceDown. + expectedFinalFlags = flagsForInterfaceDown; + NetdUtils.setInterfaceDown(mNetd, IFACE); + } + verify(mNetd).interfaceSetCfg( + argThat(config -> + // Check if actual flags are the same as expected flags. + // TODO: Have a function in MiscAsserts to check if two arrays are the same. + CollectionUtils.all(Arrays.asList(expectedFinalFlags), + flag -> Arrays.asList(config.flags).contains(flag)) + && CollectionUtils.all(Arrays.asList(config.flags), + flag -> Arrays.asList(expectedFinalFlags).contains(flag)))); + } + + @Test + public void testSetInterfaceUp() throws Exception { + verifyMethodsAndArgumentsOfSetInterface(true /* ifaceUp */); + } + + @Test + public void testSetInterfaceDown() throws Exception { + verifyMethodsAndArgumentsOfSetInterface(false /* ifaceUp */); + } + + @Test + public void testRemoveAndAddFlags() throws Exception { + final String[] flags = new String[] {"flagA", "down", "flagB"}; + // Add an invalid flag and expect to get an IllegalStateException. + assertThrows(IllegalStateException.class, + () -> NetdUtils.removeAndAddFlags(flags, "down" /* remove */, "u p" /* add */)); + } +} + |