From 58281d2b7584302dc5ae375cd58b25eed91131b1 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 5 Jun 2020 16:59:08 +0200 Subject: [PATCH 01/22] run sample app and do not crash --- .github/workflows/emulator-sample-install.yml | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/emulator-sample-install.yml diff --git a/.github/workflows/emulator-sample-install.yml b/.github/workflows/emulator-sample-install.yml new file mode 100644 index 000000000..2c7b0a003 --- /dev/null +++ b/.github/workflows/emulator-sample-install.yml @@ -0,0 +1,45 @@ +name: Workflow Sample Install macOS +on: + push: + branches: + - master + pull_request: + branches: + - '*' + +env: + CMAKE_VERSION: "3.10.2.4988404" + +jobs: + build: + runs-on: macOS-10.15 + + steps: + - name: Git checkout + uses: actions/checkout@v2 + + # Zulu Community distribution of OpenJDK + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + + - name: set up sdkmanager and emulators + uses: malinskiy/action-android/install-sdk@release/0.0.7 + - run: adb devices + - run: echo $ANDROID_HOME + - run: sdkmanager --install "cmake;${CMAKE_VERSION}" + + - uses: malinskiy/action-android/emulator-run-cmd@release/0.0.7 + with: + cmd: ./gradlew installDebug + api: 25 + tag: default + abi: x86 + + - name: Save logcat output + uses: actions/upload-artifact@master + if: failure() + with: + name: logcat + path: artifacts/logcat.log From a000f1ccbc7752fc420bc4457e7cd525fac2043c Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 5 Jun 2020 17:03:24 +0200 Subject: [PATCH 02/22] wip --- .github/workflows/emulator-sample-install.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/emulator-sample-install.yml b/.github/workflows/emulator-sample-install.yml index 2c7b0a003..5df44c78a 100644 --- a/.github/workflows/emulator-sample-install.yml +++ b/.github/workflows/emulator-sample-install.yml @@ -26,8 +26,9 @@ jobs: - name: set up sdkmanager and emulators uses: malinskiy/action-android/install-sdk@release/0.0.7 - - run: adb devices - run: echo $ANDROID_HOME + - run: sdkmanager platform-tools + - run: adb devices - run: sdkmanager --install "cmake;${CMAKE_VERSION}" - uses: malinskiy/action-android/emulator-run-cmd@release/0.0.7 From 197368aefc4b75d21a91a23c8c0ef3961615e65b Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 5 Jun 2020 17:11:41 +0200 Subject: [PATCH 03/22] wip --- .github/workflows/emulator-sample-install.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/emulator-sample-install.yml b/.github/workflows/emulator-sample-install.yml index 5df44c78a..496bd6c40 100644 --- a/.github/workflows/emulator-sample-install.yml +++ b/.github/workflows/emulator-sample-install.yml @@ -9,6 +9,7 @@ on: env: CMAKE_VERSION: "3.10.2.4988404" + NDK_VERSION: "21.0.6113669" jobs: build: @@ -30,10 +31,11 @@ jobs: - run: sdkmanager platform-tools - run: adb devices - run: sdkmanager --install "cmake;${CMAKE_VERSION}" + - run: sdkmanager --install "ndk;${NDK_VERSION}" - uses: malinskiy/action-android/emulator-run-cmd@release/0.0.7 with: - cmd: ./gradlew installDebug + cmd: ./gradlew installDebug && adb shell am start -n io.sentry.sample/io.sentry.sample.MainActivity api: 25 tag: default abi: x86 From cd585d743a9ededdafc7798f0f2ccb1acef35295 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 5 Jun 2020 17:32:01 +0200 Subject: [PATCH 04/22] added make runsample --- .github/workflows/emulator-sample-install.yml | 4 +--- Makefile | 6 +++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/emulator-sample-install.yml b/.github/workflows/emulator-sample-install.yml index 496bd6c40..e5b396c98 100644 --- a/.github/workflows/emulator-sample-install.yml +++ b/.github/workflows/emulator-sample-install.yml @@ -27,15 +27,13 @@ jobs: - name: set up sdkmanager and emulators uses: malinskiy/action-android/install-sdk@release/0.0.7 - - run: echo $ANDROID_HOME - run: sdkmanager platform-tools - - run: adb devices - run: sdkmanager --install "cmake;${CMAKE_VERSION}" - run: sdkmanager --install "ndk;${NDK_VERSION}" - uses: malinskiy/action-android/emulator-run-cmd@release/0.0.7 with: - cmd: ./gradlew installDebug && adb shell am start -n io.sentry.sample/io.sentry.sample.MainActivity + cmd: make runsample api: 25 tag: default abi: x86 diff --git a/Makefile b/Makefile index 541d5ce08..0a91b7ef5 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: clean compile dryRelease doRelease release update stop +.PHONY: clean compile dryRelease doRelease release update stop runsample all: clean compile update dryRelease @@ -29,3 +29,7 @@ update: # don't contain any lock files and are free to be cached. stop: ./gradlew --stop + +# install and run sample on connected emulator/device +runsample: + ./gradlew installDebug && adb shell am start -n io.sentry.sample/io.sentry.sample.MainActivity From 057ef7c4cc3f3c1a8311ec2b78ef02ead45125bd Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 5 Jun 2020 17:55:58 +0200 Subject: [PATCH 05/22] adding sleep hack --- .github/workflows/emulator-sample-install.yml | 2 +- Makefile | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/emulator-sample-install.yml b/.github/workflows/emulator-sample-install.yml index e5b396c98..51ff6fec3 100644 --- a/.github/workflows/emulator-sample-install.yml +++ b/.github/workflows/emulator-sample-install.yml @@ -33,7 +33,7 @@ jobs: - uses: malinskiy/action-android/emulator-run-cmd@release/0.0.7 with: - cmd: make runsample + cmd: make runSample api: 25 tag: default abi: x86 diff --git a/Makefile b/Makefile index 0a91b7ef5..e547abf0b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: clean compile dryRelease doRelease release update stop runsample +.PHONY: clean compile dryRelease doRelease release update stop installSample startSample runSample sleepHack all: clean compile update dryRelease @@ -31,5 +31,16 @@ stop: ./gradlew --stop # install and run sample on connected emulator/device -runsample: - ./gradlew installDebug && adb shell am start -n io.sentry.sample/io.sentry.sample.MainActivity +installSample: + ./gradlew installDebug + +# start sample using adb start +startSample: + adb shell am start -n io.sentry.sample/io.sentry.sample.MainActivity + +# hack for sleeping 10 seconds, so emulator won't get killed asap +sleepHack: + sleep 10 + +# install debug mode, run with adb and wait for 10 seconds +runSample: installSample startSample sleepHack From 37178241da7f754829fa584688a8337251f3c58b Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 5 Jun 2020 18:14:49 +0200 Subject: [PATCH 06/22] just a test --- sentry-sample/src/main/AndroidManifest.xml | 4 ++-- .../src/main/java/io/sentry/sample/MainActivity.java | 6 +++++- .../src/main/java/io/sentry/sample/MyApplication.java | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sentry-sample/src/main/AndroidManifest.xml b/sentry-sample/src/main/AndroidManifest.xml index d5b63fa71..08543ea42 100644 --- a/sentry-sample/src/main/AndroidManifest.xml +++ b/sentry-sample/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + @@ -60,7 +60,7 @@ - + diff --git a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java index 54839356a..9ad000697 100644 --- a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java +++ b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java @@ -16,7 +16,7 @@ protected void onCreate(Bundle savedInstanceState) { ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater()); - Timber.i("Sentry.isEnabled() = %s", Sentry.isEnabled()); +// Timber.i("Sentry.isEnabled() = %s", Sentry.isEnabled()); binding.crashFromJava.setOnClickListener( view -> { @@ -62,5 +62,9 @@ protected void onCreate(Bundle savedInstanceState) { }); setContentView(binding.getRoot()); + + new Thread(() -> { + throw new RuntimeException("Test from a thread."); + }).start(); } } diff --git a/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java b/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java index 61e05ba63..777269919 100644 --- a/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java +++ b/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java @@ -2,7 +2,7 @@ import android.app.Application; import android.os.StrictMode; -import timber.log.Timber; +//import timber.log.Timber; // import io.sentry.android.core.SentryAndroid; @@ -14,7 +14,7 @@ public void onCreate() { strictMode(); super.onCreate(); - Timber.plant(new Timber.DebugTree()); +// Timber.plant(new Timber.DebugTree()); // Example how to initialize the SDK manually which allows access to SentryOptions callbacks. // Make sure you disable the auto init via manifest meta-data: io.sentry.auto-init=false From 26dd8b78d1605b83abbe4a96774fa08eb2add93c Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 5 Jun 2020 19:19:16 +0200 Subject: [PATCH 07/22] run some ui tests --- Makefile | 4 +-- sentry-sample/build.gradle.kts | 5 ++++ .../java/io/sentry/sample/MainActivityTest.kt | 27 +++++++++++++++++++ .../java/io/sentry/sample/MainActivity.java | 6 +---- 4 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt diff --git a/Makefile b/Makefile index e547abf0b..f068c944a 100644 --- a/Makefile +++ b/Makefile @@ -36,11 +36,11 @@ installSample: # start sample using adb start startSample: - adb shell am start -n io.sentry.sample/io.sentry.sample.MainActivity + adb shell am instrument -w -r -e debug false -e class 'io.sentry.sample.MainActivityTest' io.sentry.sample.test/androidx.test.runner.AndroidJUnitRunner # hack for sleeping 10 seconds, so emulator won't get killed asap sleepHack: - sleep 10 + sleep 5 # install debug mode, run with adb and wait for 10 seconds runSample: installSample startSample sleepHack diff --git a/sentry-sample/build.gradle.kts b/sentry-sample/build.gradle.kts index d7073c252..9b451e7cc 100644 --- a/sentry-sample/build.gradle.kts +++ b/sentry-sample/build.gradle.kts @@ -32,6 +32,7 @@ android { setAbiFilters(Config.Android.abiFilters) ndkVersion = Config.Android.ndkVersion } + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildFeatures { @@ -104,5 +105,9 @@ dependencies { // debugging purpose implementation(Config.Libs.timber) + androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0") + androidTestImplementation(Config.TestLibs.androidxRunner) + androidTestImplementation(Config.TestLibs.androidxJunit) + androidTestImplementation("androidx.test:rules:1.2.0") debugImplementation(Config.Libs.leakCanary) } diff --git a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt new file mode 100644 index 000000000..e19d0d874 --- /dev/null +++ b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt @@ -0,0 +1,27 @@ +package io.sentry.sample + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.filters.LargeTest +import androidx.test.rule.ActivityTestRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@LargeTest +@RunWith(AndroidJUnit4::class) +class MainActivityTest { + + @Rule + @JvmField + var mActivityTestRule = ActivityTestRule(MainActivity::class.java) + + @Test + fun mainActivityTest() { + onView(withId(R.id.send_message)).perform(click()) + onView(withId(R.id.native_capture)).perform(click()) + onView(withId(R.id.breadcrumb)).perform(click()) + } +} diff --git a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java index 9ad000697..7043bd53a 100644 --- a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java +++ b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java @@ -6,7 +6,7 @@ import io.sentry.core.protocol.User; import io.sentry.sample.databinding.ActivityMainBinding; import java.util.Collections; -import timber.log.Timber; +//import timber.log.Timber; public class MainActivity extends AppCompatActivity { @@ -62,9 +62,5 @@ protected void onCreate(Bundle savedInstanceState) { }); setContentView(binding.getRoot()); - - new Thread(() -> { - throw new RuntimeException("Test from a thread."); - }).start(); } } From a8570e8b6e3b48f59dd71ae2cf0e2eb004d2df8f Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Sat, 6 Jun 2020 09:31:33 +0200 Subject: [PATCH 08/22] add run connected --- .github/workflows/emulator-sample-install.yml | 2 +- Makefile | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/emulator-sample-install.yml b/.github/workflows/emulator-sample-install.yml index 51ff6fec3..52f384e9e 100644 --- a/.github/workflows/emulator-sample-install.yml +++ b/.github/workflows/emulator-sample-install.yml @@ -33,7 +33,7 @@ jobs: - uses: malinskiy/action-android/emulator-run-cmd@release/0.0.7 with: - cmd: make runSample + cmd: make runConnected api: 25 tag: default abi: x86 diff --git a/Makefile b/Makefile index f068c944a..316cd6444 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: clean compile dryRelease doRelease release update stop installSample startSample runSample sleepHack +.PHONY: clean compile dryRelease doRelease release update stop installSample startSample runSample sleepHack runConnected all: clean compile update dryRelease @@ -44,3 +44,7 @@ sleepHack: # install debug mode, run with adb and wait for 10 seconds runSample: installSample startSample sleepHack + +# run connectedCheck +runConnected: + ./gradlew connectedCheck From 92b404617864f242be990c0065d9cd24a7d706c4 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Sat, 6 Jun 2020 10:24:45 +0200 Subject: [PATCH 09/22] fix --- Makefile | 16 +++++------ buildSrc/src/main/java/Config.kt | 4 +-- sentry-sample/build.gradle.kts | 15 ++++++++-- .../java/io/sentry/sample/MainActivityTest.kt | 28 +++++++++++++++---- .../java/io/sentry/sample/MainActivity.java | 5 ++-- .../java/io/sentry/sample/MyApplication.java | 5 ++-- 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 316cd6444..8e5de354f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: clean compile dryRelease doRelease release update stop installSample startSample runSample sleepHack runConnected +.PHONY: clean compile dryRelease doRelease release update stop runConnected all: clean compile update dryRelease @@ -31,19 +31,19 @@ stop: ./gradlew --stop # install and run sample on connected emulator/device -installSample: - ./gradlew installDebug +#installSample: +# ./gradlew installDebug # start sample using adb start -startSample: - adb shell am instrument -w -r -e debug false -e class 'io.sentry.sample.MainActivityTest' io.sentry.sample.test/androidx.test.runner.AndroidJUnitRunner +#startSample: +# adb shell am instrument -w -r -e debug false -e class 'io.sentry.sample.MainActivityTest' io.sentry.sample.test/androidx.test.runner.AndroidJUnitRunner # hack for sleeping 10 seconds, so emulator won't get killed asap -sleepHack: - sleep 5 +#sleepHack: +# sleep 5 # install debug mode, run with adb and wait for 10 seconds -runSample: installSample startSample sleepHack +#runSample: installSample startSample sleepHack # run connectedCheck runConnected: diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index c33d9e78a..8d77785d3 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -33,12 +33,12 @@ object Config { } object TestLibs { - private val androidxTestVersion = "1.2.0" + private val androidxTestVersion = "1.3.0-rc01" val kotlinTestJunit = "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion" val androidxCore = "androidx.test:core:$androidxTestVersion" val androidxRunner = "androidx.test:runner:$androidxTestVersion" - val androidxJunit = "androidx.test.ext:junit:1.1.1" + val androidxJunit = "androidx.test.ext:junit:1.1.2-rc01" val robolectric = "org.robolectric:robolectric:4.3.1" val mockitoKotlin = "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0" val awaitility = "org.awaitility:awaitility-kotlin:4.0.3" diff --git a/sentry-sample/build.gradle.kts b/sentry-sample/build.gradle.kts index 9b451e7cc..7c5df481f 100644 --- a/sentry-sample/build.gradle.kts +++ b/sentry-sample/build.gradle.kts @@ -88,6 +88,10 @@ android { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } } dependencies { @@ -105,9 +109,16 @@ dependencies { // debugging purpose implementation(Config.Libs.timber) - androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0") + androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0-rc01") androidTestImplementation(Config.TestLibs.androidxRunner) androidTestImplementation(Config.TestLibs.androidxJunit) - androidTestImplementation("androidx.test:rules:1.2.0") + androidTestImplementation("androidx.test:rules:1.3.0-rc01") + androidTestImplementation("androidx.test:core-ktx:1.3.0-rc01") + androidTestImplementation("androidx.test.ext:junit-ktx:1.1.2-rc01") debugImplementation(Config.Libs.leakCanary) + androidTestImplementation(Config.TestLibs.awaitility) { + exclude(group = "org.hamcrest", module = "hamcrest-core") + exclude(group = "org.hamcrest", module = "hamcrest-library") + exclude(group = "org.hamcrest", module = "hamcrest") + } } diff --git a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt index e19d0d874..a8b0f10d5 100644 --- a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt +++ b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt @@ -3,9 +3,13 @@ package io.sentry.sample import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.matcher.ViewMatchers.withId -import androidx.test.filters.LargeTest -import androidx.test.rule.ActivityTestRule +import androidx.test.ext.junit.rules.activityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import java.util.Timer +import java.util.concurrent.atomic.AtomicBoolean +import kotlin.concurrent.schedule +import org.awaitility.kotlin.await import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -14,14 +18,28 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class MainActivityTest { - @Rule - @JvmField - var mActivityTestRule = ActivityTestRule(MainActivity::class.java) +// @Rule +// @JvmField +// var mActivityTestRule = ActivityTestRule(MainActivity::class.java) + + @get:Rule + val rule = activityScenarioRule() @Test fun mainActivityTest() { +// val scenario = launchActivity() +// val scenario = rule.scenario + onView(withId(R.id.send_message)).perform(click()) onView(withId(R.id.native_capture)).perform(click()) onView(withId(R.id.breadcrumb)).perform(click()) + + val wait5s = AtomicBoolean(false) + Timer(true).schedule(5000) { + wait5s.set(true) + } + + // little waiting time for getting events processed + await.untilTrue(wait5s) } } diff --git a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java index 7043bd53a..d24b68014 100644 --- a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java +++ b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java @@ -6,7 +6,8 @@ import io.sentry.core.protocol.User; import io.sentry.sample.databinding.ActivityMainBinding; import java.util.Collections; -//import timber.log.Timber; + +// import timber.log.Timber; public class MainActivity extends AppCompatActivity { @@ -16,7 +17,7 @@ protected void onCreate(Bundle savedInstanceState) { ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater()); -// Timber.i("Sentry.isEnabled() = %s", Sentry.isEnabled()); + // Timber.i("Sentry.isEnabled() = %s", Sentry.isEnabled()); binding.crashFromJava.setOnClickListener( view -> { diff --git a/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java b/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java index 777269919..cfe3c71c4 100644 --- a/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java +++ b/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java @@ -2,7 +2,8 @@ import android.app.Application; import android.os.StrictMode; -//import timber.log.Timber; + +// import timber.log.Timber; // import io.sentry.android.core.SentryAndroid; @@ -14,7 +15,7 @@ public void onCreate() { strictMode(); super.onCreate(); -// Timber.plant(new Timber.DebugTree()); + // Timber.plant(new Timber.DebugTree()); // Example how to initialize the SDK manually which allows access to SentryOptions callbacks. // Make sure you disable the auto init via manifest meta-data: io.sentry.auto-init=false From b6c4edc66fca9d1a3342da4286e5b8a71c3de99d Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Sat, 6 Jun 2020 11:00:31 +0200 Subject: [PATCH 10/22] test --- sentry-sample/build.gradle.kts | 8 ++++++++ .../java/io/sentry/sample/MainActivityTest.kt | 10 +++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/sentry-sample/build.gradle.kts b/sentry-sample/build.gradle.kts index 7c5df481f..41b0fa573 100644 --- a/sentry-sample/build.gradle.kts +++ b/sentry-sample/build.gradle.kts @@ -33,6 +33,9 @@ android { ndkVersion = Config.Android.ndkVersion } testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + + // because of coreLibraryDesugaring + multiDexEnabled = true } buildFeatures { @@ -87,6 +90,8 @@ android { compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 + // because of ChronoUnit API 25 + coreLibraryDesugaringEnabled = true } kotlinOptions { @@ -121,4 +126,7 @@ dependencies { exclude(group = "org.hamcrest", module = "hamcrest-library") exclude(group = "org.hamcrest", module = "hamcrest") } + + // because of coreLibraryDesugaringEnabled + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.5") } diff --git a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt index a8b0f10d5..b9186dfa8 100644 --- a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt +++ b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt @@ -18,27 +18,23 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class MainActivityTest { -// @Rule -// @JvmField -// var mActivityTestRule = ActivityTestRule(MainActivity::class.java) - @get:Rule val rule = activityScenarioRule() @Test fun mainActivityTest() { -// val scenario = launchActivity() -// val scenario = rule.scenario - onView(withId(R.id.send_message)).perform(click()) onView(withId(R.id.native_capture)).perform(click()) onView(withId(R.id.breadcrumb)).perform(click()) val wait5s = AtomicBoolean(false) + + // Didn't find class "java.time.temporal.ChronoUnit" throws API 25 Timer(true).schedule(5000) { wait5s.set(true) } + // might be possible to replace with https://developer.android.com/training/testing/espresso/idling-resource // little waiting time for getting events processed await.untilTrue(wait5s) } From a7a5f925fc3af16c02afa1366a05225d9817fec8 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Sat, 6 Jun 2020 11:24:43 +0200 Subject: [PATCH 11/22] wip --- sentry-sample/build.gradle.kts | 6 +++--- .../java/io/sentry/sample/MainActivityTest.kt | 13 ++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sentry-sample/build.gradle.kts b/sentry-sample/build.gradle.kts index 41b0fa573..1cb07b571 100644 --- a/sentry-sample/build.gradle.kts +++ b/sentry-sample/build.gradle.kts @@ -35,7 +35,7 @@ android { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" // because of coreLibraryDesugaring - multiDexEnabled = true +// multiDexEnabled = true } buildFeatures { @@ -91,7 +91,7 @@ android { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 // because of ChronoUnit API 25 - coreLibraryDesugaringEnabled = true +// coreLibraryDesugaringEnabled = true } kotlinOptions { @@ -128,5 +128,5 @@ dependencies { } // because of coreLibraryDesugaringEnabled - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.5") +// coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.5") } diff --git a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt index b9186dfa8..27cc23350 100644 --- a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt +++ b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt @@ -7,12 +7,13 @@ import androidx.test.ext.junit.rules.activityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest import java.util.Timer -import java.util.concurrent.atomic.AtomicBoolean +//import java.util.concurrent.atomic.AtomicBoolean import kotlin.concurrent.schedule -import org.awaitility.kotlin.await +//import org.awaitility.kotlin.await import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import java.util.concurrent.CountDownLatch @LargeTest @RunWith(AndroidJUnit4::class) @@ -27,15 +28,17 @@ class MainActivityTest { onView(withId(R.id.native_capture)).perform(click()) onView(withId(R.id.breadcrumb)).perform(click()) - val wait5s = AtomicBoolean(false) +// val wait5s = AtomicBoolean(false) + val count = CountDownLatch(1) // Didn't find class "java.time.temporal.ChronoUnit" throws API 25 Timer(true).schedule(5000) { - wait5s.set(true) + count.countDown() } // might be possible to replace with https://developer.android.com/training/testing/espresso/idling-resource // little waiting time for getting events processed - await.untilTrue(wait5s) +// await.untilTrue(wait5s) + count.await() } } From 39792851530a954204096027e408271f362b6fea Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Sat, 6 Jun 2020 11:42:08 +0200 Subject: [PATCH 12/22] test --- sentry-sample/build.gradle.kts | 13 ------------- .../java/io/sentry/sample/MainActivityTest.kt | 7 +------ 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/sentry-sample/build.gradle.kts b/sentry-sample/build.gradle.kts index 1cb07b571..1eef070cf 100644 --- a/sentry-sample/build.gradle.kts +++ b/sentry-sample/build.gradle.kts @@ -33,9 +33,6 @@ android { ndkVersion = Config.Android.ndkVersion } testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - - // because of coreLibraryDesugaring -// multiDexEnabled = true } buildFeatures { @@ -90,8 +87,6 @@ android { compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 - // because of ChronoUnit API 25 -// coreLibraryDesugaringEnabled = true } kotlinOptions { @@ -121,12 +116,4 @@ dependencies { androidTestImplementation("androidx.test:core-ktx:1.3.0-rc01") androidTestImplementation("androidx.test.ext:junit-ktx:1.1.2-rc01") debugImplementation(Config.Libs.leakCanary) - androidTestImplementation(Config.TestLibs.awaitility) { - exclude(group = "org.hamcrest", module = "hamcrest-core") - exclude(group = "org.hamcrest", module = "hamcrest-library") - exclude(group = "org.hamcrest", module = "hamcrest") - } - - // because of coreLibraryDesugaringEnabled -// coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.5") } diff --git a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt index 27cc23350..fcc775cac 100644 --- a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt +++ b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt @@ -7,13 +7,11 @@ import androidx.test.ext.junit.rules.activityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest import java.util.Timer -//import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.CountDownLatch import kotlin.concurrent.schedule -//import org.awaitility.kotlin.await import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import java.util.concurrent.CountDownLatch @LargeTest @RunWith(AndroidJUnit4::class) @@ -28,17 +26,14 @@ class MainActivityTest { onView(withId(R.id.native_capture)).perform(click()) onView(withId(R.id.breadcrumb)).perform(click()) -// val wait5s = AtomicBoolean(false) val count = CountDownLatch(1) - // Didn't find class "java.time.temporal.ChronoUnit" throws API 25 Timer(true).schedule(5000) { count.countDown() } // might be possible to replace with https://developer.android.com/training/testing/espresso/idling-resource // little waiting time for getting events processed -// await.untilTrue(wait5s) count.await() } } From a61957119d639e6c553d2a35908f6a17fd896388 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Sat, 6 Jun 2020 12:05:13 +0200 Subject: [PATCH 13/22] cleaning --- .github/workflows/emulator-sample-install.yml | 22 ++++++++++++++++++- Makefile | 21 +++--------------- buildSrc/src/main/java/Config.kt | 4 ++++ sentry-sample/build.gradle.kts | 8 +++---- .../java/io/sentry/sample/MainActivityTest.kt | 3 ++- sentry-sample/src/main/AndroidManifest.xml | 4 ++-- 6 files changed, 36 insertions(+), 26 deletions(-) diff --git a/.github/workflows/emulator-sample-install.yml b/.github/workflows/emulator-sample-install.yml index 52f384e9e..e92db204d 100644 --- a/.github/workflows/emulator-sample-install.yml +++ b/.github/workflows/emulator-sample-install.yml @@ -25,6 +25,21 @@ jobs: with: java-version: 1.8 + + # use sequential key when bumping dependencies till single lock file is out of preview + # https://docs.gradle.org/current/userguide/dependency_locking.html#single_lock_file_per_project + - name: Cache Gradle Caches + uses: actions/cache@v1 + with: + path: ~/.gradle/caches/ + key: cache-gradle-cache-1 + + - name: Cache Gradle Wrapper + uses: actions/cache@v1 + with: + path: ~/.gradle/wrapper/ + key: cache-gradle-wrapper-1 + - name: set up sdkmanager and emulators uses: malinskiy/action-android/install-sdk@release/0.0.7 - run: sdkmanager platform-tools @@ -33,7 +48,7 @@ jobs: - uses: malinskiy/action-android/emulator-run-cmd@release/0.0.7 with: - cmd: make runConnected + cmd: make runConnectedTests api: 25 tag: default abi: x86 @@ -44,3 +59,8 @@ jobs: with: name: logcat path: artifacts/logcat.log + + # We stop gradle at the end to make sure the cache folders + # don't contain any lock files and are free to be cached. + - name: Make stop + run: make stop diff --git a/Makefile b/Makefile index 8e5de354f..90e53c09a 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: clean compile dryRelease doRelease release update stop runConnected +.PHONY: clean compile dryRelease doRelease release update stop runConnectedTests all: clean compile update dryRelease @@ -30,21 +30,6 @@ update: stop: ./gradlew --stop -# install and run sample on connected emulator/device -#installSample: -# ./gradlew installDebug - -# start sample using adb start -#startSample: -# adb shell am instrument -w -r -e debug false -e class 'io.sentry.sample.MainActivityTest' io.sentry.sample.test/androidx.test.runner.AndroidJUnitRunner - -# hack for sleeping 10 seconds, so emulator won't get killed asap -#sleepHack: -# sleep 5 - -# install debug mode, run with adb and wait for 10 seconds -#runSample: installSample startSample sleepHack - # run connectedCheck -runConnected: - ./gradlew connectedCheck +runConnectedTests: + ./gradlew connectedDebugAndroidTest diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 8d77785d3..0c8ce7db7 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -39,6 +39,10 @@ object Config { val androidxCore = "androidx.test:core:$androidxTestVersion" val androidxRunner = "androidx.test:runner:$androidxTestVersion" val androidxJunit = "androidx.test.ext:junit:1.1.2-rc01" + val androidxRules = "androidx.test:rules:1.3.0-rc01" + val androidxCoreKtx = "androidx.test:core-ktx:1.3.0-rc01" + val androidxJunitKtx = "androidx.test.ext:junit-ktx:1.1.2-rc01" + val espressoCore = "androidx.test.espresso:espresso-core:3.3.0-rc01" val robolectric = "org.robolectric:robolectric:4.3.1" val mockitoKotlin = "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0" val awaitility = "org.awaitility:awaitility-kotlin:4.0.3" diff --git a/sentry-sample/build.gradle.kts b/sentry-sample/build.gradle.kts index 1eef070cf..443f541e0 100644 --- a/sentry-sample/build.gradle.kts +++ b/sentry-sample/build.gradle.kts @@ -109,11 +109,11 @@ dependencies { // debugging purpose implementation(Config.Libs.timber) - androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0-rc01") + androidTestImplementation(Config.TestLibs.espressoCore) androidTestImplementation(Config.TestLibs.androidxRunner) androidTestImplementation(Config.TestLibs.androidxJunit) - androidTestImplementation("androidx.test:rules:1.3.0-rc01") - androidTestImplementation("androidx.test:core-ktx:1.3.0-rc01") - androidTestImplementation("androidx.test.ext:junit-ktx:1.1.2-rc01") + androidTestImplementation(Config.TestLibs.androidxRules) + androidTestImplementation(Config.TestLibs.androidxCoreKtx) + androidTestImplementation(Config.TestLibs.androidxJunitKtx) debugImplementation(Config.Libs.leakCanary) } diff --git a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt index fcc775cac..aa071de5f 100644 --- a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt +++ b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt @@ -23,8 +23,9 @@ class MainActivityTest { @Test fun mainActivityTest() { onView(withId(R.id.send_message)).perform(click()) - onView(withId(R.id.native_capture)).perform(click()) + onView(withId(R.id.capture_exception)).perform(click()) onView(withId(R.id.breadcrumb)).perform(click()) + onView(withId(R.id.native_capture)).perform(click()) val count = CountDownLatch(1) diff --git a/sentry-sample/src/main/AndroidManifest.xml b/sentry-sample/src/main/AndroidManifest.xml index 08543ea42..d5b63fa71 100644 --- a/sentry-sample/src/main/AndroidManifest.xml +++ b/sentry-sample/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + @@ -60,7 +60,7 @@ - + From c598bfb6f93ca33dd02dc8c5c8cff171c3bd0047 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Sat, 6 Jun 2020 12:29:42 +0200 Subject: [PATCH 14/22] test --- buildSrc/src/main/java/Config.kt | 1 - sentry-sample/build.gradle.kts | 4 +- .../java/io/sentry/sample/MainActivityTest.kt | 2 +- .../java/io/sentry/sample/MainActivity.java | 16 ++-- .../java/io/sentry/sample/MyApplication.java | 2 - .../src/main/res/layout/activity_main.xml | 74 ++++++++++--------- 6 files changed, 49 insertions(+), 50 deletions(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 0c8ce7db7..2fc6a822b 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -22,7 +22,6 @@ object Config { object Libs { val appCompat = "androidx.appcompat:appcompat:1.1.0" - val timber = "com.jakewharton.timber:timber:4.7.1" // only bump gson if https://github.com/google/gson/issues/1597 is fixed val gson = "com.google.code.gson:gson:2.8.5" val leakCanary = "com.squareup.leakcanary:leakcanary-android:2.3" diff --git a/sentry-sample/build.gradle.kts b/sentry-sample/build.gradle.kts index 443f541e0..c9f71623e 100644 --- a/sentry-sample/build.gradle.kts +++ b/sentry-sample/build.gradle.kts @@ -107,13 +107,13 @@ dependencies { implementation(Config.Libs.appCompat) - // debugging purpose - implementation(Config.Libs.timber) androidTestImplementation(Config.TestLibs.espressoCore) androidTestImplementation(Config.TestLibs.androidxRunner) androidTestImplementation(Config.TestLibs.androidxJunit) androidTestImplementation(Config.TestLibs.androidxRules) androidTestImplementation(Config.TestLibs.androidxCoreKtx) androidTestImplementation(Config.TestLibs.androidxJunitKtx) + + // debugging purpose debugImplementation(Config.Libs.leakCanary) } diff --git a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt index aa071de5f..22b9db381 100644 --- a/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt +++ b/sentry-sample/src/androidTest/java/io/sentry/sample/MainActivityTest.kt @@ -29,7 +29,7 @@ class MainActivityTest { val count = CountDownLatch(1) - Timer(true).schedule(5000) { + Timer(true).schedule(10000) { count.countDown() } diff --git a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java index d24b68014..5acf6c506 100644 --- a/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java +++ b/sentry-sample/src/main/java/io/sentry/sample/MainActivity.java @@ -5,9 +5,6 @@ import io.sentry.core.Sentry; import io.sentry.core.protocol.User; import io.sentry.sample.databinding.ActivityMainBinding; -import java.util.Collections; - -// import timber.log.Timber; public class MainActivity extends AppCompatActivity { @@ -17,8 +14,6 @@ protected void onCreate(Bundle savedInstanceState) { ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater()); - // Timber.i("Sentry.isEnabled() = %s", Sentry.isEnabled()); - binding.crashFromJava.setOnClickListener( view -> { throw new RuntimeException("Uncaught Exception from Java."); @@ -35,13 +30,12 @@ protected void onCreate(Bundle savedInstanceState) { view -> { Sentry.addBreadcrumb("Breadcrumb"); Sentry.setExtra("extra", "extra"); - Sentry.setFingerprint(Collections.singletonList("fingerprint")); Sentry.setTransaction("transaction"); User user = new User(); user.setUsername("username"); Sentry.setUser(user); Sentry.setTag("tag", "tag"); - Sentry.captureException(new Exception("Some exception with scope.")); + Sentry.captureException(new Exception("Some exception with scope and breadcrumbs.")); }); binding.nativeCrash.setOnClickListener(view -> NativeSample.crash()); @@ -50,13 +44,13 @@ protected void onCreate(Bundle savedInstanceState) { binding.anr.setOnClickListener( view -> { - // Try cause ANR by blocking for 2.5 seconds. - // By default the SDK sends an event if blocked by at least 4 seconds. - // The time was configurable (see manifest) to 1 second for demo purposes. + // Try cause ANR by blocking for 10 seconds. + // By default the SDK sends an event if blocked by at least 5 seconds. + // you must keep clicking on the UI, so OS will detect that the UI is not responding. // NOTE: By default it doesn't raise if the debugger is attached. That can also be // configured. try { - Thread.sleep(2500); + Thread.sleep(10000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } diff --git a/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java b/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java index cfe3c71c4..2ae51f94d 100644 --- a/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java +++ b/sentry-sample/src/main/java/io/sentry/sample/MyApplication.java @@ -3,8 +3,6 @@ import android.app.Application; import android.os.StrictMode; -// import timber.log.Timber; - // import io.sentry.android.core.SentryAndroid; /** Apps. main Application. */ diff --git a/sentry-sample/src/main/res/layout/activity_main.xml b/sentry-sample/src/main/res/layout/activity_main.xml index ed6a22103..6ad003ae5 100644 --- a/sentry-sample/src/main/res/layout/activity_main.xml +++ b/sentry-sample/src/main/res/layout/activity_main.xml @@ -1,43 +1,51 @@ + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + tools:context=".MainActivity"> -