Merge "Add test for subtype discovery/advertising" am: bf7a24833f

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2586608

Change-Id: I10d2bb5314935a9989519ba9567acf6d99907c7d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Remi NGUYEN VAN
2023-05-23 03:30:43 +00:00
committed by Automerger Merge Worker

View File

@@ -73,8 +73,8 @@ import android.system.OsConstants.ENETUNREACH
import android.system.OsConstants.IPPROTO_UDP
import android.system.OsConstants.SOCK_DGRAM
import android.util.Log
import androidx.test.filters.SmallTest
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
@@ -84,6 +84,8 @@ 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.DevSdkIgnoreRule.IgnoreUpTo
import com.android.testutils.DevSdkIgnoreRunner
import com.android.testutils.RecorderCallback.CallbackEntry.CapabilitiesChanged
import com.android.testutils.RecorderCallback.CallbackEntry.LinkPropertiesChanged
import com.android.testutils.TestableNetworkAgent
@@ -129,12 +131,15 @@ private const val NO_CALLBACK_TIMEOUT_MS = 200L
// tried sequentially
private const val REGISTRATION_TIMEOUT_MS = 10_000L
private const val DBG = false
private const val TEST_PORT = 12345
private val nsdShim = NsdShimImpl.newInstance()
@AppModeFull(reason = "Socket cannot bind in instant app mode")
@RunWith(AndroidJUnit4::class)
@RunWith(DevSdkIgnoreRunner::class)
@SmallTest
@ConnectivityModuleTest
@IgnoreUpTo(Build.VERSION_CODES.S_V2)
class NsdManagerTest {
// Rule used to filter CtsNetTestCasesMaxTargetSdkXX
@get:Rule
@@ -436,6 +441,13 @@ class NsdManagerTest {
return agent
}
private fun makeTestServiceInfo(network: Network? = null) = NsdServiceInfo().also {
it.serviceType = serviceType
it.serviceName = serviceName
it.network = network
it.port = TEST_PORT
}
@After
fun tearDown() {
if (TestUtils.shouldTestTApis()) {
@@ -1048,6 +1060,52 @@ class NsdManagerTest {
assertEquals(NsdManager.FAILURE_OPERATION_NOT_RUNNING, failedCb.errorCode)
}
@Test
fun testSubtypeAdvertisingAndDiscovery() {
val si = makeTestServiceInfo(network = testNetwork1.network)
// Test "_type._tcp.local,_subtype" syntax with the registration
si.serviceType = si.serviceType + ",_subtype"
val registrationRecord = NsdRegistrationRecord()
val baseTypeDiscoveryRecord = NsdDiscoveryRecord()
val subtypeDiscoveryRecord = NsdDiscoveryRecord()
val otherSubtypeDiscoveryRecord = NsdDiscoveryRecord()
tryTest {
registerService(registrationRecord, si)
// Test "_subtype._type._tcp.local" syntax with discovery. Note this is not
// "_subtype._sub._type._tcp.local".
nsdManager.discoverServices(serviceType,
NsdManager.PROTOCOL_DNS_SD,
testNetwork1.network, Executor { it.run() }, baseTypeDiscoveryRecord)
nsdManager.discoverServices("_othersubtype.$serviceType",
NsdManager.PROTOCOL_DNS_SD,
testNetwork1.network, Executor { it.run() }, otherSubtypeDiscoveryRecord)
nsdManager.discoverServices("_subtype.$serviceType",
NsdManager.PROTOCOL_DNS_SD,
testNetwork1.network, Executor { it.run() }, subtypeDiscoveryRecord)
subtypeDiscoveryRecord.waitForServiceDiscovered(
serviceName, serviceType, testNetwork1.network)
baseTypeDiscoveryRecord.waitForServiceDiscovered(
serviceName, serviceType, testNetwork1.network)
otherSubtypeDiscoveryRecord.expectCallback<DiscoveryStarted>()
// The subtype callback was registered later but called, no need for an extra delay
otherSubtypeDiscoveryRecord.assertNoCallback(timeoutMs = 0)
} cleanupStep {
nsdManager.stopServiceDiscovery(baseTypeDiscoveryRecord)
nsdManager.stopServiceDiscovery(subtypeDiscoveryRecord)
nsdManager.stopServiceDiscovery(otherSubtypeDiscoveryRecord)
baseTypeDiscoveryRecord.expectCallback<DiscoveryStopped>()
subtypeDiscoveryRecord.expectCallback<DiscoveryStopped>()
otherSubtypeDiscoveryRecord.expectCallback<DiscoveryStopped>()
} cleanup {
nsdManager.unregisterService(registrationRecord)
}
}
/**
* Register a service and return its registration record.
*/