Add accessors for all addresses and clarify compare* methods

1. Add a method to return all addresses and all LinkAddresses on
   all links (both base links and stacked links). We already had
   one for routes, but did not yet have any for addresses.
2. Rename compareRoutes to compareAllRoutes, because unlike the
   other compare* methods, it looks at all interfaces. Update
   what appears to be its only caller.
3. Update the documentation of the compare* methods to match
   reality (they don't return lists) and clarify whether they
   look at all links or only the base link.

Change-Id: Ie22e6c7f163d5de8e407248b45171dc28382d2d3
This commit is contained in:
Lorenzo Colitti
2013-07-31 23:23:21 +09:00
parent 57dbb7d9e7
commit e1b4742442
3 changed files with 69 additions and 24 deletions

View File

@@ -128,6 +128,9 @@ public class LinkProperties implements Parcelable {
return interfaceNames; return interfaceNames;
} }
/**
* Returns all the addresses on this link.
*/
public Collection<InetAddress> getAddresses() { public Collection<InetAddress> getAddresses() {
Collection<InetAddress> addresses = new ArrayList<InetAddress>(); Collection<InetAddress> addresses = new ArrayList<InetAddress>();
for (LinkAddress linkAddress : mLinkAddresses) { for (LinkAddress linkAddress : mLinkAddresses) {
@@ -136,14 +139,43 @@ public class LinkProperties implements Parcelable {
return Collections.unmodifiableCollection(addresses); return Collections.unmodifiableCollection(addresses);
} }
/**
* Returns all the addresses on this link and all the links stacked above it.
*/
public Collection<InetAddress> getAllAddresses() {
Collection<InetAddress> addresses = new ArrayList<InetAddress>();
for (LinkAddress linkAddress : mLinkAddresses) {
addresses.add(linkAddress.getAddress());
}
for (LinkProperties stacked: mStackedLinks.values()) {
addresses.addAll(stacked.getAllAddresses());
}
return addresses;
}
public void addLinkAddress(LinkAddress address) { public void addLinkAddress(LinkAddress address) {
if (address != null) mLinkAddresses.add(address); if (address != null) mLinkAddresses.add(address);
} }
/**
* Returns all the addresses on this link.
*/
public Collection<LinkAddress> getLinkAddresses() { public Collection<LinkAddress> getLinkAddresses() {
return Collections.unmodifiableCollection(mLinkAddresses); return Collections.unmodifiableCollection(mLinkAddresses);
} }
/**
* Returns all the addresses on this link and all the links stacked above it.
*/
public Collection<LinkAddress> getAllLinkAddresses() {
Collection<LinkAddress> addresses = new ArrayList<LinkAddress>();
addresses.addAll(mLinkAddresses);
for (LinkProperties stacked: mStackedLinks.values()) {
addresses.addAll(stacked.getAllLinkAddresses());
}
return addresses;
}
public void addDns(InetAddress dns) { public void addDns(InetAddress dns) {
if (dns != null) mDnses.add(dns); if (dns != null) mDnses.add(dns);
} }
@@ -426,13 +458,11 @@ public class LinkProperties implements Parcelable {
} }
/** /**
* Return two lists, a list of addresses that would be removed from * Compares the addresses in this LinkProperties with another
* mLinkAddresses and a list of addresses that would be added to * LinkProperties, examining only addresses on the base link.
* mLinkAddress which would then result in target and mLinkAddresses
* being the same list.
* *
* @param target is a LinkProperties with the new list of addresses * @param target a LinkProperties with the new list of addresses
* @return the removed and added lists. * @return the differences between the addresses.
*/ */
public CompareResult<LinkAddress> compareAddresses(LinkProperties target) { public CompareResult<LinkAddress> compareAddresses(LinkProperties target) {
/* /*
@@ -456,13 +486,11 @@ public class LinkProperties implements Parcelable {
} }
/** /**
* Return two lists, a list of dns addresses that would be removed from * Compares the DNS addresses in this LinkProperties with another
* mDnses and a list of addresses that would be added to * LinkProperties, examining only DNS addresses on the base link.
* mDnses which would then result in target and mDnses
* being the same list.
* *
* @param target is a LinkProperties with the new list of dns addresses * @param target a LinkProperties with the new list of dns addresses
* @return the removed and added lists. * @return the differences between the DNS addresses.
*/ */
public CompareResult<InetAddress> compareDnses(LinkProperties target) { public CompareResult<InetAddress> compareDnses(LinkProperties target) {
/* /*
@@ -487,15 +515,13 @@ public class LinkProperties implements Parcelable {
} }
/** /**
* Return two lists, a list of routes that would be removed from * Compares all routes in this LinkProperties with another LinkProperties,
* mRoutes and a list of routes that would be added to * examining both the the base link and all stacked links.
* mRoutes which would then result in target and mRoutes
* being the same list.
* *
* @param target is a LinkProperties with the new list of routes * @param target a LinkProperties with the new list of routes
* @return the removed and added lists. * @return the differences between the routes.
*/ */
public CompareResult<RouteInfo> compareRoutes(LinkProperties target) { public CompareResult<RouteInfo> compareAllRoutes(LinkProperties target) {
/* /*
* Duplicate the RouteInfos into removed, we will be removing * Duplicate the RouteInfos into removed, we will be removing
* routes which are common between mRoutes and target * routes which are common between mRoutes and target

View File

@@ -273,28 +273,47 @@ public class LinkPropertiesTest extends TestCase {
// Check comparisons work. // Check comparisons work.
LinkProperties lp2 = new LinkProperties(lp); LinkProperties lp2 = new LinkProperties(lp);
assertAllRoutesHaveInterface("wlan0", lp); assertAllRoutesHaveInterface("wlan0", lp);
assertEquals(0, lp.compareRoutes(lp2).added.size()); assertEquals(0, lp.compareAllRoutes(lp2).added.size());
assertEquals(0, lp.compareRoutes(lp2).removed.size()); assertEquals(0, lp.compareAllRoutes(lp2).removed.size());
lp2.setInterfaceName("p2p0"); lp2.setInterfaceName("p2p0");
assertAllRoutesHaveInterface("p2p0", lp2); assertAllRoutesHaveInterface("p2p0", lp2);
assertEquals(3, lp.compareRoutes(lp2).added.size()); assertEquals(3, lp.compareAllRoutes(lp2).added.size());
assertEquals(3, lp.compareRoutes(lp2).removed.size()); assertEquals(3, lp.compareAllRoutes(lp2).removed.size());
} }
@SmallTest @SmallTest
public void testStackedInterfaces() { public void testStackedInterfaces() {
LinkProperties rmnet0 = new LinkProperties(); LinkProperties rmnet0 = new LinkProperties();
rmnet0.setInterfaceName("rmnet0"); rmnet0.setInterfaceName("rmnet0");
rmnet0.addLinkAddress(new LinkAddress(
NetworkUtils.numericToInetAddress(ADDRV6), 128));
LinkProperties clat4 = new LinkProperties(); LinkProperties clat4 = new LinkProperties();
clat4.setInterfaceName("clat4"); clat4.setInterfaceName("clat4");
clat4.addLinkAddress(new LinkAddress(
NetworkUtils.numericToInetAddress(ADDRV4), 32));
assertEquals(0, rmnet0.getStackedLinks().size()); assertEquals(0, rmnet0.getStackedLinks().size());
assertEquals(1, rmnet0.getAddresses().size());
assertEquals(1, rmnet0.getLinkAddresses().size());
assertEquals(1, rmnet0.getAllAddresses().size());
assertEquals(1, rmnet0.getAllLinkAddresses().size());
rmnet0.addStackedLink(clat4); rmnet0.addStackedLink(clat4);
assertEquals(1, rmnet0.getStackedLinks().size()); assertEquals(1, rmnet0.getStackedLinks().size());
assertEquals(1, rmnet0.getAddresses().size());
assertEquals(1, rmnet0.getLinkAddresses().size());
assertEquals(2, rmnet0.getAllAddresses().size());
assertEquals(2, rmnet0.getAllLinkAddresses().size());
rmnet0.addStackedLink(clat4); rmnet0.addStackedLink(clat4);
assertEquals(1, rmnet0.getStackedLinks().size()); assertEquals(1, rmnet0.getStackedLinks().size());
assertEquals(1, rmnet0.getAddresses().size());
assertEquals(1, rmnet0.getLinkAddresses().size());
assertEquals(2, rmnet0.getAllAddresses().size());
assertEquals(2, rmnet0.getAllLinkAddresses().size());
assertEquals(0, clat4.getStackedLinks().size()); assertEquals(0, clat4.getStackedLinks().size());
// Modify an item in the returned collection to see what happens. // Modify an item in the returned collection to see what happens.

View File

@@ -2433,7 +2433,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
CompareResult<RouteInfo> routeDiff = new CompareResult<RouteInfo>(); CompareResult<RouteInfo> routeDiff = new CompareResult<RouteInfo>();
if (curLp != null) { if (curLp != null) {
// check for the delta between the current set and the new // check for the delta between the current set and the new
routeDiff = curLp.compareRoutes(newLp); routeDiff = curLp.compareAllRoutes(newLp);
dnsDiff = curLp.compareDnses(newLp); dnsDiff = curLp.compareDnses(newLp);
} else if (newLp != null) { } else if (newLp != null) {
routeDiff.added = newLp.getAllRoutes(); routeDiff.added = newLp.getAllRoutes();