Merge "Use a single SharedLog for all mdns components" into udc-dev

This commit is contained in:
Treehugger Robot
2023-05-11 09:08:18 +00:00
committed by Android (Google) Code Review
11 changed files with 115 additions and 126 deletions

View File

@@ -142,6 +142,7 @@ public class NsdService extends INsdManager.Stub {
public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG); public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
private static final long CLEANUP_DELAY_MS = 10000; private static final long CLEANUP_DELAY_MS = 10000;
private static final int IFACE_IDX_ANY = 0; private static final int IFACE_IDX_ANY = 0;
private static final SharedLog LOGGER = new SharedLog("serviceDiscovery");
private final Context mContext; private final Context mContext;
private final NsdStateMachine mNsdStateMachine; private final NsdStateMachine mNsdStateMachine;
@@ -157,7 +158,7 @@ public class NsdService extends INsdManager.Stub {
private final MdnsSocketProvider mMdnsSocketProvider; private final MdnsSocketProvider mMdnsSocketProvider;
@NonNull @NonNull
private final MdnsAdvertiser mAdvertiser; 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 // 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 // state machine thread. If change this outside state machine, it will need to introduce
// synchronization. // synchronization.
@@ -1326,17 +1327,18 @@ public class NsdService extends INsdManager.Stub {
mMDnsEventCallback = new MDnsEventCallback(mNsdStateMachine); mMDnsEventCallback = new MDnsEventCallback(mNsdStateMachine);
mDeps = deps; 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 // Netlink monitor starts on boot, and intentionally never stopped, to ensure that all
// address events are received. // address events are received.
handler.post(mMdnsSocketProvider::startNetLinkMonitor); handler.post(mMdnsSocketProvider::startNetLinkMonitor);
mMdnsSocketClient = mMdnsSocketClient =
new MdnsMultinetworkSocketClient(handler.getLooper(), mMdnsSocketProvider); new MdnsMultinetworkSocketClient(handler.getLooper(), mMdnsSocketProvider);
mMdnsDiscoveryManager = mMdnsDiscoveryManager = deps.makeMdnsDiscoveryManager(new ExecutorProvider(),
deps.makeMdnsDiscoveryManager(new ExecutorProvider(), mMdnsSocketClient); mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager"));
handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager)); handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager));
mAdvertiser = deps.makeMdnsAdvertiser(handler.getLooper(), mMdnsSocketProvider, 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 * @see MdnsDiscoveryManager
*/ */
public MdnsDiscoveryManager makeMdnsDiscoveryManager( public MdnsDiscoveryManager makeMdnsDiscoveryManager(
ExecutorProvider executorProvider, MdnsSocketClientBase socketClient) { @NonNull ExecutorProvider executorProvider,
return new MdnsDiscoveryManager(executorProvider, socketClient); @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( public MdnsAdvertiser makeMdnsAdvertiser(
@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider, @NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider,
@NonNull MdnsAdvertiser.AdvertiserCallback cb) { @NonNull MdnsAdvertiser.AdvertiserCallback cb, @NonNull SharedLog sharedLog) {
return new MdnsAdvertiser(looper, socketProvider, cb); return new MdnsAdvertiser(looper, socketProvider, cb, sharedLog);
} }
/** /**
* @see MdnsSocketProvider * @see MdnsSocketProvider
*/ */
public MdnsSocketProvider makeMdnsSocketProvider(Context context, Looper looper) { public MdnsSocketProvider makeMdnsSocketProvider(@NonNull Context context,
return new MdnsSocketProvider(context, looper); @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 // Dump service and clients logs
pw.println(); pw.println();
pw.println("Logs:");
pw.increaseIndent(); pw.increaseIndent();
mServiceLogs.reverseDump(pw); mServiceLogs.reverseDump(pw);
pw.decreaseIndent(); 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 { private abstract static class ClientRequest {

View File

@@ -33,7 +33,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.net.module.util.SharedLog; import com.android.net.module.util.SharedLog;
import com.android.server.connectivity.mdns.util.MdnsUtils; import com.android.server.connectivity.mdns.util.MdnsUtils;
import java.io.PrintWriter;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@@ -51,7 +50,7 @@ public class MdnsAdvertiser {
// Top-level domain for link-local queries, as per RFC6762 3. // Top-level domain for link-local queries, as per RFC6762 3.
private static final String LOCAL_TLD = "local"; private static final String LOCAL_TLD = "local";
private static final SharedLog LOGGER = new SharedLog(TAG);
private final Looper mLooper; private final Looper mLooper;
private final AdvertiserCallback mCb; private final AdvertiserCallback mCb;
@@ -71,6 +70,7 @@ public class MdnsAdvertiser {
private final Dependencies mDeps; private final Dependencies mDeps;
private String[] mDeviceHostName; private String[] mDeviceHostName;
@NonNull private final SharedLog mSharedLog;
/** /**
* Dependencies for {@link MdnsAdvertiser}, useful for testing. * Dependencies for {@link MdnsAdvertiser}, useful for testing.
@@ -84,11 +84,11 @@ public class MdnsAdvertiser {
@NonNull List<LinkAddress> initialAddresses, @NonNull List<LinkAddress> initialAddresses,
@NonNull Looper looper, @NonNull byte[] packetCreationBuffer, @NonNull Looper looper, @NonNull byte[] packetCreationBuffer,
@NonNull MdnsInterfaceAdvertiser.Callback cb, @NonNull MdnsInterfaceAdvertiser.Callback cb,
@NonNull String[] deviceHostName) { @NonNull String[] deviceHostName,
@NonNull SharedLog sharedLog) {
// Note NetworkInterface is final and not mockable // Note NetworkInterface is final and not mockable
final String logTag = socket.getInterface().getName(); return new MdnsInterfaceAdvertiser(socket, initialAddresses, looper,
return new MdnsInterfaceAdvertiser(logTag, socket, initialAddresses, looper, packetCreationBuffer, cb, deviceHostName, sharedLog);
packetCreationBuffer, cb, deviceHostName, LOGGER.forSubComponent(logTag));
} }
/** /**
@@ -135,7 +135,7 @@ public class MdnsAdvertiser {
@Override @Override
public void onServiceConflict(@NonNull MdnsInterfaceAdvertiser advertiser, int serviceId) { 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); final Registration registration = mRegistrations.get(serviceId);
if (registration == null) return; if (registration == null) return;
@@ -291,7 +291,8 @@ public class MdnsAdvertiser {
MdnsInterfaceAdvertiser advertiser = mAllAdvertisers.get(socket); MdnsInterfaceAdvertiser advertiser = mAllAdvertisers.get(socket);
if (advertiser == null) { if (advertiser == null) {
advertiser = mDeps.makeAdvertiser(socket, addresses, mLooper, mPacketCreationBuffer, advertiser = mDeps.makeAdvertiser(socket, addresses, mLooper, mPacketCreationBuffer,
mInterfaceAdvertiserCb, mDeviceHostName); mInterfaceAdvertiserCb, mDeviceHostName,
mSharedLog.forSubComponent(socket.getInterface().getName()));
mAllAdvertisers.put(socket, advertiser); mAllAdvertisers.put(socket, advertiser);
advertiser.start(); advertiser.start();
} }
@@ -416,18 +417,20 @@ public class MdnsAdvertiser {
} }
public MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider, public MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider,
@NonNull AdvertiserCallback cb) { @NonNull AdvertiserCallback cb, @NonNull SharedLog sharedLog) {
this(looper, socketProvider, cb, new Dependencies()); this(looper, socketProvider, cb, new Dependencies(), sharedLog);
} }
@VisibleForTesting @VisibleForTesting
MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider, MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider,
@NonNull AdvertiserCallback cb, @NonNull Dependencies deps) { @NonNull AdvertiserCallback cb, @NonNull Dependencies deps,
@NonNull SharedLog sharedLog) {
mLooper = looper; mLooper = looper;
mCb = cb; mCb = cb;
mSocketProvider = socketProvider; mSocketProvider = socketProvider;
mDeps = deps; mDeps = deps;
mDeviceHostName = deps.generateHostname(); mDeviceHostName = deps.generateHostname();
mSharedLog = sharedLog;
} }
private void checkThread() { private void checkThread() {
@@ -450,7 +453,7 @@ public class MdnsAdvertiser {
return; return;
} }
LOGGER.i("Adding service " + service + " with ID " + id); mSharedLog.i("Adding service " + service + " with ID " + id);
final Network network = service.getNetwork(); final Network network = service.getNetwork();
final Registration registration = new Registration(service); final Registration registration = new Registration(service);
@@ -482,7 +485,7 @@ public class MdnsAdvertiser {
public void removeService(int id) { public void removeService(int id) {
checkThread(); checkThread();
if (!mRegistrations.contains(id)) return; 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--) { for (int i = mAdvertiserRequests.size() - 1; i >= 0; i--) {
final InterfaceAdvertiserRequest advertiser = mAdvertiserRequests.valueAt(i); final InterfaceAdvertiserRequest advertiser = mAdvertiserRequests.valueAt(i);
advertiser.removeService(id); advertiser.removeService(id);
@@ -494,10 +497,6 @@ public class MdnsAdvertiser {
} }
} }
/** Dump info to dumpsys */
public void dump(PrintWriter pw) {
LOGGER.reverseDump(pw);
}
private static <K, V> boolean any(@NonNull ArrayMap<K, V> map, private static <K, V> boolean any(@NonNull ArrayMap<K, V> map,
@NonNull BiPredicate<K, V> predicate) { @NonNull BiPredicate<K, V> predicate) {
for (int i = 0; i < map.size(); i++) { for (int i = 0; i < map.size(); i++) {

View File

@@ -32,7 +32,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.net.module.util.SharedLog; import com.android.net.module.util.SharedLog;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -43,10 +42,10 @@ import java.util.List;
public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
private static final String TAG = MdnsDiscoveryManager.class.getSimpleName(); private static final String TAG = MdnsDiscoveryManager.class.getSimpleName();
public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG); public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
private static final SharedLog LOGGER = new SharedLog(TAG);
private final ExecutorProvider executorProvider; private final ExecutorProvider executorProvider;
private final MdnsSocketClientBase socketClient; private final MdnsSocketClientBase socketClient;
@NonNull private final SharedLog sharedLog;
@GuardedBy("this") @GuardedBy("this")
@NonNull private final PerNetworkServiceTypeClients perNetworkServiceTypeClients; @NonNull private final PerNetworkServiceTypeClients perNetworkServiceTypeClients;
@@ -104,9 +103,10 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
} }
public MdnsDiscoveryManager(@NonNull ExecutorProvider executorProvider, public MdnsDiscoveryManager(@NonNull ExecutorProvider executorProvider,
@NonNull MdnsSocketClientBase socketClient) { @NonNull MdnsSocketClientBase socketClient, @NonNull SharedLog sharedLog) {
this.executorProvider = executorProvider; this.executorProvider = executorProvider;
this.socketClient = socketClient; this.socketClient = socketClient;
this.sharedLog = sharedLog;
perNetworkServiceTypeClients = new PerNetworkServiceTypeClients(); perNetworkServiceTypeClients = new PerNetworkServiceTypeClients();
} }
@@ -124,13 +124,13 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
@NonNull String serviceType, @NonNull String serviceType,
@NonNull MdnsServiceBrowserListener listener, @NonNull MdnsServiceBrowserListener listener,
@NonNull MdnsSearchOptions searchOptions) { @NonNull MdnsSearchOptions searchOptions) {
LOGGER.i("Registering listener for serviceType: " + serviceType); sharedLog.i("Registering listener for serviceType: " + serviceType);
if (perNetworkServiceTypeClients.isEmpty()) { if (perNetworkServiceTypeClients.isEmpty()) {
// First listener. Starts the socket client. // First listener. Starts the socket client.
try { try {
socketClient.startDiscovery(); socketClient.startDiscovery();
} catch (IOException e) { } catch (IOException e) {
LOGGER.e("Failed to start discover.", e); sharedLog.e("Failed to start discover.", e);
return; return;
} }
} }
@@ -159,7 +159,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
@RequiresPermission(permission.CHANGE_WIFI_MULTICAST_STATE) @RequiresPermission(permission.CHANGE_WIFI_MULTICAST_STATE)
public synchronized void unregisterListener( public synchronized void unregisterListener(
@NonNull String serviceType, @NonNull MdnsServiceBrowserListener listener) { @NonNull String serviceType, @NonNull MdnsServiceBrowserListener listener) {
LOGGER.i("Unregistering listener for serviceType:" + serviceType); sharedLog.i("Unregistering listener for serviceType:" + serviceType);
final List<MdnsServiceTypeClient> serviceTypeClients = final List<MdnsServiceTypeClient> serviceTypeClients =
perNetworkServiceTypeClients.getByServiceType(serviceType); perNetworkServiceTypeClients.getByServiceType(serviceType);
if (serviceTypeClients.isEmpty()) { 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 @VisibleForTesting
MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType, MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType,
@Nullable Network network) { @Nullable Network network) {
LOGGER.log("createServiceTypeClient for serviceType:" + serviceType sharedLog.log("createServiceTypeClient for type:" + serviceType + ", net:" + network);
+ " network:" + network);
return new MdnsServiceTypeClient( return new MdnsServiceTypeClient(
serviceType, socketClient, serviceType, socketClient,
executorProvider.newServiceTypeClientSchedulerExecutor(), network, executorProvider.newServiceTypeClientSchedulerExecutor(), network,
LOGGER.forSubComponent(serviceType + "-" + network)); sharedLog.forSubComponent(serviceType + "-" + network));
} }
} }

View File

@@ -170,29 +170,29 @@ public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHand
} }
} }
public MdnsInterfaceAdvertiser(@NonNull String logTag, public MdnsInterfaceAdvertiser(@NonNull MdnsInterfaceSocket socket,
@NonNull MdnsInterfaceSocket socket, @NonNull List<LinkAddress> initialAddresses, @NonNull List<LinkAddress> initialAddresses, @NonNull Looper looper,
@NonNull Looper looper, @NonNull byte[] packetCreationBuffer, @NonNull Callback cb, @NonNull byte[] packetCreationBuffer, @NonNull Callback cb,
@NonNull String[] deviceHostName, @NonNull SharedLog sharedLog) { @NonNull String[] deviceHostName, @NonNull SharedLog sharedLog) {
this(logTag, socket, initialAddresses, looper, packetCreationBuffer, cb, this(socket, initialAddresses, looper, packetCreationBuffer, cb,
new Dependencies(), deviceHostName, sharedLog); new Dependencies(), deviceHostName, sharedLog);
} }
public MdnsInterfaceAdvertiser(@NonNull String logTag, public MdnsInterfaceAdvertiser(@NonNull MdnsInterfaceSocket socket,
@NonNull MdnsInterfaceSocket socket, @NonNull List<LinkAddress> initialAddresses, @NonNull List<LinkAddress> initialAddresses, @NonNull Looper looper,
@NonNull Looper looper, @NonNull byte[] packetCreationBuffer, @NonNull Callback cb, @NonNull byte[] packetCreationBuffer, @NonNull Callback cb, @NonNull Dependencies deps,
@NonNull Dependencies deps, @NonNull String[] deviceHostName, @NonNull String[] deviceHostName, @NonNull SharedLog sharedLog) {
@NonNull SharedLog sharedLog) { mTag = MdnsInterfaceAdvertiser.class.getSimpleName() + "/" + sharedLog.getTag();
mTag = MdnsInterfaceAdvertiser.class.getSimpleName() + "/" + logTag;
mRecordRepository = deps.makeRecordRepository(looper, deviceHostName); mRecordRepository = deps.makeRecordRepository(looper, deviceHostName);
mRecordRepository.updateAddresses(initialAddresses); mRecordRepository.updateAddresses(initialAddresses);
mSocket = socket; mSocket = socket;
mCb = cb; mCb = cb;
mCbHandler = new Handler(looper); mCbHandler = new Handler(looper);
mReplySender = deps.makeReplySender(logTag, looper, socket, packetCreationBuffer); mReplySender = deps.makeReplySender(sharedLog.getTag(), looper, socket,
mAnnouncer = deps.makeMdnsAnnouncer(logTag, looper, mReplySender, packetCreationBuffer);
mAnnouncer = deps.makeMdnsAnnouncer(sharedLog.getTag(), looper, mReplySender,
mAnnouncingCallback); mAnnouncingCallback);
mProber = deps.makeMdnsProber(logTag, looper, mReplySender, mProbingCallback); mProber = deps.makeMdnsProber(sharedLog.getTag(), looper, mReplySender, mProbingCallback);
mSharedLog = sharedLog; mSharedLog = sharedLog;
} }

View File

@@ -288,16 +288,16 @@ public class MdnsServiceTypeClient {
if (!responseMatchesOptions(response, listeners.valueAt(i))) continue; if (!responseMatchesOptions(response, listeners.valueAt(i))) continue;
final MdnsServiceBrowserListener listener = listeners.keyAt(i); final MdnsServiceBrowserListener listener = listeners.keyAt(i);
if (newServiceFound) { if (newServiceFound) {
sharedLog.log("onServiceNameDiscovered: " + serviceInstanceName); sharedLog.log("onServiceNameDiscovered: " + serviceInfo);
listener.onServiceNameDiscovered(serviceInfo); listener.onServiceNameDiscovered(serviceInfo);
} }
if (response.isComplete()) { if (response.isComplete()) {
if (newServiceFound || serviceBecomesComplete) { if (newServiceFound || serviceBecomesComplete) {
sharedLog.log("onServiceFound: " + serviceInstanceName); sharedLog.log("onServiceFound: " + serviceInfo);
listener.onServiceFound(serviceInfo); listener.onServiceFound(serviceInfo);
} else { } else {
sharedLog.log("onServiceUpdated: " + serviceInstanceName); sharedLog.log("onServiceUpdated: " + serviceInfo);
listener.onServiceUpdated(serviceInfo); listener.onServiceUpdated(serviceInfo);
} }
} }
@@ -315,10 +315,10 @@ public class MdnsServiceTypeClient {
final MdnsServiceInfo serviceInfo = final MdnsServiceInfo serviceInfo =
buildMdnsServiceInfoFromResponse(response, serviceTypeLabels); buildMdnsServiceInfoFromResponse(response, serviceTypeLabels);
if (response.isComplete()) { if (response.isComplete()) {
sharedLog.log("onServiceRemoved: " + serviceInstanceName); sharedLog.log("onServiceRemoved: " + serviceInfo);
listener.onServiceRemoved(serviceInfo); listener.onServiceRemoved(serviceInfo);
} }
sharedLog.log("onServiceNameRemoved: " + serviceInstanceName); sharedLog.log("onServiceNameRemoved: " + serviceInfo);
listener.onServiceNameRemoved(serviceInfo); listener.onServiceNameRemoved(serviceInfo);
} }
} }
@@ -535,19 +535,17 @@ public class MdnsServiceTypeClient {
continue; continue;
} }
final MdnsServiceBrowserListener listener = listeners.keyAt(i); final MdnsServiceBrowserListener listener = listeners.keyAt(i);
String serviceInstanceName = if (existingResponse.getServiceInstanceName() != null) {
existingResponse.getServiceInstanceName();
if (serviceInstanceName != null) {
final MdnsServiceInfo serviceInfo = final MdnsServiceInfo serviceInfo =
buildMdnsServiceInfoFromResponse( buildMdnsServiceInfoFromResponse(
existingResponse, serviceTypeLabels); existingResponse, serviceTypeLabels);
if (existingResponse.isComplete()) { if (existingResponse.isComplete()) {
sharedLog.log("TTL expired. onServiceRemoved: " sharedLog.log("TTL expired. onServiceRemoved: "
+ serviceInstanceName); + serviceInfo);
listener.onServiceRemoved(serviceInfo); listener.onServiceRemoved(serviceInfo);
} }
sharedLog.log("TTL expired. onServiceNameRemoved: " sharedLog.log("TTL expired. onServiceNameRemoved: "
+ serviceInstanceName); + serviceInfo);
listener.onServiceNameRemoved(serviceInfo); listener.onServiceNameRemoved(serviceInfo);
} }
} }

