android-test icon indicating copy to clipboard operation
android-test copied to clipboard

Instrumented test results outputs nothing when test collection failed(process crashed) with AndroidX test orchestrator

Open ZSmallX opened this issue 2 years ago • 4 comments

Description

My code changes caused exception at Application.onCreate(), and instrumented tests run via AndroidX test orchestrator.

execution command line like:

// prepare AndroidX test orchestrator
....

adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / androidx.test.services.shellexecutor.ShellMain am instrument -w -r -e coverageFilePath coverage_files/ -e useTestStorage true -e coverage true -e clearPackageData true -e targetInstrumentation com.mypackage.test/androidx.test.runner.AndroidJUnitRunner androidx.test.orchestrator/.AndroidTestOrchestrator'
INSTRUMENTATION_RESULT: stream=

Time: 0

OK (0 tests)


INSTRUMENTATION_CODE: 0

And there is one details file at adb shell run-as androidx.test.orchestrator cat /data/user_de/0/androidx.test.orchestrator/files/testCollection.txt.

INSTRUMENTATION_STATUS: stack=java.io.FileNotFoundException: my_data.json
	at android.content.res.AssetManager.nativeOpenAsset(Native Method)
	at android.content.res.AssetManager.open(AssetManager.java:824)
	at android.content.res.AssetManager.open(AssetManager.java:801)
	at ...
	at com.mypackage.test.ShellApplication.onCreate(ShellApplication.kt:73)
	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1189)
	at androidx.test.runner.MonitoringInstrumentation.callApplicationOnCreate(MonitoringInstrumentation.java:483)
	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6460)
	at android.app.ActivityThread.access$1300(ActivityThread.java:219)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
	at android.os.Handler.dispatchMessage(Handler.java:107)
	at android.os.Looper.loop(Looper.java:214)
	at android.app.ActivityThread.main(ActivityThread.java:7356)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

INSTRUMENTATION_STATUS: stream=
Process crashed before executing the test(s):
java.io.FileNotFoundException: my_data.json
	at android.content.res.AssetManager.nativeOpenAsset(Native Method)
	at android.content.res.AssetManager.open(AssetManager.java:824)
	at android.content.res.AssetManager.open(AssetManager.java:801)
	at ....
	at com.mypackage.test.ShellApplication.onCreate(ShellApplication.kt:73)
	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1189)
	at androidx.test.runner.MonitoringInstrumentation.callApplicationOnCreate(MonitoringInstrumentation.java:483)
	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6460)
	at android.app.ActivityThread.access$1300(ActivityThread.java:219)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
	at android.os.Handler.dispatchMessage(Handler.java:107)
	at android.os.Looper.loop(Looper.java:214)
	at android.app.ActivityThread.main(ActivityThread.java:7356)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

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

Steps to Reproduce

  1. raise exception at Application.onCreate().
  2. run tests using AndroidX test orchestrator.

Expected Results

See process crashed details in instrumented tests results outputs to indicate test failure.

Actual Results

No process crashed details in instrumented tests results outputs and indicate test success.

AndroidX Test and Android OS Versions

Android API Level 29 AndroidX Test Orchestrator 1.4.2

Link to a public git repo demonstrating the problem:

None currently.

ZSmallX avatar Jun 14 '23 03:06 ZSmallX

Looks like that when collectTests was exeuted in a runnable and wait for Android JUnit Runner to addTest to CallbackLogic.

But in process crashed case, the remote Android JUnit Runner was unabled to call addTest, so the test == null and callbackLogic.allTests.isEmpty == true. Then nothing shows up or is presented.

// callback with empty tests. https://cs.android.com/androidx/android-test/+/master:runner/android_test_orchestrator/java/androidx/test/orchestrator/AndroidTestOrchestrator.java;l=294;bpv=0;bpt=0

// collectTests. https://cs.android.com/androidx/android-test/+/master:runner/android_test_orchestrator/java/androidx/test/orchestrator/AndroidTestOrchestrator.java;l=265;bpv=0;bpt=0

ZSmallX avatar Jun 14 '23 03:06 ZSmallX

@ZSmallX - Your explanation looks reasonable but I'm having difficulty reproducing. Would you mind sharing a sample project with a repro?

ananci avatar Jun 15 '23 19:06 ananci

@ZSmallX - Your explanation looks reasonable but I'm having difficulty reproducing. Would you mind sharing a sample project with a repro?

@ananci Yeah, here is the repro https://github.com/ZSmallX/android_test_issue_1834

And by this repro, I can get the expected test results when running from IDE, and can not when running from command line.

image

image

ZSmallX avatar Jun 17 '23 04:06 ZSmallX

any update on this?

Kazmierz avatar Aug 23 '24 12:08 Kazmierz