Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bitfireAT/ical4android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunik Kupfer <kupfer@bitfire.at>2022-06-22 16:49:21 +0300
committerGitHub <noreply@github.com>2022-06-22 16:49:21 +0300
commit40618b8c2b018ee61e299c7587334f5fd4278552 (patch)
tree4986f54847ac769505d459928f1d06f243429d0b
parent4f89e82dfa6943706cc85dd6ee2ba9e944a59d3b (diff)
reduce number of rows in testLargeTransactionManyRows (closes bitfireAT/ical4android#42) (#44)
* update emulator test apks * extract large transaction test to BatchOperationTest * leave testLargeTransactionSplitting flaky and use 2000 attendees in a smaller test
-rw-r--r--.github/workflows/test-dev.yml6
-rw-r--r--src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt26
-rw-r--r--src/androidTest/java/at/bitfire/ical4android/BatchOperationTest.kt127
3 files changed, 135 insertions, 24 deletions
diff --git a/.github/workflows/test-dev.yml b/.github/workflows/test-dev.yml
index 00dc614..952942d 100644
--- a/.github/workflows/test-dev.yml
+++ b/.github/workflows/test-dev.yml
@@ -54,11 +54,11 @@ jobs:
run: |
mkdir apk && cd apk
wget -q -O org.dmfs.tasks.apk https://f-droid.org/archive/org.dmfs.tasks_80800.apk && adb install org.dmfs.tasks.apk
- wget -q -O org.tasks.apk https://f-droid.org/archive/org.tasks_110701.apk && adb install org.tasks.apk
- wget -q -O at.techbee.jtx.apk https://f-droid.org/repo/at.techbee.jtx_101010013.apk && adb install at.techbee.jtx.apk
+ wget -q -O org.tasks.apk https://f-droid.org/archive/org.tasks_120400.apk && adb install org.tasks.apk
+ wget -q -O at.techbee.jtx.apk https://f-droid.org/archive/at.techbee.jtx_100140002.apk && adb install at.techbee.jtx.apk
cd ..
- name: Run connected tests
- run: ./gradlew connectedCheck
+ run: ./gradlew connectedCheck -Pandroid.testInstrumentationRunnerArguments.notAnnotation=androidx.test.filters.FlakyTest
- name: Archive results
uses: actions/upload-artifact@v2
with:
diff --git a/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt b/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt
index baaabb5..5eb0bdc 100644
--- a/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt
+++ b/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt
@@ -2292,39 +2292,23 @@ class AndroidEventTest {
- @LargeTest
@Test
- fun testLargeTransactionManyRows() {
+ fun testTransaction() {
val event = Event()
- event.uid = "sample1@testLargeTransaction"
- event.summary = "Large event"
+ event.uid = "sample1@testTransaction"
+ event.summary = "an event"
event.dtStart = DtStart("20150502T120000Z")
event.dtEnd = DtEnd("20150502T130000Z")
- for (i in 0 until 4000)
+ for (i in 0 until 20)
event.attendees += Attendee(URI("mailto:att$i@example.com"))
val uri = TestEvent(calendar, event).add()
val testEvent = calendar.findById(ContentUris.parseId(uri))
try {
- assertEquals(4000, testEvent.event!!.attendees.size)
+ assertEquals(20, testEvent.event!!.attendees.size)
} finally {
testEvent.delete()
}
}
- @Test(expected = CalendarStorageException::class)
- fun testLargeTransactionSingleRow() {
- val event = Event()
- event.uid = "sample1@testLargeTransaction"
- event.dtStart = DtStart("20150502T120000Z")
- event.dtEnd = DtEnd("20150502T130000Z")
-
- // 1 MB SUMMARY ... have fun
- val data = CharArray(1024*1024)
- Arrays.fill(data, 'x')
- event.summary = String(data)
-
- TestEvent(calendar, event).add()
- }
-
}
diff --git a/src/androidTest/java/at/bitfire/ical4android/BatchOperationTest.kt b/src/androidTest/java/at/bitfire/ical4android/BatchOperationTest.kt
new file mode 100644
index 0000000..27debf5
--- /dev/null
+++ b/src/androidTest/java/at/bitfire/ical4android/BatchOperationTest.kt
@@ -0,0 +1,127 @@
+/***************************************************************************************************
+ * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
+ **************************************************************************************************/
+
+package at.bitfire.ical4android
+
+import android.Manifest
+import android.accounts.Account
+import android.content.ContentProviderClient
+import android.content.ContentUris
+import android.net.Uri
+import android.provider.CalendarContract
+import androidx.test.filters.FlakyTest
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.rule.GrantPermissionRule
+import at.bitfire.ical4android.MiscUtils.ContentProviderClientHelper.closeCompat
+import at.bitfire.ical4android.impl.TestCalendar
+import at.bitfire.ical4android.impl.TestEvent
+import net.fortuna.ical4j.model.property.Attendee
+import net.fortuna.ical4j.model.property.DtEnd
+import net.fortuna.ical4j.model.property.DtStart
+import org.junit.*
+import org.junit.Assert.*
+
+import java.net.URI
+import java.util.*
+
+class BatchOperationTest {
+
+ companion object {
+
+ @JvmField
+ @ClassRule
+ val permissionRule = GrantPermissionRule.grant(
+ Manifest.permission.READ_CALENDAR,
+ Manifest.permission.WRITE_CALENDAR
+ )
+
+ lateinit var provider: ContentProviderClient
+
+ @BeforeClass
+ @JvmStatic
+ fun connectProvider() {
+ provider = InstrumentationRegistry.getInstrumentation().targetContext.contentResolver.acquireContentProviderClient(CalendarContract.AUTHORITY)!!
+ }
+
+ @AfterClass
+ @JvmStatic
+ fun closeProvider() {
+ provider.closeCompat()
+ }
+
+ }
+
+ private val testAccount = Account("ical4android@example.com", CalendarContract.ACCOUNT_TYPE_LOCAL)
+
+ private lateinit var calendarUri: Uri
+ private lateinit var calendar: TestCalendar
+
+ @Before
+ fun prepare() {
+ System.gc()
+ calendar = TestCalendar.findOrCreate(testAccount, provider)
+ assertNotNull(calendar)
+ calendarUri = ContentUris.withAppendedId(CalendarContract.Calendars.CONTENT_URI, calendar.id)
+ }
+
+ @After
+ fun shutdown() {
+ calendar.delete()
+ System.gc()
+ }
+
+ @Test
+ fun testTransactionSplitting() {
+ val event = Event()
+ event.uid = "sample1@testLargeTransaction"
+ event.summary = "Large event"
+ event.dtStart = DtStart("20150502T120000Z")
+ event.dtEnd = DtEnd("20150502T130000Z")
+ for (i in 0 until 2000) // 2000 attendees are enough for a transaction split to happen
+ event.attendees += Attendee(URI("mailto:att$i@example.com"))
+ val uri = TestEvent(calendar, event).add()
+ val testEvent = calendar.findById(ContentUris.parseId(uri))
+ try {
+ assertEquals(2000, testEvent.event!!.attendees.size)
+ } finally {
+ testEvent.delete()
+ }
+ }
+
+ @FlakyTest
+ @Test
+ fun testLargeTransactionSplitting() {
+ // with 4000 attendees, this test has been observed to fail on the CI server docker emulator.
+ // Too many Binders are sent to SYSTEM (see issue #42). Asking for GC in @Before/@After might help.
+ val event = Event()
+ event.uid = "sample1@testLargeTransaction"
+ event.summary = "Large event"
+ event.dtStart = DtStart("20150502T120000Z")
+ event.dtEnd = DtEnd("20150502T130000Z")
+ for (i in 0 until 4000)
+ event.attendees += Attendee(URI("mailto:att$i@example.com"))
+ val uri = TestEvent(calendar, event).add()
+ val testEvent = calendar.findById(ContentUris.parseId(uri))
+ try {
+ assertEquals(4000, testEvent.event!!.attendees.size)
+ } finally {
+ testEvent.delete()
+ }
+ }
+
+ @Test(expected = CalendarStorageException::class)
+ fun testLargeTransactionSingleRow() {
+ val event = Event()
+ event.uid = "sample1@testLargeTransaction"
+ event.dtStart = DtStart("20150502T120000Z")
+ event.dtEnd = DtEnd("20150502T130000Z")
+
+ // 1 MB SUMMARY ... have fun
+ val data = CharArray(1024*1024)
+ Arrays.fill(data, 'x')
+ event.summary = String(data)
+
+ TestEvent(calendar, event).add()
+ }
+} \ No newline at end of file