Merge "Add Chicken bit for the mDNS offload feature" into main
This commit is contained in:
@@ -26,7 +26,6 @@ import static android.net.nsd.NsdManager.MDNS_DISCOVERY_MANAGER_EVENT;
|
|||||||
import static android.net.nsd.NsdManager.MDNS_SERVICE_EVENT;
|
import static android.net.nsd.NsdManager.MDNS_SERVICE_EVENT;
|
||||||
import static android.net.nsd.NsdManager.RESOLVE_SERVICE_SUCCEEDED;
|
import static android.net.nsd.NsdManager.RESOLVE_SERVICE_SUCCEEDED;
|
||||||
import static android.provider.DeviceConfig.NAMESPACE_TETHERING;
|
import static android.provider.DeviceConfig.NAMESPACE_TETHERING;
|
||||||
|
|
||||||
import static com.android.modules.utils.build.SdkLevel.isAtLeastU;
|
import static com.android.modules.utils.build.SdkLevel.isAtLeastU;
|
||||||
import static com.android.networkstack.apishim.ConstantsShim.REGISTER_NSD_OFFLOAD_ENGINE;
|
import static com.android.networkstack.apishim.ConstantsShim.REGISTER_NSD_OFFLOAD_ENGINE;
|
||||||
import static com.android.server.connectivity.mdns.MdnsAdvertiser.AdvertiserMetrics;
|
import static com.android.server.connectivity.mdns.MdnsAdvertiser.AdvertiserMetrics;
|
||||||
@@ -89,6 +88,7 @@ import com.android.net.module.util.SharedLog;
|
|||||||
import com.android.server.connectivity.mdns.ExecutorProvider;
|
import com.android.server.connectivity.mdns.ExecutorProvider;
|
||||||
import com.android.server.connectivity.mdns.MdnsAdvertiser;
|
import com.android.server.connectivity.mdns.MdnsAdvertiser;
|
||||||
import com.android.server.connectivity.mdns.MdnsDiscoveryManager;
|
import com.android.server.connectivity.mdns.MdnsDiscoveryManager;
|
||||||
|
import com.android.server.connectivity.mdns.MdnsFeatureFlags;
|
||||||
import com.android.server.connectivity.mdns.MdnsInterfaceSocket;
|
import com.android.server.connectivity.mdns.MdnsInterfaceSocket;
|
||||||
import com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient;
|
import com.android.server.connectivity.mdns.MdnsMultinetworkSocketClient;
|
||||||
import com.android.server.connectivity.mdns.MdnsSearchOptions;
|
import com.android.server.connectivity.mdns.MdnsSearchOptions;
|
||||||
@@ -1695,8 +1695,11 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
mMdnsDiscoveryManager = deps.makeMdnsDiscoveryManager(new ExecutorProvider(),
|
mMdnsDiscoveryManager = deps.makeMdnsDiscoveryManager(new ExecutorProvider(),
|
||||||
mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager"));
|
mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager"));
|
||||||
handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager));
|
handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager));
|
||||||
|
MdnsFeatureFlags flags = new MdnsFeatureFlags.Builder().setIsMdnsOffloadFeatureEnabled(
|
||||||
|
mDeps.isTetheringFeatureNotChickenedOut(
|
||||||
|
MdnsFeatureFlags.NSD_FORCE_DISABLE_MDNS_OFFLOAD)).build();
|
||||||
mAdvertiser = deps.makeMdnsAdvertiser(handler.getLooper(), mMdnsSocketProvider,
|
mAdvertiser = deps.makeMdnsAdvertiser(handler.getLooper(), mMdnsSocketProvider,
|
||||||
new AdvertiserCallback(), LOGGER.forSubComponent("MdnsAdvertiser"));
|
new AdvertiserCallback(), LOGGER.forSubComponent("MdnsAdvertiser"), flags);
|
||||||
mClock = deps.makeClock();
|
mClock = deps.makeClock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1744,6 +1747,13 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
return DeviceConfigUtils.isTetheringFeatureEnabled(context, feature);
|
return DeviceConfigUtils.isTetheringFeatureEnabled(context, feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DeviceConfigUtils#isTetheringFeatureNotChickenedOut
|
||||||
|
*/
|
||||||
|
public boolean isTetheringFeatureNotChickenedOut(String feature) {
|
||||||
|
return DeviceConfigUtils.isTetheringFeatureNotChickenedOut(feature);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MdnsDiscoveryManager
|
* @see MdnsDiscoveryManager
|
||||||
*/
|
*/
|
||||||
@@ -1758,8 +1768,9 @@ 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 SharedLog sharedLog) {
|
@NonNull MdnsAdvertiser.AdvertiserCallback cb, @NonNull SharedLog sharedLog,
|
||||||
return new MdnsAdvertiser(looper, socketProvider, cb, sharedLog);
|
MdnsFeatureFlags featureFlags) {
|
||||||
|
return new MdnsAdvertiser(looper, socketProvider, cb, sharedLog, featureFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ public class MdnsAdvertiser {
|
|||||||
@NonNull private final SharedLog mSharedLog;
|
@NonNull private final SharedLog mSharedLog;
|
||||||
private final Map<String, List<OffloadServiceInfoWrapper>> mInterfaceOffloadServices =
|
private final Map<String, List<OffloadServiceInfoWrapper>> mInterfaceOffloadServices =
|
||||||
new ArrayMap<>();
|
new ArrayMap<>();
|
||||||
|
private final MdnsFeatureFlags mMdnsFeatureFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dependencies for {@link MdnsAdvertiser}, useful for testing.
|
* Dependencies for {@link MdnsAdvertiser}, useful for testing.
|
||||||
@@ -140,22 +141,21 @@ public class MdnsAdvertiser {
|
|||||||
mSharedLog.wtf("Register succeeded for unknown registration");
|
mSharedLog.wtf("Register succeeded for unknown registration");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (mMdnsFeatureFlags.mIsMdnsOffloadFeatureEnabled) {
|
||||||
|
final String interfaceName = advertiser.getSocketInterfaceName();
|
||||||
|
final List<OffloadServiceInfoWrapper> existingOffloadServiceInfoWrappers =
|
||||||
|
mInterfaceOffloadServices.computeIfAbsent(interfaceName,
|
||||||
|
k -> new ArrayList<>());
|
||||||
|
// Remove existing offload services from cache for update.
|
||||||
|
existingOffloadServiceInfoWrappers.removeIf(item -> item.mServiceId == serviceId);
|
||||||
|
|
||||||
final String interfaceName = advertiser.getSocketInterfaceName();
|
byte[] rawOffloadPacket = advertiser.getRawOffloadPayload(serviceId);
|
||||||
final List<OffloadServiceInfoWrapper> existingOffloadServiceInfoWrappers =
|
final OffloadServiceInfoWrapper newOffloadServiceInfoWrapper = createOffloadService(
|
||||||
mInterfaceOffloadServices.computeIfAbsent(
|
serviceId, registration, rawOffloadPacket);
|
||||||
interfaceName, k -> new ArrayList<>());
|
existingOffloadServiceInfoWrappers.add(newOffloadServiceInfoWrapper);
|
||||||
// Remove existing offload services from cache for update.
|
mCb.onOffloadStartOrUpdate(interfaceName,
|
||||||
existingOffloadServiceInfoWrappers.removeIf(item -> item.mServiceId == serviceId);
|
newOffloadServiceInfoWrapper.mOffloadServiceInfo);
|
||||||
|
}
|
||||||
byte[] rawOffloadPacket = advertiser.getRawOffloadPayload(serviceId);
|
|
||||||
final OffloadServiceInfoWrapper newOffloadServiceInfoWrapper = createOffloadService(
|
|
||||||
serviceId,
|
|
||||||
registration,
|
|
||||||
rawOffloadPacket);
|
|
||||||
existingOffloadServiceInfoWrappers.add(newOffloadServiceInfoWrapper);
|
|
||||||
mCb.onOffloadStartOrUpdate(interfaceName,
|
|
||||||
newOffloadServiceInfoWrapper.mOffloadServiceInfo);
|
|
||||||
|
|
||||||
// Wait for all current interfaces to be done probing before notifying of success.
|
// Wait for all current interfaces to be done probing before notifying of success.
|
||||||
if (any(mAllAdvertisers, (k, a) -> a.isProbing(serviceId))) return;
|
if (any(mAllAdvertisers, (k, a) -> a.isProbing(serviceId))) return;
|
||||||
@@ -188,7 +188,9 @@ public class MdnsAdvertiser {
|
|||||||
if (!a.maybeRestartProbingForConflict(serviceId)) {
|
if (!a.maybeRestartProbingForConflict(serviceId)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
maybeSendOffloadStop(a.getSocketInterfaceName(), serviceId);
|
if (mMdnsFeatureFlags.mIsMdnsOffloadFeatureEnabled) {
|
||||||
|
maybeSendOffloadStop(a.getSocketInterfaceName(), serviceId);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -280,12 +282,12 @@ public class MdnsAdvertiser {
|
|||||||
*/
|
*/
|
||||||
boolean onAdvertiserDestroyed(@NonNull MdnsInterfaceSocket socket) {
|
boolean onAdvertiserDestroyed(@NonNull MdnsInterfaceSocket socket) {
|
||||||
final MdnsInterfaceAdvertiser removedAdvertiser = mAdvertisers.remove(socket);
|
final MdnsInterfaceAdvertiser removedAdvertiser = mAdvertisers.remove(socket);
|
||||||
if (removedAdvertiser != null) {
|
if (mMdnsFeatureFlags.mIsMdnsOffloadFeatureEnabled && removedAdvertiser != null) {
|
||||||
final String interfaceName = removedAdvertiser.getSocketInterfaceName();
|
final String interfaceName = removedAdvertiser.getSocketInterfaceName();
|
||||||
// If the interface is destroyed, stop all hardware offloading on that interface.
|
// If the interface is destroyed, stop all hardware offloading on that
|
||||||
|
// interface.
|
||||||
final List<OffloadServiceInfoWrapper> offloadServiceInfoWrappers =
|
final List<OffloadServiceInfoWrapper> offloadServiceInfoWrappers =
|
||||||
mInterfaceOffloadServices.remove(
|
mInterfaceOffloadServices.remove(interfaceName);
|
||||||
interfaceName);
|
|
||||||
if (offloadServiceInfoWrappers != null) {
|
if (offloadServiceInfoWrappers != null) {
|
||||||
for (OffloadServiceInfoWrapper offloadServiceInfoWrapper :
|
for (OffloadServiceInfoWrapper offloadServiceInfoWrapper :
|
||||||
offloadServiceInfoWrappers) {
|
offloadServiceInfoWrappers) {
|
||||||
@@ -359,7 +361,9 @@ public class MdnsAdvertiser {
|
|||||||
final MdnsInterfaceAdvertiser advertiser = mAdvertisers.valueAt(i);
|
final MdnsInterfaceAdvertiser advertiser = mAdvertisers.valueAt(i);
|
||||||
advertiser.removeService(id);
|
advertiser.removeService(id);
|
||||||
|
|
||||||
maybeSendOffloadStop(advertiser.getSocketInterfaceName(), id);
|
if (mMdnsFeatureFlags.mIsMdnsOffloadFeatureEnabled) {
|
||||||
|
maybeSendOffloadStop(advertiser.getSocketInterfaceName(), id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -419,25 +423,28 @@ public class MdnsAdvertiser {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
advertiser.updateAddresses(addresses);
|
advertiser.updateAddresses(addresses);
|
||||||
// Update address should trigger offload packet update.
|
|
||||||
final String interfaceName = advertiser.getSocketInterfaceName();
|
if (mMdnsFeatureFlags.mIsMdnsOffloadFeatureEnabled) {
|
||||||
final List<OffloadServiceInfoWrapper> existingOffloadServiceInfoWrappers =
|
// Update address should trigger offload packet update.
|
||||||
mInterfaceOffloadServices.get(interfaceName);
|
final String interfaceName = advertiser.getSocketInterfaceName();
|
||||||
if (existingOffloadServiceInfoWrappers == null) {
|
final List<OffloadServiceInfoWrapper> existingOffloadServiceInfoWrappers =
|
||||||
return;
|
mInterfaceOffloadServices.get(interfaceName);
|
||||||
|
if (existingOffloadServiceInfoWrappers == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final List<OffloadServiceInfoWrapper> updatedOffloadServiceInfoWrappers =
|
||||||
|
new ArrayList<>(existingOffloadServiceInfoWrappers.size());
|
||||||
|
for (OffloadServiceInfoWrapper oldWrapper : existingOffloadServiceInfoWrappers) {
|
||||||
|
OffloadServiceInfoWrapper newWrapper = new OffloadServiceInfoWrapper(
|
||||||
|
oldWrapper.mServiceId,
|
||||||
|
oldWrapper.mOffloadServiceInfo.withOffloadPayload(
|
||||||
|
advertiser.getRawOffloadPayload(oldWrapper.mServiceId))
|
||||||
|
);
|
||||||
|
updatedOffloadServiceInfoWrappers.add(newWrapper);
|
||||||
|
mCb.onOffloadStartOrUpdate(interfaceName, newWrapper.mOffloadServiceInfo);
|
||||||
|
}
|
||||||
|
mInterfaceOffloadServices.put(interfaceName, updatedOffloadServiceInfoWrappers);
|
||||||
}
|
}
|
||||||
final List<OffloadServiceInfoWrapper> updatedOffloadServiceInfoWrappers =
|
|
||||||
new ArrayList<>(existingOffloadServiceInfoWrappers.size());
|
|
||||||
for (OffloadServiceInfoWrapper oldWrapper : existingOffloadServiceInfoWrappers) {
|
|
||||||
OffloadServiceInfoWrapper newWrapper = new OffloadServiceInfoWrapper(
|
|
||||||
oldWrapper.mServiceId,
|
|
||||||
oldWrapper.mOffloadServiceInfo.withOffloadPayload(
|
|
||||||
advertiser.getRawOffloadPayload(oldWrapper.mServiceId))
|
|
||||||
);
|
|
||||||
updatedOffloadServiceInfoWrappers.add(newWrapper);
|
|
||||||
mCb.onOffloadStartOrUpdate(interfaceName, newWrapper.mOffloadServiceInfo);
|
|
||||||
}
|
|
||||||
mInterfaceOffloadServices.put(interfaceName, updatedOffloadServiceInfoWrappers);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -595,20 +602,22 @@ public class MdnsAdvertiser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider,
|
public MdnsAdvertiser(@NonNull Looper looper, @NonNull MdnsSocketProvider socketProvider,
|
||||||
@NonNull AdvertiserCallback cb, @NonNull SharedLog sharedLog) {
|
@NonNull AdvertiserCallback cb, @NonNull SharedLog sharedLog,
|
||||||
this(looper, socketProvider, cb, new Dependencies(), sharedLog);
|
@NonNull MdnsFeatureFlags mDnsFeatureFlags) {
|
||||||
|
this(looper, socketProvider, cb, new Dependencies(), sharedLog, mDnsFeatureFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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) {
|
@NonNull SharedLog sharedLog, @NonNull MdnsFeatureFlags mDnsFeatureFlags) {
|
||||||
mLooper = looper;
|
mLooper = looper;
|
||||||
mCb = cb;
|
mCb = cb;
|
||||||
mSocketProvider = socketProvider;
|
mSocketProvider = socketProvider;
|
||||||
mDeps = deps;
|
mDeps = deps;
|
||||||
mDeviceHostName = deps.generateHostname();
|
mDeviceHostName = deps.generateHostname();
|
||||||
mSharedLog = sharedLog;
|
mSharedLog = sharedLog;
|
||||||
|
mMdnsFeatureFlags = mDnsFeatureFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkThread() {
|
private void checkThread() {
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.android.server.connectivity.mdns;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class that contains mDNS feature flags;
|
||||||
|
*/
|
||||||
|
public class MdnsFeatureFlags {
|
||||||
|
/**
|
||||||
|
* The feature flag for control whether the mDNS offload is enabled or not.
|
||||||
|
*/
|
||||||
|
public static final String NSD_FORCE_DISABLE_MDNS_OFFLOAD = "nsd_force_disable_mdns_offload";
|
||||||
|
|
||||||
|
// Flag for offload feature
|
||||||
|
public final boolean mIsMdnsOffloadFeatureEnabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The constructor for {@link MdnsFeatureFlags}.
|
||||||
|
*/
|
||||||
|
public MdnsFeatureFlags(boolean isOffloadFeatureEnabled) {
|
||||||
|
mIsMdnsOffloadFeatureEnabled = isOffloadFeatureEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Returns a {@link Builder} for {@link MdnsFeatureFlags}. */
|
||||||
|
public static Builder newBuilder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** A builder to create {@link MdnsFeatureFlags}. */
|
||||||
|
public static final class Builder {
|
||||||
|
|
||||||
|
private boolean mIsMdnsOffloadFeatureEnabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The constructor for {@link Builder}.
|
||||||
|
*/
|
||||||
|
public Builder() {
|
||||||
|
mIsMdnsOffloadFeatureEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set if the mDNS offload feature is enabled.
|
||||||
|
*/
|
||||||
|
public Builder setIsMdnsOffloadFeatureEnabled(boolean isMdnsOffloadFeatureEnabled) {
|
||||||
|
mIsMdnsOffloadFeatureEnabled = isMdnsOffloadFeatureEnabled;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a {@link MdnsFeatureFlags} with the arguments supplied to this builder.
|
||||||
|
*/
|
||||||
|
public MdnsFeatureFlags build() {
|
||||||
|
return new MdnsFeatureFlags(mIsMdnsOffloadFeatureEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -35,17 +35,14 @@ import static android.net.connectivity.ConnectivityCompatChanges.RUN_NATIVE_NSD_
|
|||||||
import static android.net.nsd.NsdManager.FAILURE_BAD_PARAMETERS;
|
import static android.net.nsd.NsdManager.FAILURE_BAD_PARAMETERS;
|
||||||
import static android.net.nsd.NsdManager.FAILURE_INTERNAL_ERROR;
|
import static android.net.nsd.NsdManager.FAILURE_INTERNAL_ERROR;
|
||||||
import static android.net.nsd.NsdManager.FAILURE_OPERATION_NOT_RUNNING;
|
import static android.net.nsd.NsdManager.FAILURE_OPERATION_NOT_RUNNING;
|
||||||
|
|
||||||
import static com.android.networkstack.apishim.api33.ConstantsShim.REGISTER_NSD_OFFLOAD_ENGINE;
|
import static com.android.networkstack.apishim.api33.ConstantsShim.REGISTER_NSD_OFFLOAD_ENGINE;
|
||||||
import static com.android.server.NsdService.DEFAULT_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF;
|
import static com.android.server.NsdService.DEFAULT_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF;
|
||||||
import static com.android.server.NsdService.MdnsListener;
|
import static com.android.server.NsdService.MdnsListener;
|
||||||
import static com.android.server.NsdService.NO_TRANSACTION;
|
import static com.android.server.NsdService.NO_TRANSACTION;
|
||||||
import static com.android.server.NsdService.parseTypeAndSubtype;
|
import static com.android.server.NsdService.parseTypeAndSubtype;
|
||||||
import static com.android.testutils.ContextUtils.mockService;
|
import static com.android.testutils.ContextUtils.mockService;
|
||||||
|
|
||||||
import static libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
|
import static libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
|
||||||
import static libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
|
import static libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
|
||||||
|
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
@@ -229,7 +226,7 @@ public class NsdServiceTest {
|
|||||||
doReturn(mSocketProvider).when(mDeps).makeMdnsSocketProvider(any(), any(), any(), any());
|
doReturn(mSocketProvider).when(mDeps).makeMdnsSocketProvider(any(), any(), any(), any());
|
||||||
doReturn(DEFAULT_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF).when(mDeps).getDeviceConfigInt(
|
doReturn(DEFAULT_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF).when(mDeps).getDeviceConfigInt(
|
||||||
eq(NsdService.MDNS_CONFIG_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF), anyInt());
|
eq(NsdService.MDNS_CONFIG_RUNNING_APP_ACTIVE_IMPORTANCE_CUTOFF), anyInt());
|
||||||
doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any(), any());
|
doReturn(mAdvertiser).when(mDeps).makeMdnsAdvertiser(any(), any(), any(), any(), any());
|
||||||
doReturn(mMetrics).when(mDeps).makeNetworkNsdReportedMetrics(anyBoolean(), anyInt());
|
doReturn(mMetrics).when(mDeps).makeNetworkNsdReportedMetrics(anyBoolean(), anyInt());
|
||||||
doReturn(mClock).when(mDeps).makeClock();
|
doReturn(mClock).when(mDeps).makeClock();
|
||||||
doReturn(TEST_TIME_MS).when(mClock).elapsedRealtime();
|
doReturn(TEST_TIME_MS).when(mClock).elapsedRealtime();
|
||||||
@@ -1289,7 +1286,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(), any());
|
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture(), any(), 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"));
|
||||||
@@ -1339,7 +1336,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(), any());
|
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture(), any(), 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"));
|
||||||
@@ -1365,7 +1362,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(), any());
|
verify(mDeps).makeMdnsAdvertiser(any(), any(), cbCaptor.capture(), any(), 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"));
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ class MdnsAdvertiserTest {
|
|||||||
private val mockInterfaceAdvertiser1 = mock(MdnsInterfaceAdvertiser::class.java)
|
private val mockInterfaceAdvertiser1 = mock(MdnsInterfaceAdvertiser::class.java)
|
||||||
private val mockInterfaceAdvertiser2 = mock(MdnsInterfaceAdvertiser::class.java)
|
private val mockInterfaceAdvertiser2 = mock(MdnsInterfaceAdvertiser::class.java)
|
||||||
private val mockDeps = mock(MdnsAdvertiser.Dependencies::class.java)
|
private val mockDeps = mock(MdnsAdvertiser.Dependencies::class.java)
|
||||||
|
private val flags = MdnsFeatureFlags.newBuilder().setIsMdnsOffloadFeatureEnabled(true).build()
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
@@ -183,7 +184,8 @@ class MdnsAdvertiserTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testAddService_OneNetwork() {
|
fun testAddService_OneNetwork() {
|
||||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
val advertiser =
|
||||||
|
MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog, flags)
|
||||||
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1, null /* subtype */) }
|
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1, null /* subtype */) }
|
||||||
|
|
||||||
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
||||||
@@ -242,7 +244,8 @@ class MdnsAdvertiserTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testAddService_AllNetworks() {
|
fun testAddService_AllNetworks() {
|
||||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
val advertiser =
|
||||||
|
MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog, flags)
|
||||||
postSync { advertiser.addService(SERVICE_ID_1, ALL_NETWORKS_SERVICE, TEST_SUBTYPE) }
|
postSync { advertiser.addService(SERVICE_ID_1, ALL_NETWORKS_SERVICE, TEST_SUBTYPE) }
|
||||||
|
|
||||||
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
val socketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
||||||
@@ -312,7 +315,8 @@ class MdnsAdvertiserTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testAddService_Conflicts() {
|
fun testAddService_Conflicts() {
|
||||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
val advertiser =
|
||||||
|
MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog, flags)
|
||||||
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1, null /* subtype */) }
|
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1, null /* subtype */) }
|
||||||
|
|
||||||
val oneNetSocketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
val oneNetSocketCbCaptor = ArgumentCaptor.forClass(SocketCallback::class.java)
|
||||||
@@ -396,7 +400,8 @@ class MdnsAdvertiserTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testRemoveService_whenAllServiceRemoved_thenUpdateHostName() {
|
fun testRemoveService_whenAllServiceRemoved_thenUpdateHostName() {
|
||||||
val advertiser = MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog)
|
val advertiser =
|
||||||
|
MdnsAdvertiser(thread.looper, socketProvider, cb, mockDeps, sharedlog, flags)
|
||||||
verify(mockDeps, times(1)).generateHostname()
|
verify(mockDeps, times(1)).generateHostname()
|
||||||
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1, null /* subtype */) }
|
postSync { advertiser.addService(SERVICE_ID_1, SERVICE_1, null /* subtype */) }
|
||||||
postSync { advertiser.removeService(SERVICE_ID_1) }
|
postSync { advertiser.removeService(SERVICE_ID_1) }
|
||||||
|
|||||||
Reference in New Issue
Block a user