Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb279461 authored by Narayan Kamath's avatar Narayan Kamath
Browse files

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
parent 0d64cd33
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -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
+17 −0
Original line number Diff line number Diff line
@@ -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();