add a comparator for LogMaker

Tests need to be able to compare partial log structures.

Bug: 34705522
Test: runtest --path frameworks/base/core/tests/coretests/src/android/metrics
Change-Id: I4e26e43f5f5ea3fbba5a2a2a9563982c7260671b
This commit is contained in:
Chris Wren
2017-01-26 13:14:14 -05:00
parent 22a7c7ddf2
commit 58047b9451
3 changed files with 96 additions and 0 deletions

View File

@@ -26158,6 +26158,7 @@ package android.metrics {
method public long getTimestamp();
method public int getType();
method public boolean isLongCounterBucket();
method public boolean isSubsetOf(android.metrics.LogMaker);
method public boolean isValidValue(java.lang.Object);
method public java.lang.Object[] serialize();
method public android.metrics.LogMaker setCategory(int);

View File

@@ -240,6 +240,9 @@ public class LogMaker {
return out;
}
/**
* Reconstitute an object from the output of {@link #serialize()}.
*/
public void deserialize(Object[] items) {
int i = 0;
while (i < items.length) {
@@ -252,4 +255,22 @@ public class LogMaker {
}
}
}
/**
* @param that the object to compare to.
* @return true if values in that equal values in this, for tags that exist in this.
*/
public boolean isSubsetOf(LogMaker that) {
if (that == null) {
return false;
}
for (int i = 0; i < entries.size(); i++) {
int key = this.entries.keyAt(i);
Object thisValue = this.entries.valueAt(i);
Object thatValue = that.entries.get(key);
if ((thisValue == null && thatValue != null) || !thisValue.equals(thatValue))
return false;
}
return true;
}
}

View File

@@ -132,4 +132,78 @@ public class LogMakerTest extends TestCase {
assertTrue(badBuilder.serialize().length < LogMaker.MAX_SERIALIZED_SIZE);
}
public void testIdentityEquality() {
LogMaker a = new LogMaker(0);
a.addTaggedData(1, "onetwothree");
a.addTaggedData(2, 123);
a.addTaggedData(3, 123L);
assertTrue("objects should be equal to themselves", a.isSubsetOf(a));
}
public void testExactEquality() {
LogMaker a = new LogMaker(0);
a.addTaggedData(1, "onetwothree");
a.addTaggedData(2, 123);
a.addTaggedData(3, 123L);
LogMaker b = new LogMaker(0);
b.addTaggedData(1, "onetwothree");
b.addTaggedData(2, 123);
b.addTaggedData(3, 123L);
assertTrue("deep equality should be true", a.isSubsetOf(b));
assertTrue("deep equality shoudl be true", b.isSubsetOf(a));
}
public void testSubsetEquality() {
LogMaker a = new LogMaker(0);
a.addTaggedData(1, "onetwothree");
a.addTaggedData(2, 123);
LogMaker b = new LogMaker(0);
b.addTaggedData(1, "onetwothree");
b.addTaggedData(2, 123);
b.addTaggedData(3, 123L);
assertTrue("a is a strict subset of b", a.isSubsetOf(b));
assertTrue("b is not a strict subset of a", !b.isSubsetOf(a));
}
public void testInequality() {
LogMaker a = new LogMaker(0);
a.addTaggedData(1, "onetwofour");
a.addTaggedData(2, 1234);
LogMaker b = new LogMaker(0);
b.addTaggedData(1, "onetwothree");
b.addTaggedData(2, 123);
b.addTaggedData(3, 123L);
assertTrue("a is not a subset of b", !a.isSubsetOf(b));
assertTrue("b is not a subset of a", !b.isSubsetOf(a));
}
public void testWildcardEquality() {
LogMaker empty = new LogMaker(0);
empty.clearTaggedData(MetricsEvent.RESERVED_FOR_LOGBUILDER_CATEGORY); //dirty trick
LogMaker b = new LogMaker(0);
b.addTaggedData(1, "onetwothree");
b.addTaggedData(2, 123);
b.addTaggedData(3, 123L);
assertTrue("empty builder is a subset of anything", empty.isSubsetOf(b));
}
public void testNullEquality() {
LogMaker a = new LogMaker(0);
a.addTaggedData(1, "onetwofour");
a.addTaggedData(2, 1234);
assertTrue("a is not a subset of null", !a.isSubsetOf(null));
}
public void testMajorCategory() {
LogMaker a = new LogMaker(1);
LogMaker b = new LogMaker(2);
assertFalse(a.isSubsetOf(b));
assertFalse(b.isSubsetOf(a));
}
}