Merge "deflake DscpPolicyTest"

This commit is contained in:
Maciej Żenczykowski 2022-08-10 08:18:10 +00:00 • committed by Gerrit Code Review
commit b70bda58db

View file

@ -16,10 +16,8 @@
package android.net.cts
import android.net.cts.util.CtsNetUtils.TestNetworkCallback
import android.app.Instrumentation
import android.Manifest.permission.MANAGE_TEST_NETWORKS
import android.app.Instrumentation
import android.content.Context
import android.net.ConnectivityManager
import android.net.DscpPolicy
@ -27,8 +25,8 @@ import android.net.InetAddresses
import android.net.IpPrefix
import android.net.LinkAddress
import android.net.LinkProperties
import android.net.Network
import android.net.MacAddress
import android.net.Network
import android.net.NetworkAgent
import android.net.NetworkAgent.DSCP_POLICY_STATUS_DELETED
import android.net.NetworkAgent.DSCP_POLICY_STATUS_SUCCESS
@ -43,9 +41,10 @@ import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN
import android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED
import android.net.NetworkCapabilities.TRANSPORT_TEST
import android.net.NetworkRequest
import android.net.RouteInfo
import android.net.TestNetworkInterface
import android.net.TestNetworkManager
import android.net.RouteInfo
import android.net.cts.util.CtsNetUtils.TestNetworkCallback
import android.os.HandlerThread
import android.os.SystemClock
import android.platform.test.annotations.AppModeFull
@ -61,6 +60,7 @@ import android.util.Log
import android.util.Range
import androidx.test.InstrumentationRegistry
import androidx.test.runner.AndroidJUnit4
import com.android.net.module.util.IpUtils
import com.android.net.module.util.NetworkStackConstants.ETHER_TYPE_IPV4
import com.android.net.module.util.NetworkStackConstants.ETHER_TYPE_IPV6
import com.android.net.module.util.Struct
@ -69,33 +69,31 @@ import com.android.testutils.ArpResponder
import com.android.testutils.CompatUtil
import com.android.testutils.ConnectivityModuleTest
import com.android.testutils.DevSdkIgnoreRule
import com.android.testutils.assertParcelingIsLossless
import com.android.testutils.RouterAdvertisementResponder
import com.android.testutils.runAsShell
import com.android.testutils.SC_V2
import com.android.testutils.TapPacketReader
import com.android.testutils.TestableNetworkAgent
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnNetworkCreated
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnDscpPolicyStatusUpdated
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnNetworkCreated
import com.android.testutils.TestableNetworkCallback
import com.android.net.module.util.IpUtils
import com.android.testutils.assertParcelingIsLossless
import com.android.testutils.runAsShell
import java.net.Inet4Address
import java.net.Inet6Address
import java.net.InetSocketAddress
import java.nio.ByteBuffer
import java.nio.ByteOrder
import java.util.regex.Pattern
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue
import kotlin.test.fail
import org.junit.After
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import java.net.Inet4Address
import java.net.Inet6Address
import java.net.InetSocketAddress
import java.nio.ByteBuffer
import java.nio.ByteOrder
import java.util.Arrays
import java.util.regex.Pattern
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue
import kotlin.test.fail
private const val MAX_PACKET_LENGTH = 1500
@ -222,31 +220,32 @@ class DscpPolicyTest {
private fun waitForGlobalIpv6Address(network: Network): Inet6Address {
// Wait for global IPv6 address to be available
val sock = Os.socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)
network.bindSocket(sock)
var inet6Addr: Inet6Address? = null
val timeout = SystemClock.elapsedRealtime() + PACKET_TIMEOUT_MS
val onLinkPrefix = raResponder.prefix
while (timeout > SystemClock.elapsedRealtime()) {
val startTime = SystemClock.elapsedRealtime()
while (SystemClock.elapsedRealtime() - startTime < PACKET_TIMEOUT_MS) {
SystemClock.sleep(1 /* ms */)
val sock = Os.socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)
try {
// Pick any arbitrary port
Os.connect(sock, TEST_TARGET_IPV6_ADDR, 12345)
network.bindSocket(sock)
try {
// Pick any arbitrary port
Os.connect(sock, TEST_TARGET_IPV6_ADDR, 12345)
} catch (e: ErrnoException) {
// there may not be an address available yet.
if (e.errno == ENETUNREACH) continue
throw e
}
val sockAddr = Os.getsockname(sock) as InetSocketAddress
if (onLinkPrefix.contains(sockAddr.address)) {
inet6Addr = sockAddr.address as Inet6Address
break
}
} catch (e: ErrnoException) {
// ignore ENETUNREACH -- there may not be an address available yet.
if (e.errno != ENETUNREACH) {
Os.close(sock)
throw e
}
} finally {
Os.close(sock)
}
SystemClock.sleep(10 /* ms */)
}
Os.close(sock)
assertNotNull(inet6Addr)
return inet6Addr!!
}