Make UsageStats tests more robust.
Bug:17536113
Change-Id: I8e78b5f0514b0800c0b5a6bff09822d4b00859ee
diff --git a/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java b/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java
index 5b1909a..d3890df 100644
--- a/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java
+++ b/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java
@@ -132,11 +132,12 @@
Activities.ActivityThree.class,
};
+ final long startTime = System.currentTimeMillis() - MINUTE;
+
// Launch the series of Activities.
launchSubActivities(activitySequence);
final long endTime = System.currentTimeMillis();
- final long startTime = endTime - DAY;
UsageEvents events = mUsageStatsManager.queryEvents(startTime, endTime);
// Consume all the events.
@@ -147,15 +148,26 @@
eventList.add(event);
}
+ // Find the last Activity's MOVE_TO_FOREGROUND event.
+ int end = eventList.size();
+ while (end > 0) {
+ UsageEvents.Event event = eventList.get(end - 1);
+ if (event.getClassName().equals(activitySequence[activitySequence.length - 1].getName())
+ && event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
+ break;
+ }
+ end--;
+ }
+
// We expect 2 events per Activity launched (foreground + background)
// except for the last Activity, which was in the foreground when
// we queried the event log.
- assertTrue(eventList.size() >= (activitySequence.length * 2) - 1);
- final int offset = eventList.size() - ((activitySequence.length * 2) - 1);
+ final int start = end - ((activitySequence.length * 2) - 1);
+ assertTrue("Not enough events", start >= 0);
final int activityCount = activitySequence.length;
for (int i = 0; i < activityCount; i++) {
- int index = offset + (i * 2);
+ final int index = start + (i * 2);
// Check for foreground event.
UsageEvents.Event event = eventList.get(index);
@@ -163,10 +175,10 @@
assertEquals(activitySequence[i].getName(), event.getClassName());
assertEquals(UsageEvents.Event.MOVE_TO_FOREGROUND, event.getEventType());
- index += 1;
+ // Only check for the background event if this is not the
+ // last activity.
if (i < activityCount - 1) {
- // Check for background event.
- event = eventList.get(index);
+ event = eventList.get(index + 1);
assertEquals(mTargetPackage, event.getPackageName());
assertEquals(activitySequence[i].getName(), event.getClassName());
assertEquals(UsageEvents.Event.MOVE_TO_BACKGROUND, event.getEventType());
@@ -182,6 +194,7 @@
@Ignore
public void ignore_testStatsAreShiftedInTimeWhenSystemTimeChanges() throws Exception {
launchSubActivity(Activities.ActivityOne.class);
+ launchSubActivity(Activities.ActivityThree.class);
long endTime = System.currentTimeMillis();
long startTime = endTime - MINUTE;
@@ -214,18 +227,19 @@
}
public void testUsageEventsParceling() throws Exception {
- final long startTime = System.currentTimeMillis();
+ final long startTime = System.currentTimeMillis() - MINUTE;
+ // Ensure some data is in the UsageStats log.
@SuppressWarnings("unchecked")
Class<? extends Activity>[] activityClasses = new Class[] {
+ Activities.ActivityTwo.class,
Activities.ActivityOne.class,
Activities.ActivityThree.class,
- Activities.ActivityTwo.class,
};
launchSubActivities(activityClasses);
final long endTime = System.currentTimeMillis();
- UsageEvents events = mUsageStatsManager.queryEvents(startTime - TIME_DIFF_THRESHOLD, endTime);
+ UsageEvents events = mUsageStatsManager.queryEvents(startTime, endTime);
assertTrue(events.getNextEvent(new UsageEvents.Event()));
Parcel p = Parcel.obtain();
@@ -255,6 +269,7 @@
// Launch an Activity.
launchSubActivity(Activities.ActivityFour.class);
+ launchSubActivity(Activities.ActivityThree.class);
final long endTime = System.currentTimeMillis();
@@ -287,10 +302,12 @@
}
public void testNoAccessSilentlyFails() throws Exception {
+ final long startTime = System.currentTimeMillis() - MINUTE;
+
launchSubActivity(Activities.ActivityOne.class);
+ launchSubActivity(Activities.ActivityThree.class);
final long endTime = System.currentTimeMillis();
- final long startTime = endTime - MINUTE;
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,
startTime, endTime);
assertFalse(stats.isEmpty());