maplibre / maplibre-native

MapLibre Native - Interactive vector tile maps for iOS, Android and other platforms.
https://maplibre.org
BSD 2-Clause "Simplified" License
1.07k stars 318 forks source link

Run Android Instrumentation Tests on AWS Device Farm #762

Closed louwers closed 1 year ago

louwers commented 1 year ago

We used to run Android Instrumentation tests for Android with Firebase, but we want to move it over to AWS Device Farm (#761).

@birkskyum is able to set up an IAM account that is linked to MapLibre.

When any secrets need to be set up, please send them to me in a secure way (e.g. Bitwarden send via Slack or PGP). I can add them to the repo.


Inside platform/android, the app with the UI tests can be built using

make android-ui-test-arm-v8

See the Makefile.

The old workflow (that will be removed soon) may also be helpful:

https://github.com/maplibre/maplibre-gl-native/blob/85e33f88b1386bddc63f340365bbb461e3f8b724/.github/workflows/android-ci.yml#L132

louwers commented 1 year ago

Pinging @thehoneymad since he said he knows some at AWS that is willing to jump on this. :rocket: :muscle:

louwers commented 1 year ago

https://github.com/realm/aws-devicefarm

louwers commented 1 year ago

I tried to run the Android instrumentation tests locally.

~I am getting several tests that fail with these assertion failures:~

Edit: this doesn't happen when I make sure my device is unlocked when I start the tests.

A few tests pass

image

But then the reopenQueryRendererFeaturesActivity crashes after which none of the remaining 648 tests run. Stack trace:

`lateinit property mapboxMap has not been initialized` ``` 02-18 17:17:06.706 27100 27127 I TestRunner: started: reopenQueryRendererFeaturesActivity(com.mapbox.mapboxsdk.integration.QueryRenderedFeaturesBoxCountTest) 02-18 17:17:06.710 5853 7161 W InputManager-JNI: Input channel object '8f38ee8 com.mapbox.mapboxsdk.testapp/com.mapbox.mapboxsdk.testapp.activity.maplayout.SimpleMapActivity (client)' was disposed without first being removed with the input manager! 02-18 17:17:06.717 5853 7161 W InputManager-JNI: Input channel object 'Letterbox_left_ActivityRecord{8f1cb76 u0 com.mapbox.mapboxsdk.testapp/.activity.maplayout.SimpleMapActivity t139} (client)' was disposed without first being removed with the input manager! 02-18 17:17:06.717 5853 7161 W InputManager-JNI: Input channel object 'Letterbox_top_ActivityRecord{8f1cb76 u0 com.mapbox.mapboxsdk.testapp/.activity.maplayout.SimpleMapActivity t139} (client)' was disposed without first being removed with the input manager! 02-18 17:17:06.718 5853 7161 W InputManager-JNI: Input channel object 'Letterbox_right_ActivityRecord{8f1cb76 u0 com.mapbox.mapboxsdk.testapp/.activity.maplayout.SimpleMapActivity t139} (client)' was disposed without first being removed with the input manager! 02-18 17:17:06.718 5853 7161 W InputManager-JNI: Input channel object 'Letterbox_bottom_ActivityRecord{8f1cb76 u0 com.mapbox.mapboxsdk.testapp/.activity.maplayout.SimpleMapActivity t139} (client)' was disposed without first being removed with the input manager! 02-18 17:17:06.722 27100 27127 I System.out: started: reopenQueryRendererFeaturesActivity (com.mapbox.mapboxsdk.integration.QueryRenderedFeaturesBoxCountTest) 02-18 17:17:06.723 27100 27127 W ActivityTestRule: getActivityIntent() returned null using default: Intent(Intent.ACTION_MAIN) 02-18 17:17:06.736 6104 6143 D SplashScreenView: Build android.window.SplashScreenView{1507711 V.E...... ......ID 0,0-0,0} 02-18 17:17:06.736 6104 6143 D SplashScreenView: Icon: view: null drawable: null size: 0 02-18 17:17:06.736 6104 6143 D SplashScreenView: Branding: view: android.view.View{bb01076 G.ED..... ......I. 0,0-0,0 #10204a9 android:id/splashscreen_branding_view} drawable: null size w: 0 h: 0 02-18 17:17:06.760 27100 27100 D LifecycleMonitor: Lifecycle status change: com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity@c468d61 in: PRE_ON_CREATE 02-18 17:17:06.777 27100 27100 D MapView : MapView constructed with context and attribute set 02-18 17:17:06.780 27100 27100 D LifecycleMonitor: Lifecycle status change: com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity@c468d61 in: CREATED 02-18 17:17:06.782 27100 27100 D AndroidRuntime: Shutting down VM 02-18 17:17:06.783 27100 27100 D MonitoringInstr: Handling an uncaught exception thrown on the thread main. 02-18 17:17:06.783 27100 27100 D MonitoringInstr: kotlin.UninitializedPropertyAccessException: lateinit property mapboxMap has not been initialized 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.getMapboxMap(QueryRenderedFeaturesBoxCountActivity.kt:23) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.onStart(QueryRenderedFeaturesBoxCountActivity.kt:92) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1467) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at androidx.test.runner.MonitoringInstrumentation.callActivityOnStart(MonitoringInstrumentation.java:791) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.Activity.performStart(Activity.java:8082) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3732) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.os.Handler.dispatchMessage(Handler.java:106) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.os.Looper.loopOnce(Looper.java:201) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.os.Looper.loop(Looper.java:288) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at android.app.ActivityThread.main(ActivityThread.java:7870) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at java.lang.reflect.Method.invoke(Native Method) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 02-18 17:17:06.783 27100 27100 D MonitoringInstr: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: An unhandled exception was thrown by the app. 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: kotlin.UninitializedPropertyAccessException: lateinit property mapboxMap has not been initialized 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.getMapboxMap(QueryRenderedFeaturesBoxCountActivity.kt:23) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.onStart(QueryRenderedFeaturesBoxCountActivity.kt:92) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1467) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at androidx.test.runner.MonitoringInstrumentation.callActivityOnStart(MonitoringInstrumentation.java:791) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.Activity.performStart(Activity.java:8082) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3732) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.os.Handler.dispatchMessage(Handler.java:106) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.os.Looper.loopOnce(Looper.java:201) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.os.Looper.loop(Looper.java:288) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at android.app.ActivityThread.main(ActivityThread.java:7870) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at java.lang.reflect.Method.invoke(Native Method) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 02-18 17:17:06.784 27100 27100 W AndroidJUnitRunner: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 02-18 17:17:06.785 27100 27100 D AndroidJUnitRunner: Reporting the crash to an event service. 02-18 17:17:06.785 27100 27100 W TestEventClient: Process crashed before connection to orchestrator 02-18 17:17:06.785 27100 27100 I AndroidJUnitRunner: Bringing down the entire Instrumentation process. 02-18 17:17:06.785 27100 27100 E MonitoringInstr: Exception encountered by: Thread[main,5,main]. Dumping thread state to outputs and pining for the fjords. 02-18 17:17:06.785 27100 27100 E MonitoringInstr: kotlin.UninitializedPropertyAccessException: lateinit property mapboxMap has not been initialized 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.getMapboxMap(QueryRenderedFeaturesBoxCountActivity.kt:23) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.onStart(QueryRenderedFeaturesBoxCountActivity.kt:92) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1467) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at androidx.test.runner.MonitoringInstrumentation.callActivityOnStart(MonitoringInstrumentation.java:791) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.Activity.performStart(Activity.java:8082) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3732) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.os.Handler.dispatchMessage(Handler.java:106) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.os.Looper.loopOnce(Looper.java:201) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.os.Looper.loop(Looper.java:288) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at android.app.ActivityThread.main(ActivityThread.java:7870) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at java.lang.reflect.Method.invoke(Native Method) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 02-18 17:17:06.785 27100 27100 E MonitoringInstr: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[LocalFileSource,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Profile Saver,5,system] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Binder:27100_4,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[FinalizerDaemon,5,system] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:442) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:190) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:211) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:273) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Daemons$Daemon.run(Daemons.java:139) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[FinalizerWatchdogDaemon,5,system] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:442) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:568) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:341) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:321) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Daemons$Daemon.run(Daemons.java:139) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Binder:27100_1,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Worker 4,10,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[LeakCanary-Heap-Dump,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.nativePollOnce(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.next(MessageQueue.java:335) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loopOnce(Looper.java:161) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loop(Looper.java:288) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.HandlerThread.run(HandlerThread.java:67) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Instr: com.mapbox.mapboxsdk.InstrumentationRunner,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: sun.misc.Unsafe.park(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.FutureTask.awaitDone(FutureTask.java:447) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.FutureTask.get(FutureTask.java:205) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:545) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.rule.ActivityTestRule.launchActivity(ActivityTestRule.java:376) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:541) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner.run(ParentRunner.java:413) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.Suite.runChild(Suite.java:128) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.Suite.runChild(Suite.java:27) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runners.ParentRunner.run(ParentRunner.java:413) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runner.JUnitCore.run(JUnitCore.java:137) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: org.junit.runner.JUnitCore.run(JUnitCore.java:115) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:67) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:58) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:446) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2278) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[OkHttp api.maptiler.com,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.net.SocketInputStream.socketRead0(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.net.SocketInputStream.socketRead(SocketInputStream.java:119) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.net.SocketInputStream.read(SocketInputStream.java:176) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.net.SocketInputStream.read(SocketInputStream.java:144) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:945) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:909) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readUntilDataAvailable(ConscryptEngineSocket.java:824) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:797) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okio.InputStreamSource.read(JvmOkio.kt:94) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okio.AsyncTimeout$source$1.read(AsyncTimeout.kt:125) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okio.RealBufferedSource.request(RealBufferedSource.kt:206) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okio.RealBufferedSource.require(RealBufferedSource.kt:199) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.http2.Http2Reader.nextFrame(Http2Reader.kt:89) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.http2.Http2Connection$ReaderRunnable.invoke(Http2Connection.kt:618) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.http2.Http2Connection$ReaderRunnable.invoke(Http2Connection.kt:609) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.concurrent.TaskQueue$execute$1.runOnce(TaskQueue.kt:98) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.concurrent.TaskRunner.runTask(TaskRunner.kt:116) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.concurrent.TaskRunner.access$runTask(TaskRunner.kt:42) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.kt:65) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[AssetManagerFil,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Worker 2,10,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Binder:27100_6,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[GLThread 758,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:442) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:568) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: com.mapbox.mapboxsdk.maps.renderer.glsurfaceview.MapboxGLSurfaceView$GLThread.guardedRun(MapboxGLSurfaceView.java:753) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: com.mapbox.mapboxsdk.maps.renderer.glsurfaceview.MapboxGLSurfaceView$GLThread.run(MapboxGLSurfaceView.java:568) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[DatabaseFileSou,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Jit thread pool worker thread 0,5,system] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[AsyncTask #1,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: sun.misc.Unsafe.park(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.locks.LockSupport.park(LockSupport.java:190) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:459) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Alarm,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Binder:27100_2,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[UiAutomation,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.nativePollOnce(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.next(MessageQueue.java:335) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loopOnce(Looper.java:161) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loop(Looper.java:288) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.HandlerThread.run(HandlerThread.java:67) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Worker 3,10,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[HeapTaskDaemon,5,system] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[ReferenceQueueDaemon,5,system] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:442) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:568) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:217) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Daemons$Daemon.run(Daemons.java:139) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Binder:27100_3,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[ResourceLoaderT,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[RenderThread,7,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[OkHttp Dispatcher,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: sun.misc.Unsafe.park(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[OkHttp TaskRunner,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.concurrent.TaskRunner$RealBackend.coordinatorWait(TaskRunner.kt:294) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.concurrent.TaskRunner.awaitTaskToRun(TaskRunner.kt:218) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.kt:59) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[MonitoringInstrumentation,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:442) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:568) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.app.Instrumentation.startActivitySync(Instrumentation.java:545) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.app.Instrumentation.startActivitySync(Instrumentation.java:483) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation.access$001(MonitoringInstrumentation.java:102) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation$4.call(MonitoringInstrumentation.java:540) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation$4.call(MonitoringInstrumentation.java:537) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.FutureTask.run(FutureTask.java:266) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Worker 1,10,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Worker 1,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[MBTilesFileSour,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[OkHttp Dispatcher,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: sun.misc.Unsafe.park(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.run(Thread.java:920) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[queued-work-looper,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.nativePollOnce(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.next(MessageQueue.java:335) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loopOnce(Looper.java:161) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loop(Looper.java:288) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.HandlerThread.run(HandlerThread.java:67) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[InstrumentationConnectionThread,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.nativePollOnce(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.MessageQueue.next(MessageQueue.java:335) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loopOnce(Looper.java:161) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.Looper.loop(Looper.java:288) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: android.os.HandlerThread.run(HandlerThread.java:67) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[OnlineFileSourc,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[main,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: dalvik.system.VMStack.getThreadStackTrace(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.getStackTrace(Thread.java:1724) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.getAllStackTraces(Thread.java:1800) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation.getThreadState(MonitoringInstrumentation.java:748) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation.dumpThreadStateToOutputs(MonitoringInstrumentation.java:743) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation.onException(MonitoringInstrumentation.java:737) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.AndroidJUnitRunner.onException(AndroidJUnitRunner.java:626) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: androidx.test.runner.MonitoringInstrumentation$3.uncaughtException(MonitoringInstrumentation.java:327) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Thread.dispatchUncaughtException(Thread.java:2200) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[hwuiTask1,6,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Signal Catcher,10,system] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Okio Watchdog,1,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Native Method) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: java.lang.Object.wait(Object.java:442) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okio.AsyncTimeout$Companion.awaitTimeout$okio(AsyncTimeout.kt:302) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: okio.AsyncTimeout$Watchdog.run(AsyncTimeout.kt:183) 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[hwuiTask0,6,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Binder:27100_7,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E THREAD_STATE: Thread[Binder:27100_5,5,main] 02-18 17:17:06.787 27100 27100 E THREAD_STATE: 02-18 17:17:06.787 27100 27100 E MonitoringInstr: Dying now... 02-18 17:17:06.787 27100 27100 W MonitoringInstr: Invoking default uncaught exception handler com.android.internal.os.RuntimeInit$KillApplicationHandler@2f5f1a5 (a class com.android.internal.os.RuntimeInit$KillApplicationHandler) 02-18 17:17:06.791 27100 27100 I Process : Sending signal. PID: 27100 SIG: 9 kotlin.UninitializedPropertyAccessException: lateinit property mapboxMap has not been initialized at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.getMapboxMap(QueryRenderedFeaturesBoxCountActivity.kt:23) at com.mapbox.mapboxsdk.testapp.activity.feature.QueryRenderedFeaturesBoxCountActivity.onStart(QueryRenderedFeaturesBoxCountActivity.kt:92) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1467) at androidx.test.runner.MonitoringInstrumentation.callActivityOnStart(MonitoringInstrumentation.java:791) at android.app.Activity.performStart(Activity.java:8082) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3732) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) ```
louwers commented 1 year ago

I created an issue for the crashing #822

louwers commented 1 year ago

A lot of successes now! (181 passed after 5m 25s).

But I am getting:

java.lang.IllegalArgumentException: Could not find layer Streets
at com.mapbox.mapboxsdk.maps.Style.getPredefinedStyle(Style.java:1430)

in visibleRotatedRegionBoundEqualTest now

Edit: Runs fine the second time somehow.

Edit2: animators_dontTiltWhileStopped is now the only failing test!

louwers commented 1 year ago

These tests take 2 hours to run on AWS Device Farm.

The price is also $0.17 per minute. I think I will schedule them to be run weekly.

wipfli commented 1 year ago

So one CI run costs USD 20 roughly?

louwers commented 1 year ago

So one CI run costs USD 20 roughly?

On a Google Pixel 7 Pro it ran through in one hour.

So then it's about $10. But we can purchase a device slot for $250 per month and I think should consider that instead (after it is up and running): https://aws.amazon.com/device-farm/pricing/

We have 1000 free minutes per month.

image