Use a single SharedLog for all mdns components
Use a single SharedLog in NsdService, and making subcomponents
for DiscoveryManager/Advertiser/SocketProvider. Because each
logger has 500 maxRecords, so 2000 records in total, which take
too much memory.
Also address leftover comments in previous logging changes.
Before:
2023-04-17T15:05:27.409895 - [Client10082-1] Register a DiscoveryListener 3 for service type:_nmt274981618._tcp.local
2023-04-17T15:05:26.408015 - [Client10082-1] New client. useJavaBackend=true
Advertiser:
2023-04-17T15:05:27.213023 - [testtap0] Probing finished for service 2
2023-04-17T15:05:26.409607 - Adding service name: ^Nsd.Test|Non-#AsCiI\Characters&\ufffe テスト 測試, type: _nmt274981618._tcp, hostAddresses: , port: 12345, network: null, txtRecord: with ID 2
DiscoveryManager:
2023-04-17T15:05:28.227786 - [_nmt274981618._tcp.local-102] onServiceNameDiscovered: ^Nsd.Test|Non-#AsCiI\Characters&\ufffe テスト 測試
2023-04-17T15:05:27.409104 - createServiceTypeClient for serviceType:_nmt274981618._tcp.local network:102
2023-04-17T15:05:27.398075 - Registering listener for serviceType: _nmt274981618._tcp.local
SocketProvider:
2023-04-17T15:05:28.292106 - Remove socket on net:102
2023-04-17T15:05:26.441517 - Create socket on net:NetworkAsKey{ network=102 }, ifName:testtap0
2023-04-17T15:05:26.409005 - Start monitoring sockets.
After:
Logs:
2023-04-17T20:51:42.931769 - [MdnsDiscoveryManager._nmt682015268._tcp.local-101] onServiceNameDiscovered: Name: ^Nsd.Test|Non-#AsCiI\Characters&\ufffe テスト 測試, type: _nmt682015268._tcp.local, subtypes: , ip: [100.70.162.138], ipv6: [fe80::9c0e:d0ff:fe7d:e5aa, 2a00:79e1:abc:6f04:9c0e:d0ff:fe7d:e5aa, 2a00:79e1:abc:6f04:eb56:8e39:5e1f:1102], port: 12345, interfaceIndex: 47, network: 101, textStrings: [], textEntries: []
2023-04-17T20:51:42.032465 - [NsdService.Client10082-1] Register a DiscoveryListener 3 for service type:_nmt682015268._tcp.local
2023-04-17T20:51:42.026645 - [MdnsDiscoveryManager] createServiceTypeClient for type:_nmt682015268._tcp.local, net:101
2023-04-17T20:51:41.091555 - [MdnsAdvertiser] Adding service name: ^Nsd.Test|Non-#AsCiI\Characters&\ufffe テスト 測試, type: _nmt682015268._tcp, hostAddresses: , port: 12345, network: null, txtRecord: with ID 2
2023-04-17T20:51:41.091037 - [MdnsSocketProvider] Start monitoring sockets.
2023-04-17T20:51:41.089951 - [NsdService.Client10082-1] New client. useJavaBackend=true
Bug: 275004614
Test: atest FrameworksNetTests android.net.cts.NsdManagerTest
Change-Id: I1c9b7697cc95748f7fe4e6beecea217d39c56fb1
This commit is contained in:
@@ -175,9 +175,9 @@ public class NsdServiceTest {
|
||||
doReturn(true).when(mMockMDnsM).resolve(
|
||||
anyInt(), anyString(), anyString(), anyString(), anyInt());
|
||||
doReturn(false).when(mDeps).isMdnsDiscoveryManagerEnabled(any(Context.class));
|
||||
doReturn(mDiscoveryManager).when(mDeps).makeMdnsDiscoveryManager(any(), any());
|
||||
doReturn(mSocketProvider).when(mDeps).makeMdnsSocketProvider(any(), any());
|
||||
doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any());
|
||||
doReturn(mDiscoveryManager).when(mDeps).makeMdnsDiscoveryManager(any(), any(), any());
|
||||
doReturn(mSocketProvider).when(mDeps).makeMdnsSocketProvider(any(), any(), any());
|
||||
doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any(), any());
|
||||
|
||||
mService = makeService();
|
||||
}
|
||||
@@ -1122,7 +1122,7 @@ public class NsdServiceTest {
|
||||
// final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
|
||||
final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor =
|
||||
ArgumentCaptor.forClass(MdnsAdvertiser.AdvertiserCallback.class);
|
||||
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture());
|
||||
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture(), any());
|
||||
|
||||
final NsdServiceInfo regInfo = new NsdServiceInfo(SERVICE_NAME, SERVICE_TYPE);
|
||||
regInfo.setHost(parseNumericAddress("192.0.2.123"));
|
||||
@@ -1161,7 +1161,7 @@ public class NsdServiceTest {
|
||||
// final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
|
||||
final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor =
|
||||
ArgumentCaptor.forClass(MdnsAdvertiser.AdvertiserCallback.class);
|
||||
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture());
|
||||
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture(), any());
|
||||
|
||||
final NsdServiceInfo regInfo = new NsdServiceInfo(SERVICE_NAME, "invalid_type");
|
||||
regInfo.setHost(parseNumericAddress("192.0.2.123"));
|
||||
@@ -1186,7 +1186,7 @@ public class NsdServiceTest {
|
||||
// final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
|
||||
final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor =
|
||||
ArgumentCaptor.forClass(MdnsAdvertiser.AdvertiserCallback.class);
|
||||
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture());
|
||||
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture(), any());
|
||||
|
||||
final NsdServiceInfo regInfo = new NsdServiceInfo("a".repeat(70), SERVICE_TYPE);
|
||||
regInfo.setHost(parseNumericAddress("192.0.2.123"));
|
||||
|
||||
@@ -23,11 +23,13 @@ import android.net.nsd.NsdServiceInfo
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.HandlerThread
|
||||
import com.android.net.module.util.SharedLog
|
||||
import com.android.server.connectivity.mdns.MdnsAdvertiser.AdvertiserCallback
|
||||
import com.android.server.connectivity.mdns.MdnsSocketProvider.SocketCallback
|
||||
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
|
||||
import com.android.testutils.DevSdkIgnoreRunner
|
||||
import com.android.testutils.waitForIdle
|
||||
import java.net.NetworkInterface
|
||||
import java.util.Objects
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
@@ -89,6 +91,7 @@ class MdnsAdvertiserTest {
|
||||
private val handler by lazy { Handler(thread.looper) }
|
||||
private val socketProvider = mock(MdnsSocketProvider::class.java)
|
||||
private val cb = mock(AdvertiserCallback::class.java)
|
||||
private val sharedlog = mock(SharedLog::class.java)
|
||||
|
||||
private val mockSocket1 = mock(MdnsInterfaceSocket::class.java)
|
||||
private val mockSocket2 = mock(MdnsInterfaceSocket::class.java)
|
||||
@@ -101,13 +104,15 @@ class MdnsAdvertiserTest {
|
||||
thread.start()
|
||||
doReturn(TEST_HOSTNAME).`when`(mockDeps).generateHostname()
|
||||
doReturn(mockInterfaceAdvertiser1).`when`(mockDeps).makeAdvertiser(eq(mockSocket1),
|
||||
any(), any(), any(), any(), eq(TEST_HOSTNAME)
|
||||
any(), any(), any(), any(), eq(TEST_HOSTNAME), any()
|
||||
)
|
||||
doReturn(mockInterfaceAdvertiser2).`when`(mockDeps).makeAdvertiser(eq(mockSocket2),
|
||||
any(), any(), any(), any(), eq(TEST_HOSTNAME)
|
||||
any(), any(), any(), any(), eq(TEST_HOSTNAME), any()
|
||||
)
|
||||
doReturn(true).`when`(mockInterfaceAdvertiser1).isProbing(anyInt())
|
||||
doReturn(true).`when`(mockInterfaceAdvertiser2).isProbing(anyInt())
|
||||
doReturn(createEmptyNetworkInterface()).`when`(mockSocket1).getInterface()
|
||||
doReturn(createEmptyNetworkInterface()).`when`(mockSocket2).getInterface()
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -116,9 +121,15 @@ class MdnsAdvertiserTest {
|
||||
thread.join()
|
||||
}
|
||||
|
||||
private fun createEmptyNetworkInterface(): NetworkInterface {
|
||||
val constructor = NetworkInterface::class.java.getDeclaredConstructor()
|
||||
constructor.isAccessible = true
|
||||
return constructor.newInstance()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAddService_OneNetwork() {
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps)
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
||||
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) }
|
||||
|
||||
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
||||
@@ -134,7 +145,8 @@ class MdnsAdvertiserTest {
|
||||
eq(thread.looper),
|
||||
any(),
|
||||
intAdvCbCaptor.capture(),
|
||||
eq(TEST_HOSTNAME)
|
||||
eq(TEST_HOSTNAME),
|
||||
any()
|
||||
)
|
||||
|
||||
doReturn(false).`when`(mockInterfaceAdvertiser1).isProbing(SERVICE_ID_1)
|
||||
@@ -148,7 +160,7 @@ class MdnsAdvertiserTest {
|
||||
|
||||
@Test
|
||||
fun testAddService_AllNetworks() {
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps)
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
||||
postSync { advertiser.addService(SERVICE_ID_1, ALL_NETWORKS_SERVICE) }
|
||||
|
||||
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
||||
@@ -162,10 +174,10 @@ 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(TEST_HOSTNAME)
|
||||
eq(thread.looper), any(), intAdvCbCaptor1.capture(), eq(TEST_HOSTNAME), any()
|
||||
)
|
||||
verify(mockDeps).makeAdvertiser(eq(mockSocket2), eq(listOf(TEST_LINKADDR)),
|
||||
eq(thread.looper), any(), intAdvCbCaptor2.capture(), eq(TEST_HOSTNAME)
|
||||
eq(thread.looper), any(), intAdvCbCaptor2.capture(), eq(TEST_HOSTNAME), any()
|
||||
)
|
||||
|
||||
doReturn(false).`when`(mockInterfaceAdvertiser1).isProbing(SERVICE_ID_1)
|
||||
@@ -194,7 +206,7 @@ class MdnsAdvertiserTest {
|
||||
|
||||
@Test
|
||||
fun testAddService_Conflicts() {
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps)
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
||||
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) }
|
||||
|
||||
val oneNetSocketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
||||
@@ -233,7 +245,7 @@ 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(TEST_HOSTNAME)
|
||||
eq(thread.looper), any(), intAdvCbCaptor.capture(), eq(TEST_HOSTNAME), any()
|
||||
)
|
||||
verify(mockInterfaceAdvertiser1).addService(eq(SERVICE_ID_1),
|
||||
argThat { it.matches(SERVICE_1) })
|
||||
@@ -264,7 +276,7 @@ class MdnsAdvertiserTest {
|
||||
|
||||
@Test
|
||||
fun testRemoveService_whenAllServiceRemoved_thenUpdateHostName() {
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps)
|
||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
||||
verify(mockDeps, times(1)).generateHostname()
|
||||
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) }
|
||||
postSync { advertiser.removeService(SERVICE_ID_1) }
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.net.Network;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.net.module.util.SharedLog;
|
||||
import com.android.server.connectivity.mdns.MdnsSocketClientBase.SocketCreationCallback;
|
||||
import com.android.testutils.DevSdkIgnoreRule;
|
||||
import com.android.testutils.DevSdkIgnoreRunner;
|
||||
@@ -74,13 +75,14 @@ public class MdnsDiscoveryManagerTests {
|
||||
|
||||
@Mock MdnsServiceBrowserListener mockListenerOne;
|
||||
@Mock MdnsServiceBrowserListener mockListenerTwo;
|
||||
@Mock SharedLog sharedLog;
|
||||
private MdnsDiscoveryManager discoveryManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
discoveryManager = new MdnsDiscoveryManager(executorProvider, socketClient) {
|
||||
discoveryManager = new MdnsDiscoveryManager(executorProvider, socketClient, sharedLog) {
|
||||
@Override
|
||||
MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType,
|
||||
@Nullable Network network) {
|
||||
|
||||
@@ -76,7 +76,7 @@ class MdnsInterfaceAdvertiserTest {
|
||||
private val replySender = mock(MdnsReplySender::class.java)
|
||||
private val announcer = mock(MdnsAnnouncer::class.java)
|
||||
private val prober = mock(MdnsProber::class.java)
|
||||
private val sharedlog = mock(SharedLog::class.java)
|
||||
private val sharedlog = SharedLog("MdnsInterfaceAdvertiserTest")
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
private val probeCbCaptor = ArgumentCaptor.forClass(PacketRepeaterCallback::class.java)
|
||||
as ArgumentCaptor<PacketRepeaterCallback<ProbingInfo>>
|
||||
@@ -92,7 +92,6 @@ class MdnsInterfaceAdvertiserTest {
|
||||
|
||||
private val advertiser by lazy {
|
||||
MdnsInterfaceAdvertiser(
|
||||
LOG_TAG,
|
||||
socket,
|
||||
TEST_ADDRS,
|
||||
thread.looper,
|
||||
@@ -116,6 +115,7 @@ class MdnsInterfaceAdvertiserTest {
|
||||
val knownServices = mutableSetOf<Int>()
|
||||
doAnswer { inv ->
|
||||
knownServices.add(inv.getArgument(0))
|
||||
|
||||
-1
|
||||
}.`when`(repository).addService(anyInt(), any())
|
||||
doAnswer { inv ->
|
||||
|
||||
@@ -111,6 +111,7 @@ public class MdnsSocketProviderTest {
|
||||
private MdnsSocketProvider mSocketProvider;
|
||||
private NetworkCallback mNetworkCallback;
|
||||
private TetheringEventCallback mTetheringEventCallback;
|
||||
private SharedLog mLog = new SharedLog("MdnsSocketProviderTest");
|
||||
|
||||
private TestNetlinkMonitor mTestSocketNetLinkMonitor;
|
||||
@Before
|
||||
@@ -153,7 +154,7 @@ public class MdnsSocketProviderTest {
|
||||
return mTestSocketNetLinkMonitor;
|
||||
}).when(mDeps).createSocketNetlinkMonitor(any(), any(),
|
||||
any());
|
||||
mSocketProvider = new MdnsSocketProvider(mContext, thread.getLooper(), mDeps);
|
||||
mSocketProvider = new MdnsSocketProvider(mContext, thread.getLooper(), mDeps, mLog);
|
||||
}
|
||||
|
||||
private void startMonitoringSockets() {
|
||||
|
||||
Reference in New Issue
Block a user