Adding system health diags for inporoc tests
Bug: 133891845
Change-Id: I90161bfc9db5983a45dfb89728a82ec1e3d81f19
diff --git a/tests/src/com/android/launcher3/testcomponent/TestCommandReceiver.java b/tests/src/com/android/launcher3/testcomponent/TestCommandReceiver.java
index fa23b8d..6a6916e 100644
--- a/tests/src/com/android/launcher3/testcomponent/TestCommandReceiver.java
+++ b/tests/src/com/android/launcher3/testcomponent/TestCommandReceiver.java
@@ -32,13 +32,14 @@
import android.os.ParcelFileDescriptor;
import android.util.Base64;
+import androidx.test.InstrumentationRegistry;
+
+import com.android.launcher3.tapl.TestHelpers;
+
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
-import androidx.test.InstrumentationRegistry;
-
/**
* Content provider to receive commands from tests
*/
@@ -47,6 +48,7 @@
public static final String ENABLE_TEST_LAUNCHER = "enable-test-launcher";
public static final String DISABLE_TEST_LAUNCHER = "disable-test-launcher";
public static final String KILL_PROCESS = "kill-process";
+ public static final String GET_SYSTEM_HEALTH_MESSAGE = "get-system-health-message";
@Override
public boolean onCreate() {
@@ -99,6 +101,12 @@
killBackgroundProcesses(arg);
return null;
}
+
+ case GET_SYSTEM_HEALTH_MESSAGE: {
+ final Bundle response = new Bundle();
+ response.putString("result", TestHelpers.getSystemHealthMessage(getContext()));
+ return response;
+ }
}
return super.call(method, arg, extras);
}
@@ -122,7 +130,8 @@
// Create an empty file so that we can pass its descriptor
try {
file.createNewFile();
- } catch (IOException e) { }
+ } catch (IOException e) {
+ }
}
return ParcelFileDescriptor.open(file, MODE_READ_WRITE);
diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
index e39fc76..361f2fb 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -51,6 +51,7 @@
import com.android.launcher3.model.AppLaunchTracker;
import com.android.launcher3.tapl.LauncherInstrumentation;
import com.android.launcher3.tapl.TestHelpers;
+import com.android.launcher3.testcomponent.TestCommandReceiver;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.Wait;
import com.android.launcher3.util.rule.FailureWatcher;
@@ -98,7 +99,11 @@
} catch (RemoteException e) {
throw new RuntimeException(e);
}
- if (TestHelpers.isInLauncherProcess()) Utilities.enableRunningInTestHarnessForTests();
+ if (TestHelpers.isInLauncherProcess()) {
+ Utilities.enableRunningInTestHarnessForTests();
+ mLauncher.setSystemHealthSupplier(() -> TestCommandReceiver.callCommand(
+ TestCommandReceiver.GET_SYSTEM_HEALTH_MESSAGE).getString("result"));
+ }
}
protected final LauncherActivityRule mActivityMonitor = new LauncherActivityRule();
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 5a6c898..0fed337 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -39,7 +39,6 @@
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
-import android.os.DropBoxManager;
import android.os.Parcelable;
import android.os.SystemClock;
import android.text.TextUtils;
@@ -73,6 +72,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeoutException;
+import java.util.function.Supplier;
/**
* The main tapl object. The only object that can be explicitly constructed by the using code. It
@@ -133,6 +133,7 @@
private int mExpectedRotation = Surface.ROTATION_0;
private final Uri mTestProviderUri;
private final Deque<String> mDiagnosticContext = new LinkedList<>();
+ private Supplier<String> mSystemHealthSupplier;
/**
* Constructs the root of TAPL hierarchy. You get all other objects from it.
@@ -285,79 +286,24 @@
return "Background";
}
- private static String truncateCrash(String text, int maxLines) {
- String[] lines = text.split("\\r?\\n");
- StringBuilder ret = new StringBuilder();
- for (int i = 0; i < maxLines && i < lines.length; i++) {
- ret.append(lines[i]);
- ret.append('\n');
- }
- if (lines.length > maxLines) {
- ret.append("... ");
- ret.append(lines.length - maxLines);
- ret.append(" more lines truncated ...\n");
- }
- return ret.toString();
- }
-
- private String checkCrash(String label) {
- DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService(
- Context.DROPBOX_SERVICE);
- Assert.assertNotNull("Unable access the DropBoxManager service", dropbox);
-
- long timestamp = 0;
- DropBoxManager.Entry entry;
- int crashCount = 0;
- StringBuilder errorDetails = new StringBuilder();
- while (null != (entry = dropbox.getNextEntry(label, timestamp))) {
- String dropboxSnippet;
- try {
- dropboxSnippet = entry.getText(4096);
- } finally {
- entry.close();
- }
-
- crashCount++;
- errorDetails.append(label);
- errorDetails.append(": ");
- errorDetails.append(truncateCrash(dropboxSnippet, 40));
- errorDetails.append(" ...\n");
-
- timestamp = entry.getTimeMillis();
- }
- Assert.assertEquals(errorDetails.toString(), 0, crashCount);
- return crashCount > 0 ? errorDetails.toString() : null;
+ public void setSystemHealthSupplier(Supplier<String> supplier) {
+ this.mSystemHealthSupplier = supplier;
}
private String getSystemHealthMessage() {
+ final String testPackage = getContext().getPackageName();
try {
- StringBuilder errors = new StringBuilder();
-
- final String testPackage = getContext().getPackageName();
- try {
- mDevice.executeShellCommand("pm grant " + testPackage +
- " android.permission.READ_LOGS");
- mDevice.executeShellCommand("pm grant " + testPackage +
- " android.permission.PACKAGE_USAGE_STATS");
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- final String[] labels = {
- "system_server_crash",
- "system_server_native_crash",
- "system_server_anr",
- };
-
- for (String label : labels) {
- final String crash = checkCrash(label);
- if (crash != null) errors.append(crash);
- }
-
- return errors.length() != 0 ? errors.toString() : null;
- } catch (Exception e) {
- return null;
+ mDevice.executeShellCommand("pm grant " + testPackage +
+ " android.permission.READ_LOGS");
+ mDevice.executeShellCommand("pm grant " + testPackage +
+ " android.permission.PACKAGE_USAGE_STATS");
+ } catch (IOException e) {
+ e.printStackTrace();
}
+
+ return mSystemHealthSupplier != null
+ ? mSystemHealthSupplier.get()
+ : TestHelpers.getSystemHealthMessage(getContext());
}
private void fail(String message) {
diff --git a/tests/tapl/com/android/launcher3/tapl/TestHelpers.java b/tests/tapl/com/android/launcher3/tapl/TestHelpers.java
index 93554d2..e19f91a 100644
--- a/tests/tapl/com/android/launcher3/tapl/TestHelpers.java
+++ b/tests/tapl/com/android/launcher3/tapl/TestHelpers.java
@@ -26,6 +26,9 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
+import android.os.DropBoxManager;
+
+import org.junit.Assert;
import java.util.List;
@@ -81,4 +84,69 @@
}
return "com.android.systemui";
}
+
+ private static String truncateCrash(String text, int maxLines) {
+ String[] lines = text.split("\\r?\\n");
+ StringBuilder ret = new StringBuilder();
+ for (int i = 0; i < maxLines && i < lines.length; i++) {
+ ret.append(lines[i]);
+ ret.append('\n');
+ }
+ if (lines.length > maxLines) {
+ ret.append("... ");
+ ret.append(lines.length - maxLines);
+ ret.append(" more lines truncated ...\n");
+ }
+ return ret.toString();
+ }
+
+ private static String checkCrash(Context context, String label) {
+ DropBoxManager dropbox = (DropBoxManager) context.getSystemService(Context.DROPBOX_SERVICE);
+ Assert.assertNotNull("Unable access the DropBoxManager service", dropbox);
+
+ long timestamp = 0;
+ DropBoxManager.Entry entry;
+ int crashCount = 0;
+ StringBuilder errorDetails = new StringBuilder();
+ while (null != (entry = dropbox.getNextEntry(label, timestamp))) {
+ String dropboxSnippet;
+ try {
+ dropboxSnippet = entry.getText(4096);
+ } finally {
+ entry.close();
+ }
+
+ crashCount++;
+ errorDetails.append(label);
+ errorDetails.append(": ");
+ errorDetails.append(truncateCrash(dropboxSnippet, 40));
+ errorDetails.append(" ...\n");
+
+ timestamp = entry.getTimeMillis();
+ }
+ Assert.assertEquals(errorDetails.toString(), 0, crashCount);
+ return crashCount > 0 ? errorDetails.toString() : null;
+ }
+
+ public static String getSystemHealthMessage(Context context) {
+ try {
+ StringBuilder errors = new StringBuilder();
+
+ final String[] labels = {
+ "system_server_crash",
+ "system_server_native_crash",
+ "system_server_anr",
+ };
+
+ for (String label : labels) {
+ final String crash = checkCrash(context, label);
+ if (crash != null) errors.append(crash);
+ }
+
+ return errors.length() != 0 ? errors.toString() : null;
+ } catch (Exception e) {
+ return "Failed to get system health diags, maybe build your test via .bp instead of "
+ + ".mk? " + android.util.Log.getStackTraceString(e);
+ }
+ }
}