Skip to content

Commit

Permalink
feat(adam): add intermediate TestRunFailing to identify failures in t…
Browse files Browse the repository at this point in the history
…est framework setup (#105)
  • Loading branch information
Malinskiy committed Jan 21, 2024
1 parent 2a54840 commit ac6af65
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ data class TestAssumptionFailed(val id: TestIdentifier, val stackTrace: String)
data class TestIgnored(val id: TestIdentifier) : TestEvent()
data class TestEnded(val id: TestIdentifier, val metrics: Map<String, String>) : TestEvent()
data class TestRunFailed(val error: String) : TestEvent()
data class TestRunFailing(val error: String, val stackTrace: String) : TestEvent()
data class TestRunStopped(val elapsedTimeMillis: Long) : TestEvent()
data class TestRunEnded(val elapsedTimeMillis: Long, val metrics: Map<String, String>) : TestEvent()
data class TestLogcat(val id: TestIdentifier, val log: String)
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.malinskiy.adam.request.testrunner.TestIdentifier
import com.malinskiy.adam.request.testrunner.TestIgnored
import com.malinskiy.adam.request.testrunner.TestRunEnded
import com.malinskiy.adam.request.testrunner.TestRunFailed
import com.malinskiy.adam.request.testrunner.TestRunFailing
import com.malinskiy.adam.request.testrunner.TestRunStartedEvent
import com.malinskiy.adam.request.testrunner.TestStarted
import com.malinskiy.adam.request.testrunner.model.Status
Expand Down Expand Up @@ -163,11 +164,16 @@ class InstrumentationResponseTransformer : ProgressiveResponseTransformer<List<T
val className = parameters["class"]
val testName = parameters["test"]
val stack = parameters["stack"]
if (className != null && testName != null && stack != null) {
val id = TestIdentifier(className, testName)
events.add(TestFailed(id, stack))
events.add(TestEnded(id, testMetrics))
testMetrics = linkedMapOf()
val stream = parameters["stream"]
if (stack != null) {
if (className != null && testName != null) {
val id = TestIdentifier(className, testName)
events.add(TestFailed(id, stack))
events.add(TestEnded(id, testMetrics))
testMetrics = linkedMapOf()
} else {
events.add(TestRunFailing(error = stream ?: "Unexpected failure during execution", stack))
}
}
testsExecuted += 1
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,4 +306,20 @@ class InstrumentationResponseTransformerTest {
assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
.isEqualTo(javaClass.getResourceAsStream("/instrumentation/log_12.expected").reader().readText().trimEnd())
}

@Test
fun missingListenerTest() = runBlocking {
val transformer = InstrumentationResponseTransformer()
val lines = javaClass.getResourceAsStream("/instrumentation/log_13.input").reader().readText()

val events = mutableListOf<TestEvent>()
val bytes = (lines).toByteArray(Const.DEFAULT_TRANSPORT_ENCODING)
transformer.process(bytes, 0, bytes.size)?.let {
events.addAll(it)
}
transformer.transform()?.let { events.addAll(it) }

assertThat(events.map { it.toString() }.reduce { acc, s -> acc + "\n" + s })
.isEqualTo(javaClass.getResourceAsStream("/instrumentation/log_13.expected").reader().readText().trimEnd())
}
}
38 changes: 38 additions & 0 deletions adam/src/test/resources/instrumentation/log_13.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
TestRunFailing(error=
Process crashed before executing the test(s):
java.lang.RuntimeException: Exception thrown in onCreate() of ComponentInfo{com.example.test/androidx.test.runner.AndroidJUnitRunner}: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6709)
at android.app.ActivityThread.access$1300(ActivityThread.java:237)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at androidx.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:620)
at androidx.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:547)
at androidx.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:282)
at androidx.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:393)
at androidx.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:302)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6704)
... 8 more, stackTrace=java.lang.RuntimeException: Exception thrown in onCreate() of ComponentInfo{com.example.test/androidx.test.runner.AndroidJUnitRunner}: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6709)
at android.app.ActivityThread.access$1300(ActivityThread.java:237)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at androidx.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:620)
at androidx.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:547)
at androidx.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:282)
at androidx.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:393)
at androidx.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:302)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6704)
... 8 more)
TestRunEnded(elapsedTimeMillis=0, metrics={})
43 changes: 43 additions & 0 deletions adam/src/test/resources/instrumentation/log_13.input
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
INSTRUMENTATION_STATUS: stack=java.lang.RuntimeException: Exception thrown in onCreate() of ComponentInfo{com.example.test/androidx.test.runner.AndroidJUnitRunner}: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6709)
at android.app.ActivityThread.access$1300(ActivityThread.java:237)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at androidx.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:620)
at androidx.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:547)
at androidx.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:282)
at androidx.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:393)
at androidx.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:302)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6704)
... 8 more

INSTRUMENTATION_STATUS: stream=
Process crashed before executing the test(s):
java.lang.RuntimeException: Exception thrown in onCreate() of ComponentInfo{com.example.test/androidx.test.runner.AndroidJUnitRunner}: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6709)
at android.app.ActivityThread.access$1300(ActivityThread.java:237)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalArgumentException: Could not find extra class com.malinskiy.adam.junit4.android.listener.TestAnnotationProducer
at androidx.test.internal.runner.RunnerArgs$Builder.loadClassByNameInstantiateAndAdd(RunnerArgs.java:620)
at androidx.test.internal.runner.RunnerArgs$Builder.parseLoadAndInstantiateClasses(RunnerArgs.java:547)
at androidx.test.internal.runner.RunnerArgs$Builder.fromBundle(RunnerArgs.java:282)
at androidx.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:393)
at androidx.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:302)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6704)
... 8 more

INSTRUMENTATION_STATUS_CODE: -2
INSTRUMENTATION_RESULT: shortMsg=Process crashed.
INSTRUMENTATION_CODE: 0

0 comments on commit ac6af65

Please sign in to comment.