View File

@@ -47,7 +47,6 @@ import com.android.net.module.util.LinkPropertiesUtils.CompareResult;
import com.android.net.module.util.SharedLog; import com.android.net.module.util.SharedLog;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.net.NetworkInterface; import java.net.NetworkInterface;
import java.net.SocketException; import java.net.SocketException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -69,7 +68,6 @@ public class MdnsSocketProvider {
// But 1440 should generally be enough because of standard Ethernet. // But 1440 should generally be enough because of standard Ethernet.
// Note: mdnsresponder mDNSEmbeddedAPI.h uses 8940 for Ethernet jumbo frames. // Note: mdnsresponder mDNSEmbeddedAPI.h uses 8940 for Ethernet jumbo frames.
private static final int READ_BUFFER_SIZE = 2048; 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; private static final int IFACE_IDX_NOT_EXIST = -1;
@NonNull private final Context mContext; @NonNull private final Context mContext;
@NonNull private final Looper mLooper; @NonNull private final Looper mLooper;
@@ -78,6 +76,7 @@ public class MdnsSocketProvider {
@NonNull private final NetworkCallback mNetworkCallback; @NonNull private final NetworkCallback mNetworkCallback;
@NonNull private final TetheringEventCallback mTetheringEventCallback; @NonNull private final TetheringEventCallback mTetheringEventCallback;
@NonNull private final AbstractSocketNetlink mSocketNetlinkMonitor; @NonNull private final AbstractSocketNetlink mSocketNetlinkMonitor;
@NonNull private final SharedLog mSharedLog;
private final ArrayMap<Network, SocketInfo> mNetworkSockets = new ArrayMap<>(); private final ArrayMap<Network, SocketInfo> mNetworkSockets = new ArrayMap<>();
private final ArrayMap<String, SocketInfo> mTetherInterfaceSockets = new ArrayMap<>(); private final ArrayMap<String, SocketInfo> mTetherInterfaceSockets = new ArrayMap<>();
private final ArrayMap<Network, LinkProperties> mActiveNetworksLinkProperties = private final ArrayMap<Network, LinkProperties> mActiveNetworksLinkProperties =
@@ -94,16 +93,18 @@ public class MdnsSocketProvider {
private boolean mMonitoringSockets = false; private boolean mMonitoringSockets = false;
private boolean mRequestStop = false; private boolean mRequestStop = false;
public MdnsSocketProvider(@NonNull Context context, @NonNull Looper looper) { public MdnsSocketProvider(@NonNull Context context, @NonNull Looper looper,
this(context, looper, new Dependencies()); @NonNull SharedLog sharedLog) {
this(context, looper, new Dependencies(), sharedLog);
} }
MdnsSocketProvider(@NonNull Context context, @NonNull Looper looper, MdnsSocketProvider(@NonNull Context context, @NonNull Looper looper,
@NonNull Dependencies deps) { @NonNull Dependencies deps, @NonNull SharedLog sharedLog) {
mContext = context; mContext = context;
mLooper = looper; mLooper = looper;
mHandler = new Handler(looper); mHandler = new Handler(looper);
mDependencies = deps; mDependencies = deps;
mSharedLog = sharedLog;
mNetworkCallback = new NetworkCallback() { mNetworkCallback = new NetworkCallback() {
@Override @Override
public void onLost(Network network) { public void onLost(Network network) {
@@ -135,8 +136,8 @@ public class MdnsSocketProvider {
} }
}; };
mSocketNetlinkMonitor = mDependencies.createSocketNetlinkMonitor(mHandler, LOGGER, mSocketNetlinkMonitor = mDependencies.createSocketNetlinkMonitor(mHandler,
new NetLinkMessageProcessor()); mSharedLog.forSubComponent("NetlinkMonitor"), new NetLinkMessageProcessor());
} }
/** /**
@@ -253,7 +254,7 @@ public class MdnsSocketProvider {
Log.d(TAG, "Already monitoring sockets."); Log.d(TAG, "Already monitoring sockets.");
return; return;
} }
LOGGER.i("Start monitoring sockets."); mSharedLog.i("Start monitoring sockets.");
mContext.getSystemService(ConnectivityManager.class).registerNetworkCallback( mContext.getSystemService(ConnectivityManager.class).registerNetworkCallback(
new NetworkRequest.Builder().clearCapabilities().build(), new NetworkRequest.Builder().clearCapabilities().build(),
mNetworkCallback, mHandler); mNetworkCallback, mHandler);
@@ -282,7 +283,7 @@ public class MdnsSocketProvider {
// Only unregister the network callback if there is no socket request. // Only unregister the network callback if there is no socket request.
if (mCallbacksToRequestedNetworks.isEmpty()) { if (mCallbacksToRequestedNetworks.isEmpty()) {
LOGGER.i("Stop monitoring sockets."); mSharedLog.i("Stop monitoring sockets.");
mContext.getSystemService(ConnectivityManager.class) mContext.getSystemService(ConnectivityManager.class)
.unregisterNetworkCallback(mNetworkCallback); .unregisterNetworkCallback(mNetworkCallback);
@@ -420,7 +421,7 @@ public class MdnsSocketProvider {
return; return;
} }
LOGGER.log("Create socket on net:" + networkKey + ", ifName:" + interfaceName); mSharedLog.log("Create socket on net:" + networkKey + ", ifName:" + interfaceName);
final MdnsInterfaceSocket socket = mDependencies.createMdnsInterfaceSocket( final MdnsInterfaceSocket socket = mDependencies.createMdnsInterfaceSocket(
networkInterface.getNetworkInterface(), MdnsConstants.MDNS_PORT, mLooper, networkInterface.getNetworkInterface(), MdnsConstants.MDNS_PORT, mLooper,
mPacketReadBuffer); mPacketReadBuffer);
@@ -441,7 +442,7 @@ public class MdnsSocketProvider {
notifySocketCreated(((NetworkAsKey) networkKey).mNetwork, socket, addresses); notifySocketCreated(((NetworkAsKey) networkKey).mNetwork, socket, addresses);
} }
} catch (IOException e) { } 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. // transports above in priority.
return iface.supportsMulticast(); return iface.supportsMulticast();
} catch (SocketException e) { } catch (SocketException e) {
LOGGER.e("Error checking interface flags", e); mSharedLog.e("Error checking interface flags", e);
return false; return false;
} }
} }
@@ -481,7 +482,7 @@ public class MdnsSocketProvider {
socketInfo.mSocket.destroy(); socketInfo.mSocket.destroy();
notifyInterfaceDestroyed(network, socketInfo.mSocket); notifyInterfaceDestroyed(network, socketInfo.mSocket);
LOGGER.log("Remove socket on net:" + network); mSharedLog.log("Remove socket on net:" + network);
} }
private void removeTetherInterfaceSocket(String interfaceName) { private void removeTetherInterfaceSocket(String interfaceName) {
@@ -489,7 +490,7 @@ public class MdnsSocketProvider {
if (socketInfo == null) return; if (socketInfo == null) return;
socketInfo.mSocket.destroy(); socketInfo.mSocket.destroy();
notifyInterfaceDestroyed(null /* network */, socketInfo.mSocket); 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, private void notifySocketCreated(Network network, MdnsInterfaceSocket socket,
@@ -561,6 +562,7 @@ public class MdnsSocketProvider {
*/ */
public void requestSocket(@Nullable Network network, @NonNull SocketCallback cb) { public void requestSocket(@Nullable Network network, @NonNull SocketCallback cb) {
ensureRunningOnHandlerThread(mHandler); ensureRunningOnHandlerThread(mHandler);
mSharedLog.log("requestSocket for net:" + network);
mCallbacksToRequestedNetworks.put(cb, network); mCallbacksToRequestedNetworks.put(cb, network);
if (network == null) { if (network == null) {
// Does not specify a required network, create sockets for all possible // Does not specify a required network, create sockets for all possible
@@ -584,6 +586,7 @@ public class MdnsSocketProvider {
/*** Unrequest the socket */ /*** Unrequest the socket */
public void unrequestSocket(@NonNull SocketCallback cb) { public void unrequestSocket(@NonNull SocketCallback cb) {
ensureRunningOnHandlerThread(mHandler); ensureRunningOnHandlerThread(mHandler);
mSharedLog.log("unrequestSocket");
mCallbacksToRequestedNetworks.remove(cb); mCallbacksToRequestedNetworks.remove(cb);
if (hasAllNetworksRequest()) { if (hasAllNetworksRequest()) {
// Still has a request for all networks (interfaces). // Still has a request for all networks (interfaces).
@@ -598,7 +601,7 @@ public class MdnsSocketProvider {
info.mSocket.destroy(); info.mSocket.destroy();
// Still notify to unrequester for socket destroy. // Still notify to unrequester for socket destroy.
cb.onInterfaceDestroyed(network, info.mSocket); 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 // Remove all sockets for tethering interface because these sockets do not have associated
@@ -609,7 +612,7 @@ public class MdnsSocketProvider {
info.mSocket.destroy(); info.mSocket.destroy();
// Still notify to unrequester for socket destroy. // Still notify to unrequester for socket destroy.
cb.onInterfaceDestroyed(null /* network */, info.mSocket); 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"); + " after unrequestSocket");
} }
mTetherInterfaceSockets.clear(); mTetherInterfaceSockets.clear();
@@ -618,10 +621,6 @@ public class MdnsSocketProvider {
maybeStopMonitoringSockets(); maybeStopMonitoringSockets();
} }
/** Dump info to dumpsys */
public void dump(PrintWriter pw) {
LOGGER.reverseDump(pw);
}
/*** Callbacks for listening socket changes */ /*** Callbacks for listening socket changes */
public interface SocketCallback { public interface SocketCallback {

View File

@@ -175,9 +175,9 @@ public class NsdServiceTest {
doReturn(true).when(mMockMDnsM).resolve( doReturn(true).when(mMockMDnsM).resolve(
anyInt(), anyString(), anyString(), anyString(), anyInt()); anyInt(), anyString(), anyString(), anyString(), anyInt());
doReturn(false).when(mDeps).isMdnsDiscoveryManagerEnabled(any(Context.class)); doReturn(false).when(mDeps).isMdnsDiscoveryManagerEnabled(any(Context.class));
doReturn(mDiscoveryManager).when(mDeps).makeMdnsDiscoveryManager(any(), any()); doReturn(mDiscoveryManager).when(mDeps).makeMdnsDiscoveryManager(any(), any(), any());
doReturn(mSocketProvider).when(mDeps).makeMdnsSocketProvider(any(), any()); doReturn(mSocketProvider).when(mDeps).makeMdnsSocketProvider(any(), any(), any());
doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any()); doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any(), any());
mService = makeService(); mService = makeService();
} }
@@ -1122,7 +1122,7 @@ public class NsdServiceTest {
// final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local"; // final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor = final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor =
ArgumentCaptor.forClass(MdnsAdvertiser.AdvertiserCallback.class); 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); final NsdServiceInfo regInfo = new NsdServiceInfo(SERVICE_NAME, SERVICE_TYPE);
regInfo.setHost(parseNumericAddress("192.0.2.123")); regInfo.setHost(parseNumericAddress("192.0.2.123"));
@@ -1161,7 +1161,7 @@ public class NsdServiceTest {
// final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local"; // final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor = final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor =
ArgumentCaptor.forClass(MdnsAdvertiser.AdvertiserCallback.class); 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"); final NsdServiceInfo regInfo = new NsdServiceInfo(SERVICE_NAME, "invalid_type");
regInfo.setHost(parseNumericAddress("192.0.2.123")); regInfo.setHost(parseNumericAddress("192.0.2.123"));
@@ -1186,7 +1186,7 @@ public class NsdServiceTest {
// final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local"; // final String serviceTypeWithLocalDomain = SERVICE_TYPE + ".local";
final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor = final ArgumentCaptor<MdnsAdvertiser.AdvertiserCallback> cbCaptor =
ArgumentCaptor.forClass(MdnsAdvertiser.AdvertiserCallback.class); 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); final NsdServiceInfo regInfo = new NsdServiceInfo("a".repeat(70), SERVICE_TYPE);
regInfo.setHost(parseNumericAddress("192.0.2.123")); regInfo.setHost(parseNumericAddress("192.0.2.123"));

View File

@@ -23,11 +23,13 @@ import android.net.nsd.NsdServiceInfo
import android.os.Build import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.HandlerThread 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.MdnsAdvertiser.AdvertiserCallback
import com.android.server.connectivity.mdns.MdnsSocketProvider.SocketCallback import com.android.server.connectivity.mdns.MdnsSocketProvider.SocketCallback
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
import com.android.testutils.DevSdkIgnoreRunner import com.android.testutils.DevSdkIgnoreRunner
import com.android.testutils.waitForIdle import com.android.testutils.waitForIdle
import java.net.NetworkInterface
import java.util.Objects import java.util.Objects
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
@@ -89,6 +91,7 @@ class MdnsAdvertiserTest {
private val handler by lazy { Handler(thread.looper) } private val handler by lazy { Handler(thread.looper) }
private val socketProvider = mock(MdnsSocketProvider::class.java) private val socketProvider = mock(MdnsSocketProvider::class.java)
private val cb = mock(AdvertiserCallback::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 mockSocket1 = mock(MdnsInterfaceSocket::class.java)
private val mockSocket2 = mock(MdnsInterfaceSocket::class.java) private val mockSocket2 = mock(MdnsInterfaceSocket::class.java)
@@ -101,13 +104,15 @@ class MdnsAdvertiserTest {
thread.start() thread.start()
doReturn(TEST_HOSTNAME).`when`(mockDeps).generateHostname() doReturn(TEST_HOSTNAME).`when`(mockDeps).generateHostname()
doReturn(mockInterfaceAdvertiser1).`when`(mockDeps).makeAdvertiser(eq(mockSocket1), 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), 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`(mockInterfaceAdvertiser1).isProbing(anyInt())
doReturn(true).`when`(mockInterfaceAdvertiser2).isProbing(anyInt()) doReturn(true).`when`(mockInterfaceAdvertiser2).isProbing(anyInt())
doReturn(createEmptyNetworkInterface()).`when`(mockSocket1).getInterface()
doReturn(createEmptyNetworkInterface()).`when`(mockSocket2).getInterface()
} }
@After @After
@@ -116,9 +121,15 @@ class MdnsAdvertiserTest {
thread.join() thread.join()
} }
private fun createEmptyNetworkInterface(): NetworkInterface {
val constructor = NetworkInterface::class.java.getDeclaredConstructor()
constructor.isAccessible = true
return constructor.newInstance()
}
@Test @Test
fun testAddService_OneNetwork() { 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) } postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) }
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java) val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
@@ -134,7 +145,8 @@ class MdnsAdvertiserTest {
eq(thread.looper), eq(thread.looper),
any(), any(),
intAdvCbCaptor.capture(), intAdvCbCaptor.capture(),
eq(TEST_HOSTNAME) eq(TEST_HOSTNAME),
any()
) )
doReturn(false).`when`(mockInterfaceAdvertiser1).isProbing(SERVICE_ID_1) doReturn(false).`when`(mockInterfaceAdvertiser1).isProbing(SERVICE_ID_1)
@@ -148,7 +160,7 @@ class MdnsAdvertiserTest {
@Test @Test
fun testAddService_AllNetworks() { 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) } postSync { advertiser.addService(SERVICE_ID_1, ALL_NETWORKS_SERVICE) }
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java) val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
@@ -162,10 +174,10 @@ class MdnsAdvertiserTest {
val intAdvCbCaptor1 = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java) val intAdvCbCaptor1 = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java)
val intAdvCbCaptor2 = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java) val intAdvCbCaptor2 = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java)
verify(mockDeps).makeAdvertiser(eq(mockSocket1), eq(listOf(TEST_LINKADDR)), 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)), 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) doReturn(false).`when`(mockInterfaceAdvertiser1).isProbing(SERVICE_ID_1)
@@ -194,7 +206,7 @@ class MdnsAdvertiserTest {
@Test @Test
fun testAddService_Conflicts() { 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) } postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) }
val oneNetSocketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java) val oneNetSocketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
@@ -233,7 +245,7 @@ class MdnsAdvertiserTest {
val intAdvCbCaptor = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java) val intAdvCbCaptor = ArgumentCaptor.forClass(MdnsInterfaceAdvertiser.Callback::class.java)
verify(mockDeps).makeAdvertiser(eq(mockSocket1), eq(listOf(TEST_LINKADDR)), 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), verify(mockInterfaceAdvertiser1).addService(eq(SERVICE_ID_1),
argThat { it.matches(SERVICE_1) }) argThat { it.matches(SERVICE_1) })
@@ -264,7 +276,7 @@ class MdnsAdvertiserTest {
@Test @Test
fun testRemoveService_whenAllServiceRemoved_thenUpdateHostName() { 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() verify(mockDeps, times(1)).generateHostname()
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) } postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1) }
postSync { advertiser.removeService(SERVICE_ID_1) } postSync { advertiser.removeService(SERVICE_ID_1) }

View File

@@ -29,6 +29,7 @@ import android.net.Network;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Pair; import android.util.Pair;
import com.android.net.module.util.SharedLog;
import com.android.server.connectivity.mdns.MdnsSocketClientBase.SocketCreationCallback; import com.android.server.connectivity.mdns.MdnsSocketClientBase.SocketCreationCallback;
import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule;
import com.android.testutils.DevSdkIgnoreRunner; import com.android.testutils.DevSdkIgnoreRunner;
@@ -74,13 +75,14 @@ public class MdnsDiscoveryManagerTests {
@Mock MdnsServiceBrowserListener mockListenerOne; @Mock MdnsServiceBrowserListener mockListenerOne;
@Mock MdnsServiceBrowserListener mockListenerTwo; @Mock MdnsServiceBrowserListener mockListenerTwo;
@Mock SharedLog sharedLog;
private MdnsDiscoveryManager discoveryManager; private MdnsDiscoveryManager discoveryManager;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
discoveryManager = new MdnsDiscoveryManager(executorProvider, socketClient) { discoveryManager = new MdnsDiscoveryManager(executorProvider, socketClient, sharedLog) {
@Override @Override
MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType, MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType,
@Nullable Network network) { @Nullable Network network) {

View File

@@ -76,7 +76,7 @@ class MdnsInterfaceAdvertiserTest {
private val replySender = mock(MdnsReplySender::class.java) private val replySender = mock(MdnsReplySender::class.java)
private val announcer = mock(MdnsAnnouncer::class.java) private val announcer = mock(MdnsAnnouncer::class.java)
private val prober = mock(MdnsProber::class.java) private val prober = mock(MdnsProber::class.java)
private val sharedlog = mock(SharedLog::class.java) private val sharedlog = SharedLog("MdnsInterfaceAdvertiserTest")
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
private val probeCbCaptor = ArgumentCaptor.forClass(PacketRepeaterCallback::class.java) private val probeCbCaptor = ArgumentCaptor.forClass(PacketRepeaterCallback::class.java)
as ArgumentCaptor<PacketRepeaterCallback<ProbingInfo>> as ArgumentCaptor<PacketRepeaterCallback<ProbingInfo>>
@@ -92,7 +92,6 @@ class MdnsInterfaceAdvertiserTest {
private val advertiser by lazy { private val advertiser by lazy {
MdnsInterfaceAdvertiser( MdnsInterfaceAdvertiser(
LOG_TAG,
socket, socket,
TEST_ADDRS, TEST_ADDRS,
thread.looper, thread.looper,
@@ -116,6 +115,7 @@ class MdnsInterfaceAdvertiserTest {
val knownServices = mutableSetOf<Int>() val knownServices = mutableSetOf<Int>()
doAnswer { inv -> doAnswer { inv ->
knownServices.add(inv.getArgument(0)) knownServices.add(inv.getArgument(0))
-1 -1
}.`when`(repository).addService(anyInt(), any()) }.`when`(repository).addService(anyInt(), any())
doAnswer { inv -> doAnswer { inv ->

View File

@@ -111,6 +111,7 @@ public class MdnsSocketProviderTest {
private MdnsSocketProvider mSocketProvider; private MdnsSocketProvider mSocketProvider;
private NetworkCallback mNetworkCallback; private NetworkCallback mNetworkCallback;
private TetheringEventCallback mTetheringEventCallback; private TetheringEventCallback mTetheringEventCallback;
private SharedLog mLog = new SharedLog("MdnsSocketProviderTest");
private TestNetlinkMonitor mTestSocketNetLinkMonitor; private TestNetlinkMonitor mTestSocketNetLinkMonitor;
@Before @Before
@@ -153,7 +154,7 @@ public class MdnsSocketProviderTest {
return mTestSocketNetLinkMonitor; return mTestSocketNetLinkMonitor;
}).when(mDeps).createSocketNetlinkMonitor(any(), any(), }).when(mDeps).createSocketNetlinkMonitor(any(), any(),
any()); any());
mSocketProvider = new MdnsSocketProvider(mContext, thread.getLooper(), mDeps); mSocketProvider = new MdnsSocketProvider(mContext, thread.getLooper(), mDeps, mLog);
} }
private void startMonitoringSockets() { private void startMonitoringSockets() {