Merge "Uses identical hostName across all interface"
This commit is contained in:
@@ -42,6 +42,7 @@ import org.mockito.Mockito.atLeastOnce
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
|
||||
private const val SERVICE_ID_1 = 1
|
||||
@@ -51,6 +52,7 @@ private val TEST_ADDR = parseNumericAddress("2001:db8::123")
|
||||
private val TEST_LINKADDR = LinkAddress(TEST_ADDR, 64 /* prefixLength */)
|
||||
private val TEST_NETWORK_1 = mock(Network::class.java)
|
||||
private val TEST_NETWORK_2 = mock(Network::class.java)
|
||||
private val TEST_HOSTNAME = arrayOf("Android_test", "local")
|
||||
|
||||
private val SERVICE_1 = NsdServiceInfo("TestServiceName", "_advertisertest._tcp").apply {
|
||||
port = 12345
|
||||
@@ -81,10 +83,13 @@ class MdnsAdvertiserTest {
|
||||
@Before
|
||||
fun setUp() {
|
||||
thread.start()
|
||||
doReturn(TEST_HOSTNAME).`when`(mockDeps).generateHostname()
|
||||
doReturn(mockInterfaceAdvertiser1).`when`(mockDeps).makeAdvertiser(eq(mockSocket1),
|
||||
any(), any(), any(), any())
|
||||
any(), any(), any(), any(), eq(TEST_HOSTNAME)
|
||||
)
|
||||
doReturn(mockInterfaceAdvertiser2).`when`(mockDeps).makeAdvertiser(eq(mockSocket2),
|
||||
any(), any(), any(), any())
|
||||
any(), any(), any(), any(), eq(TEST_HOSTNAME)
|
||||
)
|
||||
doReturn(true).`when`(mockInterfaceAdvertiser1).isProbing(anyInt())
|
||||
doReturn(true).`when`(mockInterfaceAdvertiser2).isProbing(anyInt())
|
||||
}
|
||||
@@ -106,8 +111,14 @@ class MdnsAdvertiserTest {
|
||||
postSync { socketCb.onSocketCreated(TEST_NETWORK_1, mockSocket1, listOf(TEST_LINKADDR)) }
|
||||
|
||||
val intAdvCbCaptor = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java)
|
||||
verify(mockDeps).makeAdvertiser(eq(mockSocket1),
|
||||
eq(listOf(TEST_LINKADDR)), eq(thread.looper), any(), intAdvCbCaptor.capture())
|
||||
verify(mockDeps).makeAdvertiser(
|
||||
eq(mockSocket1),
|
||||
eq(listOf(TEST_LINKADDR)),
|
||||
eq(thread.looper),
|
||||
any(),
|
||||
intAdvCbCaptor.capture(),
|
||||
eq(TEST_HOSTNAME)
|
||||
)
|
||||
|
||||
doReturn(false).`when`(mockInterfaceAdvertiser1).isProbing(SERVICE_ID_1)
|
||||
postSync { intAdvCbCaptor.value.onRegisterServiceSucceeded(
|
||||
@@ -134,9 +145,11 @@ class MdnsAdvertiserTest {
|
||||
val intAdvCbCaptor1 = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java)
|
||||
val intAdvCbCaptor2 = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java)
|
||||
verify(mockDeps).makeAdvertiser(eq(mockSocket1), eq(listOf(TEST_LINKADDR)),
|
||||
eq(thread.looper), any(), intAdvCbCaptor1.capture())
|
||||
eq(thread.looper), any(), intAdvCbCaptor1.capture(), eq(TEST_HOSTNAME)
|
||||
)
|
||||
verify(mockDeps).makeAdvertiser(eq(mockSocket2), eq(listOf(TEST_LINKADDR)),
|
||||
eq(thread.looper), any(), intAdvCbCaptor2.capture())
|
||||
eq(thread.looper), any(), intAdvCbCaptor2.capture(), eq(TEST_HOSTNAME)
|
||||
)
|
||||
|
||||
doReturn(false).`when`(mockInterfaceAdvertiser1).isProbing(SERVICE_ID_1)
|
||||
postSync { intAdvCbCaptor1.value.onRegisterServiceSucceeded(
|
||||
@@ -192,7 +205,8 @@ class MdnsAdvertiserTest {
|
||||
|
||||
val intAdvCbCaptor = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java)
|
||||
verify(mockDeps).makeAdvertiser(eq(mockSocket1), eq(listOf(TEST_LINKADDR)),
|
||||
eq(thread.looper), any(), intAdvCbCaptor.capture())
|
||||
eq(thread.looper), any(), intAdvCbCaptor.capture(), eq(TEST_HOSTNAME)
|
||||
)
|
||||
verify(mockInterfaceAdvertiser1).addService(eq(SERVICE_ID_1),
|
||||
argThat { it.matches(SERVICE_1) })
|
||||
verify(mockInterfaceAdvertiser1).addService(eq(SERVICE_ID_2),
|
||||
@@ -216,6 +230,15 @@ class MdnsAdvertiserTest {
|
||||
verify(mockInterfaceAdvertiser1, atLeastOnce()).destroyNow()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testRemoveService_whenAllServiceRemoved_thenUpdateHostName() {
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps)
|
||||
verify(mockDeps, times(1)).generateHostname()
|
||||
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) }
|
||||
postSync { advertiser.removeService(SERVICE_ID_1) }
|
||||
verify(mockDeps, times(2)).generateHostname()
|
||||
}
|
||||
|
||||
private fun postSync(r: () -> Unit) {
|
||||
handler.post(r)
|
||||
handler.waitForIdle(TIMEOUT_MS)
|
||||
|
||||
@@ -55,6 +55,7 @@ private const val TIMEOUT_MS = 10_000L
|
||||
|
||||
private val TEST_ADDRS = listOf(LinkAddress(parseNumericAddress("2001:db8::123"), 64))
|
||||
private val TEST_BUFFER = ByteArray(1300)
|
||||
private val TEST_HOSTNAME = arrayOf("Android_test", "local")
|
||||
|
||||
private const val TEST_SERVICE_ID_1 = 42
|
||||
private val TEST_SERVICE_1 = NsdServiceInfo().apply {
|
||||
@@ -88,12 +89,23 @@ class MdnsInterfaceAdvertiserTest {
|
||||
private val packetHandler get() = packetHandlerCaptor.value
|
||||
|
||||
private val advertiser by lazy {
|
||||
MdnsInterfaceAdvertiser(LOG_TAG, socket, TEST_ADDRS, thread.looper, TEST_BUFFER, cb, deps)
|
||||
MdnsInterfaceAdvertiser(
|
||||
LOG_TAG,
|
||||
socket,
|
||||
TEST_ADDRS,
|
||||
thread.looper,
|
||||
TEST_BUFFER,
|
||||
cb,
|
||||
deps,
|
||||
TEST_HOSTNAME
|
||||
)
|
||||
}
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
doReturn(repository).`when`(deps).makeRecordRepository(any())
|
||||
doReturn(repository).`when`(deps).makeRecordRepository(any(),
|
||||
eq(TEST_HOSTNAME)
|
||||
)
|
||||
doReturn(replySender).`when`(deps).makeReplySender(anyString(), any(), any(), any())
|
||||
doReturn(announcer).`when`(deps).makeMdnsAnnouncer(anyString(), any(), any(), any())
|
||||
doReturn(prober).`when`(deps).makeMdnsProber(anyString(), any(), any(), any())
|
||||
|
||||
@@ -67,7 +67,6 @@ private val TEST_SERVICE_2 = NsdServiceInfo().apply {
|
||||
class MdnsRecordRepositoryTest {
|
||||
private val thread = HandlerThread(MdnsRecordRepositoryTest::class.simpleName)
|
||||
private val deps = object : Dependencies() {
|
||||
override fun getHostname() = TEST_HOSTNAME
|
||||
override fun getInterfaceInetAddresses(iface: NetworkInterface) =
|
||||
Collections.enumeration(TEST_ADDRESSES.map { it.address })
|
||||
}
|
||||
@@ -84,7 +83,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testAddServiceAndProbe() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
assertEquals(0, repository.servicesCount)
|
||||
assertEquals(-1, repository.addService(TEST_SERVICE_ID_1, TEST_SERVICE_1))
|
||||
assertEquals(1, repository.servicesCount)
|
||||
@@ -117,7 +116,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testAddAndConflicts() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
repository.addService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
assertFailsWith(NameConflictException::class) {
|
||||
repository.addService(TEST_SERVICE_ID_2, TEST_SERVICE_1)
|
||||
@@ -126,7 +125,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testInvalidReuseOfServiceId() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
repository.addService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
assertFailsWith(IllegalArgumentException::class) {
|
||||
repository.addService(TEST_SERVICE_ID_1, TEST_SERVICE_2)
|
||||
@@ -135,7 +134,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testHasActiveService() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
assertFalse(repository.hasActiveService(TEST_SERVICE_ID_1))
|
||||
|
||||
repository.addService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
@@ -152,7 +151,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testExitAnnouncements() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
repository.initWithService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
repository.onAdvertisementSent(TEST_SERVICE_ID_1)
|
||||
|
||||
@@ -181,7 +180,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testExitingServiceReAdded() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
repository.initWithService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
repository.onAdvertisementSent(TEST_SERVICE_ID_1)
|
||||
repository.exitService(TEST_SERVICE_ID_1)
|
||||
@@ -195,7 +194,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testOnProbingSucceeded() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
val announcementInfo = repository.initWithService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
repository.onAdvertisementSent(TEST_SERVICE_ID_1)
|
||||
val packet = announcementInfo.getPacket(0)
|
||||
@@ -319,7 +318,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testGetReply() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
repository.initWithService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
val questions = listOf(MdnsPointerRecord(arrayOf("_testservice", "_tcp", "local"),
|
||||
0L /* receiptTimeMillis */,
|
||||
@@ -404,7 +403,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testGetConflictingServices() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
repository.addService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
repository.addService(TEST_SERVICE_ID_2, TEST_SERVICE_2)
|
||||
|
||||
@@ -432,7 +431,7 @@ class MdnsRecordRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun testGetConflictingServices_IdenticalService() {
|
||||
val repository = MdnsRecordRepository(thread.looper, deps)
|
||||
val repository = MdnsRecordRepository(thread.looper, deps, TEST_HOSTNAME)
|
||||
repository.addService(TEST_SERVICE_ID_1, TEST_SERVICE_1)
|
||||
repository.addService(TEST_SERVICE_ID_2, TEST_SERVICE_2)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user