Merge changes Ic4b586ae,I1b1345a6,I468ef544,I61b6263e into main
* changes: Grant prohr temporary ownership of ApfIntegrationTests Pause APF filter before starting test Enable new ApfFilter experiment in CTS test Move retrieving APF capabilities into helper function
This commit is contained in:
commit
609bfabfdd
2 changed files with 42 additions and 8 deletions
|
|
@ -9,4 +9,6 @@ per-file **IpSec* = benedictwong@google.com, nharold@google.com
|
|||
# For incremental changes on EthernetManagerTest to increase coverage for existing behavior and for
|
||||
# testing bug fixes.
|
||||
per-file net/src/android/net/cts/EthernetManagerTest.kt = prohr@google.com #{LAST_RESORT_SUGGESTION}
|
||||
# Temporary ownership to develop APF CTS tests.
|
||||
per-file net/src/android/net/cts/ApfIntegrationTest.kt = prohr@google.com #{LAST_RESORT_SUGGESTION}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,37 +15,62 @@
|
|||
*/
|
||||
package android.net.cts
|
||||
|
||||
import android.Manifest.permission.WRITE_DEVICE_CONFIG
|
||||
import android.content.pm.PackageManager.FEATURE_WIFI
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.NetworkCapabilities
|
||||
import android.net.NetworkRequest
|
||||
import android.net.apf.ApfCapabilities
|
||||
import android.os.Build
|
||||
import android.platform.test.annotations.AppModeFull
|
||||
import android.provider.DeviceConfig
|
||||
import android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY
|
||||
import android.system.OsConstants
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import com.android.compatibility.common.util.PropertyUtil.isVendorApiLevelNewerThan
|
||||
import com.android.compatibility.common.util.SystemUtil
|
||||
import com.android.compatibility.common.util.SystemUtil.runShellCommandOrThrow
|
||||
import com.android.testutils.DevSdkIgnoreRule
|
||||
import com.android.testutils.DevSdkIgnoreRunner
|
||||
import com.android.testutils.NetworkStackModuleTest
|
||||
import com.android.testutils.RecorderCallback.CallbackEntry.LinkPropertiesChanged
|
||||
import com.android.testutils.TestableNetworkCallback
|
||||
import com.android.testutils.runAsShell
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
import org.junit.After
|
||||
import org.junit.Assume.assumeTrue
|
||||
import org.junit.Before
|
||||
import org.junit.BeforeClass
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
private const val TIMEOUT_MS = 2000L
|
||||
private const val APF_NEW_RA_FILTER_VERSION = "apf_new_ra_filter_version"
|
||||
|
||||
@AppModeFull(reason = "CHANGE_NETWORK_STATE permission can't be granted to instant apps")
|
||||
@RunWith(DevSdkIgnoreRunner::class)
|
||||
@NetworkStackModuleTest
|
||||
@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.TIRAMISU)
|
||||
class ApfIntegrationTest {
|
||||
companion object {
|
||||
@BeforeClass
|
||||
@JvmStatic
|
||||
fun setupOnce() {
|
||||
// TODO: check that there is no active wifi network. Otherwise, ApfFilter has already been
|
||||
// created.
|
||||
// APF adb cmds are only implemented in ApfFilter.java. Enable experiment to prevent
|
||||
// LegacyApfFilter.java from being used.
|
||||
runAsShell(WRITE_DEVICE_CONFIG) {
|
||||
DeviceConfig.setProperty(
|
||||
NAMESPACE_CONNECTIVITY,
|
||||
APF_NEW_RA_FILTER_VERSION,
|
||||
"1", // value => force enabled
|
||||
false // makeDefault
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val context by lazy { InstrumentationRegistry.getInstrumentation().context }
|
||||
private val cm by lazy { context.getSystemService(ConnectivityManager::class.java)!! }
|
||||
private val pm by lazy { context.packageManager }
|
||||
|
|
@ -68,6 +93,7 @@ class ApfIntegrationTest {
|
|||
ifname = assertNotNull(it.lp.interfaceName)
|
||||
true
|
||||
}
|
||||
runShellCommandOrThrow("cmd network_stack apf $ifname pause")
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
@ -75,17 +101,23 @@ class ApfIntegrationTest {
|
|||
if (::networkCallback.isInitialized) {
|
||||
cm.unregisterNetworkCallback(networkCallback)
|
||||
}
|
||||
runShellCommandOrThrow("cmd network_stack apf $ifname resume")
|
||||
}
|
||||
|
||||
fun getApfCapabilities(): ApfCapabilities {
|
||||
val caps = runShellCommandOrThrow("cmd network_stack apf $ifname capabilities").trim()
|
||||
val (version, maxLen, packetFormat) = caps.split(",").map { it.toInt() }
|
||||
return ApfCapabilities(version, maxLen, packetFormat)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testGetApfCapabilities() {
|
||||
val caps = SystemUtil.runShellCommand("cmd network_stack apf $ifname capabilities").trim()
|
||||
val (version, maxLen, packetFormat) = caps.split(",").map { it.toInt() }
|
||||
assertEquals(4, version)
|
||||
assertThat(maxLen).isAtLeast(1024)
|
||||
val caps = getApfCapabilities()
|
||||
assertThat(caps.apfVersionSupported).isEqualTo(4)
|
||||
assertThat(caps.maximumApfProgramSize).isAtLeast(1024)
|
||||
if (isVendorApiLevelNewerThan(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)) {
|
||||
assertThat(maxLen).isAtLeast(2000)
|
||||
assertThat(caps.maximumApfProgramSize).isAtLeast(2000)
|
||||
}
|
||||
assertEquals(OsConstants.ARPHRD_ETHER, packetFormat)
|
||||
assertThat(caps.apfPacketFormat).isEqualTo(OsConstants.ARPHRD_ETHER)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue