diff --git a/service-t/src/com/android/server/NsdService.java b/service-t/src/com/android/server/NsdService.java index f30f12004f..1e0d544b68 100644 --- a/service-t/src/com/android/server/NsdService.java +++ b/service-t/src/com/android/server/NsdService.java @@ -142,6 +142,7 @@ public class NsdService extends INsdManager.Stub { public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG); private static final long CLEANUP_DELAY_MS = 10000; private static final int IFACE_IDX_ANY = 0; + private static final SharedLog LOGGER = new SharedLog("serviceDiscovery"); private final Context mContext; private final NsdStateMachine mNsdStateMachine; @@ -157,7 +158,7 @@ public class NsdService extends INsdManager.Stub { private final MdnsSocketProvider mMdnsSocketProvider; @NonNull private final MdnsAdvertiser mAdvertiser; - private final SharedLog mServiceLogs = new SharedLog(TAG); + private final SharedLog mServiceLogs = LOGGER.forSubComponent(TAG); // WARNING : Accessing these values in any thread is not safe, it must only be changed in the // state machine thread. If change this outside state machine, it will need to introduce // synchronization. @@ -1326,17 +1327,18 @@ public class NsdService extends INsdManager.Stub { mMDnsEventCallback = new MDnsEventCallback(mNsdStateMachine); mDeps = deps; - mMdnsSocketProvider = deps.makeMdnsSocketProvider(ctx, handler.getLooper()); + mMdnsSocketProvider = deps.makeMdnsSocketProvider(ctx, handler.getLooper(), + LOGGER.forSubComponent("MdnsSocketProvider")); // Netlink monitor starts on boot, and intentionally never stopped, to ensure that all // address events are received. handler.post(mMdnsSocketProvider::startNetLinkMonitor); mMdnsSocketClient = new MdnsMultinetworkSocketClient(handler.getLooper(), mMdnsSocketProvider); - mMdnsDiscoveryManager = - deps.makeMdnsDiscoveryManager(new ExecutorProvider(), mMdnsSocketClient); + mMdnsDiscoveryManager = deps.makeMdnsDiscoveryManager(new ExecutorProvider(), + mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager")); handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager)); mAdvertiser = deps.makeMdnsAdvertiser(handler.getLooper(), mMdnsSocketProvider, - new AdvertiserCallback()); + new AdvertiserCallback(), LOGGER.forSubComponent("MdnsAdvertiser")); } /** @@ -1390,8 +1392,9 @@ public class NsdService extends INsdManager.Stub { * @see MdnsDiscoveryManager */ public MdnsDiscoveryManager makeMdnsDiscoveryManager( - ExecutorProvider executorProvider, MdnsSocketClientBase socketClient) { - return new MdnsDiscoveryManager(executorProvider, socketClient); + @NonNull ExecutorProvider executorProvider, + @NonNull MdnsSocketClientBase socketClient, @NonNull SharedLog sharedLog) { + return new MdnsDiscoveryManager(executorProvider, socketClient, sharedLog); } /** @@ -1399,15 +1402,16 @@ public class NsdService extends INsdManager.Stub { */ public MdnsAdvertiser makeMdnsAdvertiser( @NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider, - @NonNull MdnsAdvertiser.AdvertiserCallback cb) { - return new MdnsAdvertiser(looper, socketProvider, cb); + @NonNull MdnsAdvertiser.AdvertiserCallback cb, @NonNull SharedLog sharedLog) { + return new MdnsAdvertiser(looper, socketProvider, cb, sharedLog); } /** * @see MdnsSocketProvider */ - public MdnsSocketProvider makeMdnsSocketProvider(Context context, Looper looper) { - return new MdnsSocketProvider(context, looper); + public MdnsSocketProvider makeMdnsSocketProvider(@NonNull Context context, + @NonNull Looper looper, @NonNull SharedLog sharedLog) { + return new MdnsSocketProvider(context, looper, sharedLog); } } @@ -1769,30 +1773,10 @@ public class NsdService extends INsdManager.Stub { // Dump service and clients logs pw.println(); + pw.println("Logs:"); pw.increaseIndent(); mServiceLogs.reverseDump(pw); pw.decreaseIndent(); - - // Dump advertiser related logs - pw.println(); - pw.println("Advertiser:"); - pw.increaseIndent(); - mAdvertiser.dump(pw); - pw.decreaseIndent(); - - // Dump discoverymanager related logs - pw.println(); - pw.println("DiscoveryManager:"); - pw.increaseIndent(); - mMdnsDiscoveryManager.dump(pw); - pw.decreaseIndent(); - - // Dump socketprovider related logs - pw.println(); - pw.println("SocketProvider:"); - pw.increaseIndent(); - mMdnsSocketProvider.dump(pw); - pw.decreaseIndent(); } private abstract static class ClientRequest { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java b/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java index a332da7a47..655c36442b 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsAdvertiser.java @@ -33,7 +33,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.net.module.util.SharedLog; import com.android.server.connectivity.mdns.util.MdnsUtils; -import java.io.PrintWriter; import java.util.List; import java.util.Map; import java.util.UUID; @@ -51,7 +50,7 @@ public class MdnsAdvertiser { // Top-level domain for link-local queries, as per RFC6762 3. private static final String LOCAL_TLD = "local"; - private static final SharedLog LOGGER = new SharedLog(TAG); + private final Looper mLooper; private final AdvertiserCallback mCb; @@ -71,6 +70,7 @@ public class MdnsAdvertiser { private final Dependencies mDeps; private String[] mDeviceHostName; + @NonNull private final SharedLog mSharedLog; /** * Dependencies for {@link MdnsAdvertiser}, useful for testing. @@ -84,11 +84,11 @@ public class MdnsAdvertiser { @NonNull List initialAddresses, @NonNull Looper looper, @NonNull byte[] packetCreationBuffer, @NonNull MdnsInterfaceAdvertiser.Callback cb, - @NonNull String[] deviceHostName) { + @NonNull String[] deviceHostName, + @NonNull SharedLog sharedLog) { // Note NetworkInterface is final and not mockable - final String logTag = socket.getInterface().getName(); - return new MdnsInterfaceAdvertiser(logTag, socket, initialAddresses, looper, - packetCreationBuffer, cb, deviceHostName, LOGGER.forSubComponent(logTag)); + return new MdnsInterfaceAdvertiser(socket, initialAddresses, looper, + packetCreationBuffer, cb, deviceHostName, sharedLog); } /** @@ -135,7 +135,7 @@ public class MdnsAdvertiser { @Override public void onServiceConflict(@NonNull MdnsInterfaceAdvertiser advertiser, int serviceId) { - LOGGER.i("Found conflict, restarted probing for service " + serviceId); + mSharedLog.i("Found conflict, restarted probing for service " + serviceId); final Registration registration = mRegistrations.get(serviceId); if (registration == null) return; @@ -291,7 +291,8 @@ public class MdnsAdvertiser { MdnsInterfaceAdvertiser advertiser = mAllAdvertisers.get(socket); if (advertiser == null) { advertiser = mDeps.makeAdvertiser(socket, addresses, mLooper, mPacketCreationBuffer, - mInterfaceAdvertiserCb, mDeviceHostName); + mInterfaceAdvertiserCb, mDeviceHostName, + mSharedLog.forSubComponent(socket.getInterface().getName())); mAllAdvertisers.put(socket, advertiser); advertiser.start(); } @@ -416,18 +417,20 @@ public class MdnsAdvertiser { } public MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider, - @NonNull AdvertiserCallback cb) { - this(looper, socketProvider, cb, new Dependencies()); + @NonNull AdvertiserCallback cb, @NonNull SharedLog sharedLog) { + this(looper, socketProvider, cb, new Dependencies(), sharedLog); } @VisibleForTesting MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider, - @NonNull AdvertiserCallback cb, @NonNull Dependencies deps) { + @NonNull AdvertiserCallback cb, @NonNull Dependencies deps, + @NonNull SharedLog sharedLog) { mLooper = looper; mCb = cb; mSocketProvider = socketProvider; mDeps = deps; mDeviceHostName = deps.generateHostname(); + mSharedLog = sharedLog; } private void checkThread() { @@ -450,7 +453,7 @@ public class MdnsAdvertiser { return; } - LOGGER.i("Adding service " + service + " with ID " + id); + mSharedLog.i("Adding service " + service + " with ID " + id); final Network network = service.getNetwork(); final Registration registration = new Registration(service); @@ -482,7 +485,7 @@ public class MdnsAdvertiser { public void removeService(int id) { checkThread(); if (!mRegistrations.contains(id)) return; - LOGGER.i("Removing service with ID " + id); + mSharedLog.i("Removing service with ID " + id); for (int i = mAdvertiserRequests.size() - 1; i >= 0; i--) { final InterfaceAdvertiserRequest advertiser = mAdvertiserRequests.valueAt(i); advertiser.removeService(id); @@ -494,10 +497,6 @@ public class MdnsAdvertiser { } } - /** Dump info to dumpsys */ - public void dump(PrintWriter pw) { - LOGGER.reverseDump(pw); - } private static boolean any(@NonNull ArrayMap map, @NonNull BiPredicate predicate) { for (int i = 0; i < map.size(); i++) { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java index 8ca93df04d..849eac13a9 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java @@ -32,7 +32,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.net.module.util.SharedLog; import java.io.IOException; -import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; @@ -43,10 +42,10 @@ import java.util.List; public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { private static final String TAG = MdnsDiscoveryManager.class.getSimpleName(); public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG); - private static final SharedLog LOGGER = new SharedLog(TAG); private final ExecutorProvider executorProvider; private final MdnsSocketClientBase socketClient; + @NonNull private final SharedLog sharedLog; @GuardedBy("this") @NonNull private final PerNetworkServiceTypeClients perNetworkServiceTypeClients; @@ -104,9 +103,10 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { } public MdnsDiscoveryManager(@NonNull ExecutorProvider executorProvider, - @NonNull MdnsSocketClientBase socketClient) { + @NonNull MdnsSocketClientBase socketClient, @NonNull SharedLog sharedLog) { this.executorProvider = executorProvider; this.socketClient = socketClient; + this.sharedLog = sharedLog; perNetworkServiceTypeClients = new PerNetworkServiceTypeClients(); } @@ -124,13 +124,13 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { @NonNull String serviceType, @NonNull MdnsServiceBrowserListener listener, @NonNull MdnsSearchOptions searchOptions) { - LOGGER.i("Registering listener for serviceType: " + serviceType); + sharedLog.i("Registering listener for serviceType: " + serviceType); if (perNetworkServiceTypeClients.isEmpty()) { // First listener. Starts the socket client. try { socketClient.startDiscovery(); } catch (IOException e) { - LOGGER.e("Failed to start discover.", e); + sharedLog.e("Failed to start discover.", e); return; } } @@ -159,7 +159,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { @RequiresPermission(permission.CHANGE_WIFI_MULTICAST_STATE) public synchronized void unregisterListener( @NonNull String serviceType, @NonNull MdnsServiceBrowserListener listener) { - LOGGER.i("Unregistering listener for serviceType:" + serviceType); + sharedLog.i("Unregistering listener for serviceType:" + serviceType); final List serviceTypeClients = perNetworkServiceTypeClients.getByServiceType(serviceType); if (serviceTypeClients.isEmpty()) { @@ -199,19 +199,13 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { } } - /** Dump info to dumpsys */ - public void dump(PrintWriter pw) { - LOGGER.reverseDump(pw); - } - @VisibleForTesting MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType, @Nullable Network network) { - LOGGER.log("createServiceTypeClient for serviceType:" + serviceType - + " network:" + network); + sharedLog.log("createServiceTypeClient for type:" + serviceType + ", net:" + network); return new MdnsServiceTypeClient( serviceType, socketClient, executorProvider.newServiceTypeClientSchedulerExecutor(), network, - LOGGER.forSubComponent(serviceType + "-" + network)); + sharedLog.forSubComponent(serviceType + "-" + network)); } } \ No newline at end of file diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java b/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java index 9eaa580f46..4e09515a81 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java @@ -170,29 +170,29 @@ public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHand } } - public MdnsInterfaceAdvertiser(@NonNull String logTag, - @NonNull MdnsInterfaceSocket socket, @NonNull List initialAddresses, - @NonNull Looper looper, @NonNull byte[] packetCreationBuffer, @NonNull Callback cb, + public MdnsInterfaceAdvertiser(@NonNull MdnsInterfaceSocket socket, + @NonNull List initialAddresses, @NonNull Looper looper, + @NonNull byte[] packetCreationBuffer, @NonNull Callback cb, @NonNull String[] deviceHostName, @NonNull SharedLog sharedLog) { - this(logTag, socket, initialAddresses, looper, packetCreationBuffer, cb, + this(socket, initialAddresses, looper, packetCreationBuffer, cb, new Dependencies(), deviceHostName, sharedLog); } - public MdnsInterfaceAdvertiser(@NonNull String logTag, - @NonNull MdnsInterfaceSocket socket, @NonNull List initialAddresses, - @NonNull Looper looper, @NonNull byte[] packetCreationBuffer, @NonNull Callback cb, - @NonNull Dependencies deps, @NonNull String[] deviceHostName, - @NonNull SharedLog sharedLog) { - mTag = MdnsInterfaceAdvertiser.class.getSimpleName() + "/" + logTag; + public MdnsInterfaceAdvertiser(@NonNull MdnsInterfaceSocket socket, + @NonNull List initialAddresses, @NonNull Looper looper, + @NonNull byte[] packetCreationBuffer, @NonNull Callback cb, @NonNull Dependencies deps, + @NonNull String[] deviceHostName, @NonNull SharedLog sharedLog) { + mTag = MdnsInterfaceAdvertiser.class.getSimpleName() + "/" + sharedLog.getTag(); mRecordRepository = deps.makeRecordRepository(looper, deviceHostName); mRecordRepository.updateAddresses(initialAddresses); mSocket = socket; mCb = cb; mCbHandler = new Handler(looper); - mReplySender = deps.makeReplySender(logTag, looper, socket, packetCreationBuffer); - mAnnouncer = deps.makeMdnsAnnouncer(logTag, looper, mReplySender, + mReplySender = deps.makeReplySender(sharedLog.getTag(), looper, socket, + packetCreationBuffer); + mAnnouncer = deps.makeMdnsAnnouncer(sharedLog.getTag(), looper, mReplySender, mAnnouncingCallback); - mProber = deps.makeMdnsProber(logTag, looper, mReplySender, mProbingCallback); + mProber = deps.makeMdnsProber(sharedLog.getTag(), looper, mReplySender, mProbingCallback); mSharedLog = sharedLog; } diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java index 72b931d0ac..6585d4479e 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java @@ -288,16 +288,16 @@ public class MdnsServiceTypeClient { if (!responseMatchesOptions(response, listeners.valueAt(i))) continue; final MdnsServiceBrowserListener listener = listeners.keyAt(i); if (newServiceFound) { - sharedLog.log("onServiceNameDiscovered: " + serviceInstanceName); + sharedLog.log("onServiceNameDiscovered: " + serviceInfo); listener.onServiceNameDiscovered(serviceInfo); } if (response.isComplete()) { if (newServiceFound || serviceBecomesComplete) { - sharedLog.log("onServiceFound: " + serviceInstanceName); + sharedLog.log("onServiceFound: " + serviceInfo); listener.onServiceFound(serviceInfo); } else { - sharedLog.log("onServiceUpdated: " + serviceInstanceName); + sharedLog.log("onServiceUpdated: " + serviceInfo); listener.onServiceUpdated(serviceInfo); } } @@ -315,10 +315,10 @@ public class MdnsServiceTypeClient { final MdnsServiceInfo serviceInfo = buildMdnsServiceInfoFromResponse(response, serviceTypeLabels); if (response.isComplete()) { - sharedLog.log("onServiceRemoved: " + serviceInstanceName); + sharedLog.log("onServiceRemoved: " + serviceInfo); listener.onServiceRemoved(serviceInfo); } - sharedLog.log("onServiceNameRemoved: " + serviceInstanceName); + sharedLog.log("onServiceNameRemoved: " + serviceInfo); listener.onServiceNameRemoved(serviceInfo); } } @@ -535,19 +535,17 @@ public class MdnsServiceTypeClient { continue; } final MdnsServiceBrowserListener listener = listeners.keyAt(i); - String serviceInstanceName = - existingResponse.getServiceInstanceName(); - if (serviceInstanceName != null) { + if (existingResponse.getServiceInstanceName() != null) { final MdnsServiceInfo serviceInfo = buildMdnsServiceInfoFromResponse( existingResponse, serviceTypeLabels); if (existingResponse.isComplete()) { sharedLog.log("TTL expired. onServiceRemoved: " - + serviceInstanceName); + + serviceInfo); listener.onServiceRemoved(serviceInfo); } sharedLog.log("TTL expired. onServiceNameRemoved: " - + serviceInstanceName); + + serviceInfo); listener.onServiceNameRemoved(serviceInfo); } } diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java index d090a4d1f4..ca61d34adb 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java @@ -47,7 +47,6 @@ import com.android.net.module.util.LinkPropertiesUtils.CompareResult; import com.android.net.module.util.SharedLog; import java.io.IOException; -import java.io.PrintWriter; import java.net.NetworkInterface; import java.net.SocketException; import java.util.ArrayList; @@ -69,7 +68,6 @@ public class MdnsSocketProvider { // But 1440 should generally be enough because of standard Ethernet. // Note: mdnsresponder mDNSEmbeddedAPI.h uses 8940 for Ethernet jumbo frames. private static final int READ_BUFFER_SIZE = 2048; - private static final SharedLog LOGGER = new SharedLog(TAG); private static final int IFACE_IDX_NOT_EXIST = -1; @NonNull private final Context mContext; @NonNull private final Looper mLooper; @@ -78,6 +76,7 @@ public class MdnsSocketProvider { @NonNull private final NetworkCallback mNetworkCallback; @NonNull private final TetheringEventCallback mTetheringEventCallback; @NonNull private final AbstractSocketNetlink mSocketNetlinkMonitor; + @NonNull private final SharedLog mSharedLog; private final ArrayMap mNetworkSockets = new ArrayMap<>(); private final ArrayMap mTetherInterfaceSockets = new ArrayMap<>(); private final ArrayMap mActiveNetworksLinkProperties = @@ -94,16 +93,18 @@ public class MdnsSocketProvider { private boolean mMonitoringSockets = false; private boolean mRequestStop = false; - public MdnsSocketProvider(@NonNull Context context, @NonNull Looper looper) { - this(context, looper, new Dependencies()); + public MdnsSocketProvider(@NonNull Context context, @NonNull Looper looper, + @NonNull SharedLog sharedLog) { + this(context, looper, new Dependencies(), sharedLog); } MdnsSocketProvider(@NonNull Context context, @NonNull Looper looper, - @NonNull Dependencies deps) { + @NonNull Dependencies deps, @NonNull SharedLog sharedLog) { mContext = context; mLooper = looper; mHandler = new Handler(looper); mDependencies = deps; + mSharedLog = sharedLog; mNetworkCallback = new NetworkCallback() { @Override public void onLost(Network network) { @@ -135,8 +136,8 @@ public class MdnsSocketProvider { } }; - mSocketNetlinkMonitor = mDependencies.createSocketNetlinkMonitor(mHandler, LOGGER, - new NetLinkMessageProcessor()); + mSocketNetlinkMonitor = mDependencies.createSocketNetlinkMonitor(mHandler, + mSharedLog.forSubComponent("NetlinkMonitor"), new NetLinkMessageProcessor()); } /** @@ -253,7 +254,7 @@ public class MdnsSocketProvider { Log.d(TAG, "Already monitoring sockets."); return; } - LOGGER.i("Start monitoring sockets."); + mSharedLog.i("Start monitoring sockets."); mContext.getSystemService(ConnectivityManager.class).registerNetworkCallback( new NetworkRequest.Builder().clearCapabilities().build(), mNetworkCallback, mHandler); @@ -282,7 +283,7 @@ public class MdnsSocketProvider { // Only unregister the network callback if there is no socket request. if (mCallbacksToRequestedNetworks.isEmpty()) { - LOGGER.i("Stop monitoring sockets."); + mSharedLog.i("Stop monitoring sockets."); mContext.getSystemService(ConnectivityManager.class) .unregisterNetworkCallback(mNetworkCallback); @@ -420,7 +421,7 @@ public class MdnsSocketProvider { return; } - LOGGER.log("Create socket on net:" + networkKey + ", ifName:" + interfaceName); + mSharedLog.log("Create socket on net:" + networkKey + ", ifName:" + interfaceName); final MdnsInterfaceSocket socket = mDependencies.createMdnsInterfaceSocket( networkInterface.getNetworkInterface(), MdnsConstants.MDNS_PORT, mLooper, mPacketReadBuffer); @@ -441,7 +442,7 @@ public class MdnsSocketProvider { notifySocketCreated(((NetworkAsKey) networkKey).mNetwork, socket, addresses); } } catch (IOException e) { - LOGGER.e("Create socket failed ifName:" + interfaceName, e); + mSharedLog.e("Create socket failed ifName:" + interfaceName, e); } } @@ -470,7 +471,7 @@ public class MdnsSocketProvider { // transports above in priority. return iface.supportsMulticast(); } catch (SocketException e) { - LOGGER.e("Error checking interface flags", e); + mSharedLog.e("Error checking interface flags", e); return false; } } @@ -481,7 +482,7 @@ public class MdnsSocketProvider { socketInfo.mSocket.destroy(); notifyInterfaceDestroyed(network, socketInfo.mSocket); - LOGGER.log("Remove socket on net:" + network); + mSharedLog.log("Remove socket on net:" + network); } private void removeTetherInterfaceSocket(String interfaceName) { @@ -489,7 +490,7 @@ public class MdnsSocketProvider { if (socketInfo == null) return; socketInfo.mSocket.destroy(); notifyInterfaceDestroyed(null /* network */, socketInfo.mSocket); - LOGGER.log("Remove socket on ifName:" + interfaceName); + mSharedLog.log("Remove socket on ifName:" + interfaceName); } private void notifySocketCreated(Network network, MdnsInterfaceSocket socket, @@ -561,6 +562,7 @@ public class MdnsSocketProvider { */ public void requestSocket(@Nullable Network network, @NonNull SocketCallback cb) { ensureRunningOnHandlerThread(mHandler); + mSharedLog.log("requestSocket for net:" + network); mCallbacksToRequestedNetworks.put(cb, network); if (network == null) { // Does not specify a required network, create sockets for all possible @@ -584,6 +586,7 @@ public class MdnsSocketProvider { /*** Unrequest the socket */ public void unrequestSocket(@NonNull SocketCallback cb) { ensureRunningOnHandlerThread(mHandler); + mSharedLog.log("unrequestSocket"); mCallbacksToRequestedNetworks.remove(cb); if (hasAllNetworksRequest()) { // Still has a request for all networks (interfaces). @@ -598,7 +601,7 @@ public class MdnsSocketProvider { info.mSocket.destroy(); // Still notify to unrequester for socket destroy. cb.onInterfaceDestroyed(network, info.mSocket); - LOGGER.log("Remove socket on net:" + network + " after unrequestSocket"); + mSharedLog.log("Remove socket on net:" + network + " after unrequestSocket"); } // Remove all sockets for tethering interface because these sockets do not have associated @@ -609,7 +612,7 @@ public class MdnsSocketProvider { info.mSocket.destroy(); // Still notify to unrequester for socket destroy. cb.onInterfaceDestroyed(null /* network */, info.mSocket); - LOGGER.log("Remove socket on ifName:" + mTetherInterfaceSockets.keyAt(i) + mSharedLog.log("Remove socket on ifName:" + mTetherInterfaceSockets.keyAt(i) + " after unrequestSocket"); } mTetherInterfaceSockets.clear(); @@ -618,10 +621,6 @@ public class MdnsSocketProvider { maybeStopMonitoringSockets(); } - /** Dump info to dumpsys */ - public void dump(PrintWriter pw) { - LOGGER.reverseDump(pw); - } /*** Callbacks for listening socket changes */ public interface SocketCallback { diff --git a/tests/unit/java/com/android/server/NsdServiceTest.java b/tests/unit/java/com/android/server/NsdServiceTest.java index 2ed989eff0..14b4280029 100644 --- a/tests/unit/java/com/android/server/NsdServiceTest.java +++ b/tests/unit/java/com/android/server/NsdServiceTest.java @@ -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 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 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 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")); diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsAdvertiserTest.kt b/tests/unit/java/com/android/server/connectivity/mdns/MdnsAdvertiserTest.kt index 4b495cd36f..3bb08a668e 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsAdvertiserTest.kt +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsAdvertiserTest.kt @@ -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) } diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java index e12d9a6593..0a23ba5539 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java @@ -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) { diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiserTest.kt b/tests/unit/java/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiserTest.kt index 9c0abfcf08..ee190af14d 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiserTest.kt +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiserTest.kt @@ -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> @@ -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() doAnswer { inv -> knownServices.add(inv.getArgument(0)) + -1 }.`when`(repository).addService(anyInt(), any()) doAnswer { inv -> diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsSocketProviderTest.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsSocketProviderTest.java index 6f3322b9a6..744ec845b8 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsSocketProviderTest.java +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsSocketProviderTest.java @@ -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() {