WorkSource: Fix corner-case in equals method.

We should treat WorkSource objects that have a null mChains List
as being equal to one that has an empty non-null mChains List.

This bug was uncovered by the tests added to WifiController in
commit 0068bf953ad25e in frameworks/opt/net/wifi.

Bug: 62390666
Test: WorkSourceTest
Change-Id: Icd1f86aa5178a7beb436621362cfe771a3440398
This commit is contained in:
Narayan Kamath
2018-01-09 16:09:35 +00:00
parent 0d64cd33ba
commit eb27946173
2 changed files with 32 additions and 4 deletions

View File

@@ -7,7 +7,6 @@ import android.util.proto.ProtoOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
/**
* Describes the source of some work that may be done by someone else.
@@ -162,9 +161,21 @@ public class WorkSource implements Parcelable {
@Override
public boolean equals(Object o) {
return o instanceof WorkSource
&& !diff((WorkSource) o)
&& Objects.equals(mChains, ((WorkSource) o).mChains);
if (o instanceof WorkSource) {
WorkSource other = (WorkSource) o;
if (diff(other)) {
return false;
}
if (mChains != null && !mChains.isEmpty()) {
return mChains.equals(other.mChains);
} else {
return other.mChains == null || other.mChains.isEmpty();
}
}
return false;
}
@Override

View File

@@ -128,6 +128,23 @@ public class WorkSourceTest extends TestCase {
assertFalse(ws3.equals(ws1));
}
public void testEquals_workChains_nullEmptyAreEquivalent() {
// Construct a WorkSource that has no WorkChains, but whose workChains list
// is non-null.
WorkSource ws1 = new WorkSource();
ws1.add(100);
ws1.createWorkChain().addNode(100, null);
ws1.getWorkChains().clear();
WorkSource ws2 = new WorkSource();
ws2.add(100);
assertEquals(ws1, ws2);
ws2.createWorkChain().addNode(100, null);
assertFalse(ws1.equals(ws2));
}
public void testWorkSourceParcelling() {
WorkSource ws = new WorkSource();