summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/device-collectors/src/main/platform-collectors/src/android/device/collectors/StatsdListener.java7
-rw-r--r--libraries/device-collectors/src/test/platform/android/device/collectors/StatsdListenerTest.java33
2 files changed, 29 insertions, 11 deletions
diff --git a/libraries/device-collectors/src/main/platform-collectors/src/android/device/collectors/StatsdListener.java b/libraries/device-collectors/src/main/platform-collectors/src/android/device/collectors/StatsdListener.java
index d0eebb380..cd0527878 100644
--- a/libraries/device-collectors/src/main/platform-collectors/src/android/device/collectors/StatsdListener.java
+++ b/libraries/device-collectors/src/main/platform-collectors/src/android/device/collectors/StatsdListener.java
@@ -281,8 +281,11 @@ public class StatsdListener extends BaseMetricListener {
/** Format a JUnit {@link Description} to a desired string format. */
@VisibleForTesting
String formatDescription(Description description) {
- return String.join(
- "#", description.getTestClass().getCanonicalName(), description.getMethodName());
+ // Use String.valueOf() to guard agaist a null class name. This normally should not happen
+ // but the Description class does not explicitly guarantee it.
+ String className = String.valueOf(description.getClassName());
+ String methodName = description.getMethodName();
+ return methodName == null ? className : String.join("#", className, methodName);
}
/**
diff --git a/libraries/device-collectors/src/test/platform/android/device/collectors/StatsdListenerTest.java b/libraries/device-collectors/src/test/platform/android/device/collectors/StatsdListenerTest.java
index e63fa976a..731f3de79 100644
--- a/libraries/device-collectors/src/test/platform/android/device/collectors/StatsdListenerTest.java
+++ b/libraries/device-collectors/src/test/platform/android/device/collectors/StatsdListenerTest.java
@@ -236,7 +236,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
StatsdListener.REPORT_FILENAME_PREFIX,
- TEST_CLASS.getCanonicalName(),
+ description.getClassName(),
TEST_METHOD_NAME_1,
CONFIG_NAME_1,
StatsdListener.PROTO_EXTENSION),
@@ -250,7 +250,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
StatsdListener.REPORT_FILENAME_PREFIX,
- TEST_CLASS.getCanonicalName(),
+ description.getClassName(),
TEST_METHOD_NAME_1,
CONFIG_NAME_1,
StatsdListener.PROTO_EXTENSION));
@@ -262,7 +262,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
StatsdListener.REPORT_FILENAME_PREFIX,
- TEST_CLASS.getCanonicalName(),
+ description.getClassName(),
TEST_METHOD_NAME_1,
CONFIG_NAME_2,
StatsdListener.PROTO_EXTENSION),
@@ -276,7 +276,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
StatsdListener.REPORT_FILENAME_PREFIX,
- TEST_CLASS.getCanonicalName(),
+ description.getClassName(),
TEST_METHOD_NAME_1,
CONFIG_NAME_2,
StatsdListener.PROTO_EXTENSION));
@@ -310,7 +310,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_ROOT,
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
- TEST_CLASS.getCanonicalName(),
+ description1.getClassName(),
TEST_METHOD_NAME_1,
String.valueOf(1)));
@@ -329,7 +329,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_ROOT,
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
- TEST_CLASS.getCanonicalName(),
+ description2.getClassName(),
TEST_METHOD_NAME_2,
String.valueOf(1)));
@@ -363,7 +363,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_ROOT,
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
- TEST_CLASS.getCanonicalName(),
+ description1.getClassName(),
TEST_METHOD_NAME_1,
String.valueOf(1)));
@@ -383,7 +383,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_ROOT,
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
- TEST_CLASS.getCanonicalName(),
+ description2.getClassName(),
TEST_METHOD_NAME_1,
String.valueOf(2)));
@@ -420,7 +420,7 @@ public class StatsdListenerTest {
StatsdListener.REPORT_PATH_ROOT,
StatsdListener.REPORT_PATH_TEST_LEVEL)
.toString(),
- TEST_CLASS.getCanonicalName(),
+ testDescription.getClassName(),
TEST_METHOD_NAME_1,
String.valueOf(1)));
@@ -516,6 +516,21 @@ public class StatsdListenerTest {
verify(mListener, never()).removeStatsConfig(anyLong());
}
+ /**
+ * Test that the collector can work with arbitrarily constructed test descriptions.
+ *
+ * <p>This test was created as some runners will create new descriptions on the fly.
+ */
+ @Test
+ public void testArbitraryTestDescription() {
+ // Creates a description with no test class and method.
+ Description arbitraryDescription = Description.createSuiteDescription("some_test");
+
+ // The test passes if no exceptions are thrown in these callbacks.
+ mListener.onTestStart(mock(DataRecord.class), arbitraryDescription);
+ mListener.onTestEnd(mock(DataRecord.class), arbitraryDescription);
+ }
+
/** Returns a Mockito argument matcher that matches the exact file name. */
private File getExactFileNameMatcher(String parentName, String filename) {
return argThat(f -> f.getParent().contains(parentName) && f.getName().equals(filename));