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:
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user