Merge changes I53ebf1bb,I8540af27
* changes: Enable new NsdManager backend on U+ Update NsdManagerTest for newer backend usage
This commit is contained in:
@@ -22,6 +22,8 @@ import static android.net.nsd.NsdManager.MDNS_SERVICE_EVENT;
|
||||
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
|
||||
import static android.provider.DeviceConfig.NAMESPACE_TETHERING;
|
||||
|
||||
import static com.android.modules.utils.build.SdkLevel.isAtLeastU;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
@@ -1343,8 +1345,9 @@ public class NsdService extends INsdManager.Stub {
|
||||
* @return true if the MdnsDiscoveryManager feature is enabled.
|
||||
*/
|
||||
public boolean isMdnsDiscoveryManagerEnabled(Context context) {
|
||||
return DeviceConfigUtils.isFeatureEnabled(context, NAMESPACE_CONNECTIVITY,
|
||||
MDNS_DISCOVERY_MANAGER_VERSION, false /* defaultEnabled */);
|
||||
return isAtLeastU() || DeviceConfigUtils.isFeatureEnabled(context,
|
||||
NAMESPACE_CONNECTIVITY, MDNS_DISCOVERY_MANAGER_VERSION,
|
||||
false /* defaultEnabled */);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1354,8 +1357,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
* @return true if the MdnsAdvertiser feature is enabled.
|
||||
*/
|
||||
public boolean isMdnsAdvertiserEnabled(Context context) {
|
||||
return DeviceConfigUtils.isFeatureEnabled(context, NAMESPACE_CONNECTIVITY,
|
||||
MDNS_ADVERTISER_VERSION, false /* defaultEnabled */);
|
||||
return isAtLeastU() || DeviceConfigUtils.isFeatureEnabled(context,
|
||||
NAMESPACE_CONNECTIVITY, MDNS_ADVERTISER_VERSION, false /* defaultEnabled */);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,6 +19,8 @@ import android.Manifest.permission.MANAGE_TEST_NETWORKS
|
||||
import android.app.compat.CompatChanges
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.ConnectivityManager.NetworkCallback
|
||||
import android.net.InetAddresses.parseNumericAddress
|
||||
import android.net.LinkAddress
|
||||
import android.net.LinkProperties
|
||||
import android.net.LocalSocket
|
||||
import android.net.LocalSocketAddress
|
||||
@@ -27,6 +29,7 @@ import android.net.NetworkAgentConfig
|
||||
import android.net.NetworkCapabilities
|
||||
import android.net.NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED
|
||||
import android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED
|
||||
import android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED
|
||||
import android.net.NetworkCapabilities.TRANSPORT_TEST
|
||||
import android.net.NetworkRequest
|
||||
import android.net.TestNetworkInterface
|
||||
@@ -62,18 +65,28 @@ import android.os.Handler
|
||||
import android.os.HandlerThread
|
||||
import android.os.Process.myTid
|
||||
import android.platform.test.annotations.AppModeFull
|
||||
import android.system.ErrnoException
|
||||
import android.system.Os
|
||||
import android.system.OsConstants.AF_INET6
|
||||
import android.system.OsConstants.ENETUNREACH
|
||||
import android.system.OsConstants.IPPROTO_UDP
|
||||
import android.system.OsConstants.SOCK_DGRAM
|
||||
import android.util.Log
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.runner.AndroidJUnit4
|
||||
import com.android.compatibility.common.util.PollingCheck
|
||||
import com.android.compatibility.common.util.PropertyUtil
|
||||
import com.android.modules.utils.build.SdkLevel.isAtLeastU
|
||||
import com.android.net.module.util.ArrayTrackRecord
|
||||
import com.android.net.module.util.TrackRecord
|
||||
import com.android.networkstack.apishim.NsdShimImpl
|
||||
import com.android.networkstack.apishim.common.NsdShim
|
||||
import com.android.testutils.ConnectivityModuleTest
|
||||
import com.android.testutils.DevSdkIgnoreRule
|
||||
import com.android.testutils.RecorderCallback.CallbackEntry.CapabilitiesChanged
|
||||
import com.android.testutils.RecorderCallback.CallbackEntry.LinkPropertiesChanged
|
||||
import com.android.testutils.TestableNetworkAgent
|
||||
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnNetworkCreated
|
||||
import com.android.testutils.TestableNetworkCallback
|
||||
import com.android.testutils.filters.CtsNetTestCasesMaxTargetSdk30
|
||||
import com.android.testutils.filters.CtsNetTestCasesMaxTargetSdk33
|
||||
@@ -82,6 +95,7 @@ import com.android.testutils.tryTest
|
||||
import com.android.testutils.waitForIdle
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.net.NetworkInterface
|
||||
import java.net.ServerSocket
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.util.Random
|
||||
@@ -353,24 +367,56 @@ class NsdManagerTest {
|
||||
.build(), cb)
|
||||
val agent = registerTestNetworkAgent(iface.interfaceName)
|
||||
val network = agent.network ?: fail("Registered agent should have a network")
|
||||
|
||||
cb.eventuallyExpect<LinkPropertiesChanged>(TIMEOUT_MS) {
|
||||
it.lp.linkAddresses.isNotEmpty()
|
||||
}
|
||||
|
||||
// The network has no INTERNET capability, so will be marked validated immediately
|
||||
cb.expectAvailableThenValidatedCallbacks(network, TIMEOUT_MS)
|
||||
// It does not matter if validated capabilities come before/after the link addresses change
|
||||
cb.eventuallyExpect<CapabilitiesChanged>(TIMEOUT_MS, from = 0) {
|
||||
it.caps.hasCapability(NET_CAPABILITY_VALIDATED)
|
||||
}
|
||||
return TestTapNetwork(iface, cb, agent, network)
|
||||
}
|
||||
|
||||
private fun registerTestNetworkAgent(ifaceName: String): TestableNetworkAgent {
|
||||
val lp = LinkProperties().apply {
|
||||
interfaceName = ifaceName
|
||||
}
|
||||
|
||||
val agent = TestableNetworkAgent(context, handlerThread.looper,
|
||||
NetworkCapabilities().apply {
|
||||
removeCapability(NET_CAPABILITY_TRUSTED)
|
||||
addTransportType(TRANSPORT_TEST)
|
||||
setNetworkSpecifier(TestNetworkSpecifier(ifaceName))
|
||||
},
|
||||
LinkProperties().apply {
|
||||
interfaceName = ifaceName
|
||||
},
|
||||
NetworkAgentConfig.Builder().build())
|
||||
agent.register()
|
||||
}, lp, NetworkAgentConfig.Builder().build())
|
||||
val network = agent.register()
|
||||
agent.markConnected()
|
||||
agent.expectCallback<OnNetworkCreated>()
|
||||
|
||||
// Wait until the link-local address can be used. Address flags are not available without
|
||||
// elevated permissions, so check that bindSocket works.
|
||||
PollingCheck.check("No usable v6 address on interface after $TIMEOUT_MS ms", TIMEOUT_MS) {
|
||||
val sock = Os.socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)
|
||||
tryTest {
|
||||
network.bindSocket(sock)
|
||||
Os.connect(sock, parseNumericAddress("ff02::fb%$ifaceName"), 12345)
|
||||
true
|
||||
}.catch<ErrnoException> {
|
||||
if (it.errno != ENETUNREACH) {
|
||||
throw it
|
||||
}
|
||||
false
|
||||
} cleanup {
|
||||
Os.close(sock)
|
||||
}
|
||||
}
|
||||
|
||||
lp.setLinkAddresses(NetworkInterface.getByName(ifaceName).interfaceAddresses.map {
|
||||
LinkAddress(it.address, it.networkPrefixLength.toInt())
|
||||
})
|
||||
agent.sendLinkProperties(lp)
|
||||
return agent
|
||||
}
|
||||
|
||||
@@ -378,8 +424,9 @@ class NsdManagerTest {
|
||||
fun tearDown() {
|
||||
if (TestUtils.shouldTestTApis()) {
|
||||
runAsShell(MANAGE_TEST_NETWORKS) {
|
||||
testNetwork1.close(cm)
|
||||
testNetwork2.close(cm)
|
||||
// Avoid throwing here if initializing failed in setUp
|
||||
if (this::testNetwork1.isInitialized) testNetwork1.close(cm)
|
||||
if (this::testNetwork2.isInitialized) testNetwork2.close(cm)
|
||||
}
|
||||
}
|
||||
handlerThread.waitForIdle(TIMEOUT_MS)
|
||||
@@ -465,7 +512,12 @@ class NsdManagerTest {
|
||||
assertTrue(resolvedService.attributes.containsKey("nullBinaryDataAttr"))
|
||||
assertNull(resolvedService.attributes["nullBinaryDataAttr"])
|
||||
assertTrue(resolvedService.attributes.containsKey("emptyBinaryDataAttr"))
|
||||
assertNull(resolvedService.attributes["emptyBinaryDataAttr"])
|
||||
// TODO: change the check to target SDK U when this is what the code implements
|
||||
if (isAtLeastU()) {
|
||||
assertArrayEquals(byteArrayOf(), resolvedService.attributes["emptyBinaryDataAttr"])
|
||||
} else {
|
||||
assertNull(resolvedService.attributes["emptyBinaryDataAttr"])
|
||||
}
|
||||
assertEquals(localPort, resolvedService.port)
|
||||
|
||||
// Unregister the service
|
||||
|
||||
Reference in New Issue
Block a user