Merge "Revert "Add DhcpLeaseCallbacks""
diff --git a/common/networkstackclient/Android.bp b/common/networkstackclient/Android.bp
index a34a637..dbe8ff0 100644
--- a/common/networkstackclient/Android.bp
+++ b/common/networkstackclient/Android.bp
@@ -61,9 +61,7 @@
"src/android/net/ProvisioningConfigurationParcelable.aidl",
"src/android/net/ScanResultInfoParcelable.aidl",
"src/android/net/TcpKeepalivePacketDataParcelable.aidl",
- "src/android/net/dhcp/DhcpLeaseParcelable.aidl",
"src/android/net/dhcp/DhcpServingParamsParcel.aidl",
- "src/android/net/dhcp/IDhcpLeaseCallbacks.aidl",
"src/android/net/dhcp/IDhcpServer.aidl",
"src/android/net/dhcp/IDhcpServerCallbacks.aidl",
"src/android/net/ip/IIpClient.aidl",
diff --git a/common/networkstackclient/src/android/net/dhcp/DhcpLeaseParcelable.aidl b/common/networkstackclient/src/android/net/dhcp/DhcpLeaseParcelable.aidl
deleted file mode 100644
index ba3390d..0000000
--- a/common/networkstackclient/src/android/net/dhcp/DhcpLeaseParcelable.aidl
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (c) 2020, 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 perNmissions and
- * limitations under the License.
- */
-
-package android.net.dhcp;
-
-parcelable DhcpLeaseParcelable {
- // Client ID of the lease; may be null.
- byte[] clientId;
- // MAC address provided by the client.
- byte[] hwAddr;
- // IPv4 address of the lease, in network byte order.
- int netAddr;
- // Prefix length of the lease (0-32)
- int prefixLength;
- // Expiration time of the lease, to compare with SystemClock.elapsedRealtime().
- long expTime;
- // Hostname provided by the client, if any, or null.
- String hostname;
-}
\ No newline at end of file
diff --git a/common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl b/common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl
deleted file mode 100644
index cf2dfa8..0000000
--- a/common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2020, 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 perNmissions and
- * limitations under the License.
- */
-
-package android.net.dhcp;
-
-import android.net.dhcp.DhcpLeaseParcelable;
-
-oneway interface IDhcpLeaseCallbacks {
- /**
- * Called when a lease is committed or released on the DHCP server.
- *
- * <p>This only reports lease changes after assigning a lease, or after releasing a lease
- * following a DHCPRELEASE: this callback will not be fired when a lease just expires.
- * @param newLeases The new list of leases tracked by the server.
- */
- void onLeasesChanged(in List<DhcpLeaseParcelable> newLeases);
-}
\ No newline at end of file
diff --git a/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl b/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
index dd93174..559433b 100644
--- a/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
+++ b/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
@@ -18,7 +18,6 @@
import android.net.INetworkStackStatusCallback;
import android.net.dhcp.DhcpServingParamsParcel;
-import android.net.dhcp.IDhcpLeaseCallbacks;
/** @hide */
oneway interface IDhcpServer {
@@ -27,11 +26,7 @@
const int STATUS_INVALID_ARGUMENT = 2;
const int STATUS_UNKNOWN_ERROR = 3;
- void start(in INetworkStackStatusCallback cb) = 0;
- void startWithCallbacks(in INetworkStackStatusCallback statusCb,
- in IDhcpLeaseCallbacks leaseCb) = 3;
- void updateParams(in DhcpServingParamsParcel params, in INetworkStackStatusCallback cb) = 1;
- void stop(in INetworkStackStatusCallback cb) = 2;
-
- // Next available ID: 4
+ void start(in INetworkStackStatusCallback cb);
+ void updateParams(in DhcpServingParamsParcel params, in INetworkStackStatusCallback cb);
+ void stop(in INetworkStackStatusCallback cb);
}
diff --git a/src/android/net/dhcp/DhcpLease.java b/src/android/net/dhcp/DhcpLease.java
index 3226f28..37d9cc0 100644
--- a/src/android/net/dhcp/DhcpLease.java
+++ b/src/android/net/dhcp/DhcpLease.java
@@ -16,8 +16,6 @@
package android.net.dhcp;
-import static android.net.shared.Inet4AddressUtils.inet4AddressToIntHTH;
-
import android.net.MacAddress;
import android.os.SystemClock;
import android.text.TextUtils;
@@ -45,7 +43,6 @@
private final MacAddress mHwAddr;
@NonNull
private final Inet4Address mNetAddr;
- private final int mPrefixLength;
/**
* Expiration time for the lease, to compare with {@link SystemClock#elapsedRealtime()}.
*/
@@ -54,12 +51,10 @@
private final String mHostname;
public DhcpLease(@Nullable byte[] clientId, @NonNull MacAddress hwAddr,
- @NonNull Inet4Address netAddr, int prefixLength, long expTime,
- @Nullable String hostname) {
+ @NonNull Inet4Address netAddr, long expTime, @Nullable String hostname) {
mClientId = (clientId == null ? null : Arrays.copyOf(clientId, clientId.length));
mHwAddr = hwAddr;
mNetAddr = netAddr;
- mPrefixLength = prefixLength;
mExpTime = expTime;
mHostname = hostname;
}
@@ -92,10 +87,6 @@
return mNetAddr;
}
- public int getPrefixLength() {
- return mPrefixLength;
- }
-
public long getExpTime() {
return mExpTime;
}
@@ -108,8 +99,7 @@
* @return A {@link DhcpLease} with expiration time set to max(expTime, currentExpTime)
*/
public DhcpLease renewedLease(long expTime, @Nullable String hostname) {
- return new DhcpLease(mClientId, mHwAddr, mNetAddr, mPrefixLength,
- Math.max(expTime, mExpTime),
+ return new DhcpLease(mClientId, mHwAddr, mNetAddr, Math.max(expTime, mExpTime),
(hostname == null ? mHostname : hostname));
}
@@ -135,14 +125,13 @@
return Arrays.equals(mClientId, other.mClientId)
&& mHwAddr.equals(other.mHwAddr)
&& mNetAddr.equals(other.mNetAddr)
- && mPrefixLength == other.mPrefixLength
&& mExpTime == other.mExpTime
&& TextUtils.equals(mHostname, other.mHostname);
}
@Override
public int hashCode() {
- return Objects.hash(mClientId, mHwAddr, mNetAddr, mPrefixLength, mHostname, mExpTime);
+ return Objects.hash(mClientId, mHwAddr, mNetAddr, mHostname, mExpTime);
}
static String clientIdToString(byte[] bytes) {
@@ -158,24 +147,8 @@
@Override
public String toString() {
- return String.format("clientId: %s, hwAddr: %s, netAddr: %s/%d, expTime: %d,"
- + "hostname: %s",
+ return String.format("clientId: %s, hwAddr: %s, netAddr: %s, expTime: %d, hostname: %s",
clientIdToString(mClientId), mHwAddr.toString(), inet4AddrToString(mNetAddr),
- mPrefixLength, mExpTime, mHostname);
- }
-
- /**
- * Create a {@link DhcpLeaseParcelable} containing the information held in this lease.
- */
- public DhcpLeaseParcelable toParcelable() {
- final DhcpLeaseParcelable p = new DhcpLeaseParcelable();
- p.clientId = mClientId == null ? null : Arrays.copyOf(mClientId, mClientId.length);
- p.hwAddr = mHwAddr.toByteArray();
- p.netAddr = inet4AddressToIntHTH(mNetAddr);
- p.prefixLength = mPrefixLength;
- p.expTime = mExpTime;
- p.hostname = mHostname;
-
- return p;
+ mExpTime, mHostname);
}
}
diff --git a/src/android/net/dhcp/DhcpLeaseRepository.java b/src/android/net/dhcp/DhcpLeaseRepository.java
index 1dc2f7f..4e74dc8 100644
--- a/src/android/net/dhcp/DhcpLeaseRepository.java
+++ b/src/android/net/dhcp/DhcpLeaseRepository.java
@@ -31,8 +31,6 @@
import android.net.MacAddress;
import android.net.dhcp.DhcpServer.Clock;
import android.net.util.SharedLog;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
import android.util.ArrayMap;
import androidx.annotation.NonNull;
@@ -47,7 +45,6 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
@@ -76,7 +73,6 @@
@NonNull
private Set<Inet4Address> mReservedAddrs;
private int mSubnetAddr;
- private int mPrefixLength;
private int mSubnetMask;
private int mNumAddresses;
private long mLeaseTimeMs;
@@ -88,9 +84,6 @@
*/
private long mNextExpirationCheck = EXPIRATION_NEVER;
- @NonNull
- private RemoteCallbackList<IDhcpLeaseCallbacks> mLeaseCallbacks = new RemoteCallbackList<>();
-
static class DhcpLeaseException extends Exception {
DhcpLeaseException(String message) {
super(message);
@@ -138,34 +131,27 @@
long leaseTimeMs) {
mPrefix = prefix;
mReservedAddrs = Collections.unmodifiableSet(new HashSet<>(reservedAddrs));
- mPrefixLength = prefix.getPrefixLength();
- mSubnetMask = prefixLengthToV4NetmaskIntHTH(mPrefixLength);
+ mSubnetMask = prefixLengthToV4NetmaskIntHTH(prefix.getPrefixLength());
mSubnetAddr = inet4AddressToIntHTH((Inet4Address) prefix.getAddress()) & mSubnetMask;
mNumAddresses = 1 << (IPV4_ADDR_BITS - prefix.getPrefixLength());
mLeaseTimeMs = leaseTimeMs;
+ cleanMap(mCommittedLeases);
cleanMap(mDeclinedAddrs);
- if (cleanMap(mCommittedLeases)) {
- notifyLeasesChanged();
- }
}
/**
* From a map keyed by {@link Inet4Address}, remove entries where the key is invalid (as
* specified by {@link #isValidAddress(Inet4Address)}), or is a reserved address.
- * @return true iff at least one entry was removed.
*/
- private <T> boolean cleanMap(Map<Inet4Address, T> map) {
+ private <T> void cleanMap(Map<Inet4Address, T> map) {
final Iterator<Entry<Inet4Address, T>> it = map.entrySet().iterator();
- boolean removed = false;
while (it.hasNext()) {
final Inet4Address addr = it.next().getKey();
if (!isValidAddress(addr) || mReservedAddrs.contains(addr)) {
it.remove();
- removed = true;
}
}
- return removed;
}
/**
@@ -195,7 +181,7 @@
mLog.log("Offering extended lease " + newLease);
// Do not update lease time in the map: the offer is not committed yet.
} else if (reqAddr != null && isValidAddress(reqAddr) && isAvailable(reqAddr)) {
- newLease = new DhcpLease(clientId, hwAddr, reqAddr, mPrefixLength, expTime, hostname);
+ newLease = new DhcpLease(clientId, hwAddr, reqAddr, expTime, hostname);
mLog.log("Offering requested lease " + newLease);
} else {
newLease = makeNewOffer(clientId, hwAddr, expTime, hostname);
@@ -281,8 +267,7 @@
if (assignedLease != null) {
if (sidSet && reqAddr != null) {
// Client in SELECTING state; remove any current lease before creating a new one.
- // Do not notify of change as it will be done when the new lease is committed.
- removeLease(assignedLease.getNetAddr(), false /* notifyChange */);
+ mCommittedLeases.remove(assignedLease.getNetAddr());
} else if (!assignedLease.getNetAddr().equals(leaseAddr)) {
// reqAddr null (RENEWING/REBINDING): client renewing its own lease for clientAddr.
// reqAddr set with sid not set (INIT-REBOOT): client verifying configuration.
@@ -329,7 +314,7 @@
final DhcpLease lease;
if (currentLease == null) {
if (isValidAddress(addr) && !mReservedAddrs.contains(addr)) {
- lease = new DhcpLease(clientId, hwAddr, addr, mPrefixLength, expTime, hostname);
+ lease = new DhcpLease(clientId, hwAddr, addr, expTime, hostname);
} else {
throw new InvalidAddressException("Lease not found and address unavailable");
}
@@ -343,13 +328,6 @@
private void commitLease(@NonNull DhcpLease lease) {
mCommittedLeases.put(lease.getNetAddr(), lease);
maybeUpdateEarliestExpiration(lease.getExpTime());
- notifyLeasesChanged();
- }
-
- private void removeLease(@NonNull Inet4Address address, boolean notifyChange) {
- // Earliest expiration remains <= the first expiry time on remove, so no need to update it.
- mCommittedLeases.remove(address);
- if (notifyChange) notifyLeasesChanged();
}
/**
@@ -365,8 +343,8 @@
return false;
}
if (currentLease.matchesClient(clientId, hwAddr)) {
+ mCommittedLeases.remove(addr);
mLog.log("Released lease " + currentLease);
- removeLease(addr, true /* notifyChange */);
return true;
}
mLog.w(String.format("Not releasing lease %s: does not match client (cid %s, hwAddr %s)",
@@ -374,24 +352,6 @@
return false;
}
- private void notifyLeasesChanged() {
- final List<DhcpLeaseParcelable> leaseParcelables =
- new ArrayList<>(mCommittedLeases.size());
- for (DhcpLease committedLease : mCommittedLeases.values()) {
- leaseParcelables.add(committedLease.toParcelable());
- }
-
- final int cbCount = mLeaseCallbacks.beginBroadcast();
- for (int i = 0; i < cbCount; i++) {
- try {
- mLeaseCallbacks.getBroadcastItem(i).onLeasesChanged(leaseParcelables);
- } catch (RemoteException e) {
- mLog.e("Could not send lease callback", e);
- }
- }
- mLeaseCallbacks.finishBroadcast();
- }
-
public void markLeaseDeclined(@NonNull Inet4Address addr) {
if (mDeclinedAddrs.containsKey(addr) || !isValidAddress(addr)) {
mLog.logf("Not marking %s as declined: already declined or not assignable",
@@ -423,14 +383,6 @@
}
/**
- * Add callbacks that will be called on leases update.
- */
- public void addLeaseCallbacks(@NonNull IDhcpLeaseCallbacks cb) {
- Objects.requireNonNull(cb, "Callbacks must be non-null");
- mLeaseCallbacks.register(cb);
- }
-
- /**
* Given the expiration time of a new committed lease or declined address, update
* {@link #mNextExpirationCheck} so it stays lower than or equal to the time for the first lease
* to expire.
@@ -589,7 +541,7 @@
for (int i = 0; i < mNumAddresses; i++) {
final Inet4Address addr = intToInet4AddressHTH(intAddr);
if (isAvailable(addr) && !mDeclinedAddrs.containsKey(addr)) {
- return new DhcpLease(clientId, hwAddr, addr, mPrefixLength, expTime, hostname);
+ return new DhcpLease(clientId, hwAddr, addr, expTime, hostname);
}
intAddr = getNextAddress(intAddr);
}
@@ -605,7 +557,7 @@
// However declined addresses may have been requested (typically by the machine that was
// already using the address) after being declined.
if (isAvailable(addr)) {
- return new DhcpLease(clientId, hwAddr, addr, mPrefixLength, expTime, hostname);
+ return new DhcpLease(clientId, hwAddr, addr, expTime, hostname);
}
}
diff --git a/src/android/net/dhcp/DhcpServer.java b/src/android/net/dhcp/DhcpServer.java
index bcca47a..6aadc04 100644
--- a/src/android/net/dhcp/DhcpServer.java
+++ b/src/android/net/dhcp/DhcpServer.java
@@ -274,22 +274,10 @@
*/
@Override
public void start(@Nullable INetworkStackStatusCallback cb) {
- startWithCallbacks(cb, null);
- }
-
- /**
- * Start listening for and responding to packets, with optional callbacks for lease events.
- *
- * <p>It is not legal to call this method more than once; in particular the server cannot be
- * restarted after being stopped.
- */
- @Override
- public void startWithCallbacks(@Nullable INetworkStackStatusCallback statusCb,
- @Nullable IDhcpLeaseCallbacks leaseCb) {
mDeps.checkCaller();
mHandlerThread.start();
mHandler = new ServerHandler(mHandlerThread.getLooper());
- sendMessage(CMD_START_DHCP_SERVER, new Pair<>(statusCb, leaseCb));
+ sendMessage(CMD_START_DHCP_SERVER, cb);
}
/**
@@ -356,12 +344,9 @@
cb = pair.second;
break;
case CMD_START_DHCP_SERVER:
- final Pair<INetworkStackStatusCallback, IDhcpLeaseCallbacks> obj =
- (Pair<INetworkStackStatusCallback, IDhcpLeaseCallbacks>) msg.obj;
- cb = obj.first;
- mLeaseRepo.addLeaseCallbacks(obj.second);
mPacketListener = mDeps.makePacketListener();
mPacketListener.start();
+ cb = (INetworkStackStatusCallback) msg.obj;
break;
case CMD_STOP_DHCP_SERVER:
if (mPacketListener != null) {
diff --git a/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java b/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
index 82f9b50..27d7255 100644
--- a/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
+++ b/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
@@ -20,7 +20,6 @@
import static android.net.dhcp.DhcpLease.HOSTNAME_NONE;
import static android.net.dhcp.DhcpLeaseRepository.CLIENTID_UNSPEC;
import static android.net.dhcp.DhcpLeaseRepository.INETADDR_UNSPEC;
-import static android.net.shared.Inet4AddressUtils.intToInet4AddressHTH;
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ANY;
@@ -30,26 +29,14 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import static java.lang.String.format;
-import static java.util.stream.Collectors.toSet;
-
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.IpPrefix;
import android.net.MacAddress;
import android.net.dhcp.DhcpServer.Clock;
import android.net.util.SharedLog;
-import android.os.Binder;
-import android.os.RemoteException;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -60,6 +47,8 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import static java.lang.String.format;
+
import java.net.Inet4Address;
import java.util.Arrays;
import java.util.Collections;
@@ -91,15 +80,10 @@
@NonNull
private SharedLog mLog;
- @NonNull
- @Mock
+ @NonNull @Mock
private Clock mClock;
@NonNull
private DhcpLeaseRepository mRepo;
- @NonNull
- @Mock
- private IDhcpLeaseCallbacks mCallbacks;
- private final Binder mCallbacksBinder = new Binder();
private static Inet4Address parseAddr4(String inet4Addr) {
return (Inet4Address) parseNumericAddress(inet4Addr);
@@ -110,12 +94,8 @@
MockitoAnnotations.initMocks(this);
mLog = new SharedLog("DhcpLeaseRepositoryTest");
when(mClock.elapsedRealtime()).thenReturn(TEST_TIME);
- // Use a non-null Binder for linkToDeath
- when(mCallbacks.asBinder()).thenReturn(mCallbacksBinder);
mRepo = new DhcpLeaseRepository(
TEST_IP_PREFIX, TEST_EXCL_SET, TEST_LEASE_TIME_MS, mLog, mClock);
- mRepo.addLeaseCallbacks(mCallbacks);
- verify(mCallbacks, atLeastOnce()).asBinder();
}
/**
@@ -149,7 +129,6 @@
// /28 should have 16 addresses, 14 w/o the first/last, 11 w/o excluded addresses
requestAddresses((byte) 11);
- verify(mCallbacks, times(11)).onLeasesChanged(any());
try {
mRepo.getOffer(null, TEST_MAC_2,
@@ -158,7 +137,6 @@
} catch (DhcpLeaseRepository.OutOfAddressesException e) {
// Expected
}
- verifyNoMoreInteractions(mCallbacks);
}
@Test
@@ -171,7 +149,6 @@
final Inet4Address declinedFirstAddrIn28 = parseAddr4("192.168.42.240");
final DhcpLease reqAddrIn28Lease = requestLeaseSelecting(TEST_MAC_1, reqAddrIn28);
- verifyLeasesChangedCallback(reqAddrIn28Lease);
mRepo.markLeaseDeclined(declinedAddrIn28);
mRepo.markLeaseDeclined(declinedFirstAddrIn28);
@@ -180,21 +157,16 @@
final Inet4Address declinedAddrIn22 = parseAddr4("192.168.42.4");
final DhcpLease reqAddrIn22Lease = requestLeaseSelecting(TEST_MAC_3, reqAddrIn22);
- verifyLeasesChangedCallback(reqAddrIn28Lease, reqAddrIn22Lease);
mRepo.markLeaseDeclined(declinedAddrIn22);
// Address that will be reserved in the updateParams call below
final Inet4Address reservedAddr = parseAddr4("192.168.42.244");
final DhcpLease reservedAddrLease = requestLeaseSelecting(TEST_MAC_2, reservedAddr);
- verifyLeasesChangedCallback(reqAddrIn28Lease, reqAddrIn22Lease, reservedAddrLease);
// Update from /22 to /28 and add another reserved address
Set<Inet4Address> newReserved = new HashSet<>(TEST_EXCL_SET);
newReserved.add(reservedAddr);
mRepo.updateParams(new IpPrefix(TEST_SERVER_ADDR, 28), newReserved, TEST_LEASE_TIME_MS);
- // Callback is called for the second time with just this lease
- verifyLeasesChangedCallback(2 /* times */, reqAddrIn28Lease);
- verifyNoMoreInteractions(mCallbacks);
assertHasLease(reqAddrIn28Lease);
assertDeclined(declinedAddrIn28);
@@ -277,9 +249,6 @@
TEST_INETADDR_1 /* reqAddr */, TEST_HOSTNAME_1);
assertEquals(TEST_INETADDR_1, offer.getNetAddr());
assertEquals(TEST_HOSTNAME_1, offer.getHostname());
-
- // Leases are not committed on offer
- verify(mCallbacks, never()).onLeasesChanged(any());
}
@Test
@@ -324,14 +293,10 @@
final DhcpLease lease1 = requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_1,
TEST_HOSTNAME_1);
- verifyLeasesChangedCallback(lease1);
-
// Second request from same client for a different address
final DhcpLease lease2 = requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_2,
TEST_HOSTNAME_2);
- verifyLeasesChangedCallback(lease2);
-
assertEquals(TEST_INETADDR_1, lease1.getNetAddr());
assertEquals(TEST_HOSTNAME_1, lease1.getHostname());
@@ -341,9 +306,6 @@
// First address freed when client requested a different one: another client can request it
final DhcpLease lease3 = requestLeaseSelecting(TEST_MAC_2, TEST_INETADDR_1, HOSTNAME_NONE);
assertEquals(TEST_INETADDR_1, lease3.getNetAddr());
-
- verifyLeasesChangedCallback(lease2, lease3);
- verifyNoMoreInteractions(mCallbacks);
}
@Test(expected = DhcpLeaseRepository.InvalidAddressException.class)
@@ -372,8 +334,7 @@
@Test
public void testRequestLease_InitReboot() throws Exception {
// Request address once
- final DhcpLease oldLease = requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_1);
- verifyLeasesChangedCallback(oldLease);
+ requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_1);
final long newTime = TEST_TIME + 100;
when(mClock.elapsedRealtime()).thenReturn(newTime);
@@ -382,9 +343,6 @@
final DhcpLease lease = requestLeaseInitReboot(TEST_MAC_1, TEST_INETADDR_1);
assertEquals(TEST_INETADDR_1, lease.getNetAddr());
assertEquals(newTime + TEST_LEASE_TIME_MS, lease.getExpTime());
-
- verifyLeasesChangedCallback(lease);
- verifyNoMoreInteractions(mCallbacks);
}
@Test(expected = DhcpLeaseRepository.InvalidAddressException.class)
@@ -412,9 +370,7 @@
@Test
public void testRequestLease_Renewing() throws Exception {
- final DhcpLease oldLease = requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_1);
-
- verifyLeasesChangedCallback(oldLease);
+ requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_1);
final long newTime = TEST_TIME + 100;
when(mClock.elapsedRealtime()).thenReturn(newTime);
@@ -423,9 +379,6 @@
assertEquals(TEST_INETADDR_1, lease.getNetAddr());
assertEquals(newTime + TEST_LEASE_TIME_MS, lease.getExpTime());
-
- verifyLeasesChangedCallback(lease);
- verifyNoMoreInteractions(mCallbacks);
}
@Test
@@ -438,19 +391,10 @@
assertEquals(newTime + TEST_LEASE_TIME_MS, lease.getExpTime());
}
- @Test
+ @Test(expected = DhcpLeaseRepository.InvalidAddressException.class)
public void testRequestLease_RenewingAddrInUse() throws Exception {
- final DhcpLease originalLease = requestLeaseSelecting(TEST_MAC_2, TEST_INETADDR_1);
- verifyLeasesChangedCallback(originalLease);
-
- try {
- requestLeaseRenewing(TEST_MAC_1, TEST_INETADDR_1);
- fail("Renewing with a different address should fail");
- } catch (DhcpLeaseRepository.InvalidAddressException e) {
- // fall through
- }
-
- verifyNoMoreInteractions(mCallbacks);
+ requestLeaseSelecting(TEST_MAC_2, TEST_INETADDR_1);
+ requestLeaseRenewing(TEST_MAC_1, TEST_INETADDR_1);
}
@Test(expected = DhcpLeaseRepository.InvalidAddressException.class)
@@ -597,29 +541,4 @@
private void assertDeclined(Inet4Address addr) {
assertTrue("Address is not declined: " + addr, mRepo.getDeclinedAddresses().contains(addr));
}
-
- private void verifyLeasesChangedCallback(int times, DhcpLease... leases) {
- final Set<DhcpLease> expected = new HashSet<>(Arrays.asList(leases));
- try {
- verify(mCallbacks, times(times)).onLeasesChanged(argThat(l ->
- l.stream().map(DhcpLeaseRepositoryTest::fromParcelable).collect(toSet())
- .equals(expected)));
- } catch (RemoteException e) {
- fail("Can't happen: " + e);
- }
- }
-
- private void verifyLeasesChangedCallback(DhcpLease... leases) {
- verifyLeasesChangedCallback(1 /* times */, leases);
- }
-
- private static DhcpLease fromParcelable(DhcpLeaseParcelable p) {
- return new DhcpLease(
- p.clientId,
- p.hwAddr == null ? null : MacAddress.fromBytes(p.hwAddr),
- intToInet4AddressHTH(p.netAddr),
- p.prefixLength,
- p.expTime,
- p.hostname);
- }
}
diff --git a/tests/unit/src/android/net/dhcp/DhcpLeaseTest.kt b/tests/unit/src/android/net/dhcp/DhcpLeaseTest.kt
deleted file mode 100644
index 2971f65..0000000
--- a/tests/unit/src/android/net/dhcp/DhcpLeaseTest.kt
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2020 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 android.net.dhcp
-
-import android.net.InetAddresses.parseNumericAddress
-import android.net.MacAddress
-import android.net.shared.Inet4AddressUtils.intToInet4AddressHTH
-import androidx.test.filters.SmallTest
-import androidx.test.runner.AndroidJUnit4
-import com.android.testutils.assertFieldCountEquals
-import org.junit.Assert.assertArrayEquals
-import org.junit.Test
-import org.junit.runner.RunWith
-import java.net.Inet4Address
-import kotlin.test.assertEquals
-import kotlin.test.assertNotEquals
-
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class DhcpLeaseTest {
- companion object {
- private val TEST_CLIENT_ID = byteArrayOf(0, 1, 2, 127)
- private val TEST_HWADDR = MacAddress.fromString("01:23:45:67:8F:9A")
- private val TEST_INETADDR = parseNumericAddress("192.168.42.123") as Inet4Address
- private val TEST_PREFIXLEN = 23
- private val TEST_EXPTIME = 1234L
- private val TEST_HOSTNAME = "test_hostname"
- }
-
- @Test
- fun testToParcelable() {
- val lease = DhcpLease(TEST_CLIENT_ID, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN,
- TEST_EXPTIME, TEST_HOSTNAME)
-
- assertParcelEquals(lease, lease.toParcelable())
- }
-
- @Test
- fun testToParcelable_NullFields() {
- val lease = DhcpLease(null, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN, TEST_EXPTIME, null)
- assertParcelEquals(lease, lease.toParcelable())
- }
-
- @Test
- fun testEquals() {
- val lease = DhcpLease(TEST_CLIENT_ID, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN,
- TEST_EXPTIME, TEST_HOSTNAME)
- assertEquals(lease, DhcpLease(TEST_CLIENT_ID, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN,
- TEST_EXPTIME, TEST_HOSTNAME))
-
- // Change client ID
- assertNotEquals(lease, DhcpLease(null, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN,
- TEST_EXPTIME, TEST_HOSTNAME))
- assertNotEquals(lease, DhcpLease(byteArrayOf(42), TEST_HWADDR, TEST_INETADDR,
- TEST_PREFIXLEN, TEST_EXPTIME, TEST_HOSTNAME))
-
- // Change mac address
- assertNotEquals(lease, DhcpLease(TEST_CLIENT_ID, MacAddress.fromString("12:34:56:78:9A:0B"),
- TEST_INETADDR, TEST_PREFIXLEN, TEST_EXPTIME, TEST_HOSTNAME))
-
- // Change address
- assertNotEquals(lease, DhcpLease(TEST_CLIENT_ID, TEST_HWADDR,
- parseNumericAddress("192.168.43.43") as Inet4Address, TEST_PREFIXLEN, TEST_EXPTIME,
- TEST_HOSTNAME))
-
- // Change prefix length
- assertNotEquals(lease, DhcpLease(TEST_CLIENT_ID, TEST_HWADDR, TEST_INETADDR, 24,
- TEST_EXPTIME, TEST_HOSTNAME))
-
- // Change expiry time
- assertNotEquals(lease, DhcpLease(TEST_CLIENT_ID, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN,
- 4567L, TEST_HOSTNAME))
-
- // Change hostname
- assertNotEquals(lease, DhcpLease(TEST_CLIENT_ID, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN,
- TEST_EXPTIME, null))
- assertNotEquals(lease, DhcpLease(TEST_CLIENT_ID, TEST_HWADDR, TEST_INETADDR, TEST_PREFIXLEN,
- TEST_EXPTIME, "other_hostname"))
-
- assertFieldCountEquals(6, DhcpLease::class.java)
- }
-
- private fun assertParcelEquals(expected: DhcpLease, p: DhcpLeaseParcelable) {
- assertArrayEquals(expected.clientId, p.clientId)
- assertEquals(expected.hwAddr, MacAddress.fromBytes(p.hwAddr))
- assertEquals(expected.netAddr, intToInet4AddressHTH(p.netAddr))
- assertEquals(expected.prefixLength, p.prefixLength)
- assertEquals(expected.expTime, p.expTime)
- assertEquals(expected.hostname, p.hostname)
-
- assertFieldCountEquals(6, DhcpLease::class.java)
- }
-}
\ No newline at end of file
diff --git a/tests/unit/src/android/net/dhcp/DhcpServerTest.java b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
index 37ca833..aae9bc0 100644
--- a/tests/unit/src/android/net/dhcp/DhcpServerTest.java
+++ b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
@@ -81,9 +81,7 @@
private static final String TEST_IFACE = "testiface";
private static final Inet4Address TEST_SERVER_ADDR = parseAddr("192.168.0.2");
- private static final int TEST_PREFIX_LENGTH = 20;
- private static final LinkAddress TEST_SERVER_LINKADDR = new LinkAddress(
- TEST_SERVER_ADDR, TEST_PREFIX_LENGTH);
+ private static final LinkAddress TEST_SERVER_LINKADDR = new LinkAddress(TEST_SERVER_ADDR, 20);
private static final Set<Inet4Address> TEST_DEFAULT_ROUTERS = new HashSet<>(
Arrays.asList(parseAddr("192.168.0.123"), parseAddr("192.168.0.124")));
private static final Set<Inet4Address> TEST_DNS_SERVERS = new HashSet<>(
@@ -102,11 +100,10 @@
private static final long TEST_CLOCK_TIME = 1234L;
private static final int TEST_LEASE_EXPTIME_SECS = 3600;
private static final DhcpLease TEST_LEASE = new DhcpLease(null, TEST_CLIENT_MAC,
- TEST_CLIENT_ADDR, TEST_PREFIX_LENGTH, TEST_LEASE_EXPTIME_SECS * 1000L + TEST_CLOCK_TIME,
+ TEST_CLIENT_ADDR, TEST_LEASE_EXPTIME_SECS * 1000L + TEST_CLOCK_TIME,
null /* hostname */);
private static final DhcpLease TEST_LEASE_WITH_HOSTNAME = new DhcpLease(null, TEST_CLIENT_MAC,
- TEST_CLIENT_ADDR, TEST_PREFIX_LENGTH, TEST_LEASE_EXPTIME_SECS * 1000L + TEST_CLOCK_TIME,
- TEST_HOSTNAME);
+ TEST_CLIENT_ADDR, TEST_LEASE_EXPTIME_SECS * 1000L + TEST_CLOCK_TIME, TEST_HOSTNAME);
@NonNull @Mock
private Context mContext;