Skip to content

Commit 81b0c7a

Browse files
committed
Report sync download progress
1 parent 91b90e9 commit 81b0c7a

File tree

12 files changed

+645
-161
lines changed

12 files changed

+645
-161
lines changed

core/build.gradle.kts

+4-1
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,10 @@ androidComponents.onVariants {
321321
}
322322

323323
tasks.named<ProcessResources>(kotlin.jvm().compilations["main"].processResourcesTaskName) {
324-
from(downloadPowersyncDesktopBinaries)
324+
//from(downloadPowersyncDesktopBinaries)
325+
from("/Users/simon/src/powersync-sqlite-core/target/debug/libpowersync.dylib") {
326+
rename { "libpowersync_aarch64.dylib" }
327+
}
325328
}
326329

327330
// We want to build with recent JDKs, but need to make sure we support Java 8. https://jakewharton.com/build-on-latest-java-test-through-lowest-java/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.powersync.sync
2+
3+
import co.touchlab.kermit.ExperimentalKermitApi
4+
import co.touchlab.kermit.Logger
5+
import co.touchlab.kermit.Severity
6+
import co.touchlab.kermit.TestConfig
7+
import co.touchlab.kermit.TestLogWriter
8+
import com.powersync.PowerSyncDatabase
9+
import com.powersync.connectors.PowerSyncBackendConnector
10+
import com.powersync.connectors.PowerSyncCredentials
11+
import com.powersync.db.PowerSyncDatabaseImpl
12+
import com.powersync.db.schema.Schema
13+
import com.powersync.testutils.MockSyncService
14+
import com.powersync.testutils.UserRow
15+
import com.powersync.testutils.cleanup
16+
import com.powersync.testutils.factory
17+
import com.powersync.testutils.generatePrintLogWriter
18+
import dev.mokkery.answering.returns
19+
import dev.mokkery.everySuspend
20+
import dev.mokkery.mock
21+
import kotlinx.coroutines.CoroutineScope
22+
import kotlinx.coroutines.channels.Channel
23+
import kotlinx.coroutines.flow.receiveAsFlow
24+
import kotlinx.coroutines.runBlocking
25+
import kotlinx.serialization.json.JsonObject
26+
import kotlin.test.AfterTest
27+
import kotlin.test.BeforeTest
28+
29+
@OptIn(ExperimentalKermitApi::class)
30+
abstract class BaseInMemorySyncTest {
31+
val logWriter =
32+
TestLogWriter(
33+
loggable = Severity.Debug,
34+
)
35+
36+
val logger =
37+
Logger(
38+
TestConfig(
39+
minSeverity = Severity.Debug,
40+
logWriterList = listOf(logWriter, generatePrintLogWriter()),
41+
),
42+
)
43+
internal lateinit var database: PowerSyncDatabaseImpl
44+
internal lateinit var connector: PowerSyncBackendConnector
45+
internal lateinit var syncLines: Channel<SyncLine>
46+
47+
@BeforeTest
48+
fun setup() {
49+
cleanup("testdb")
50+
logWriter.reset()
51+
database = openDb()
52+
connector =
53+
mock<PowerSyncBackendConnector> {
54+
everySuspend { getCredentialsCached() } returns
55+
PowerSyncCredentials(
56+
token = "test-token",
57+
userId = "test-user",
58+
endpoint = "https://test.com",
59+
)
60+
61+
everySuspend { invalidateCredentials() } returns Unit
62+
}
63+
syncLines = Channel()
64+
65+
runBlocking {
66+
database.disconnectAndClear(true)
67+
}
68+
}
69+
70+
@AfterTest
71+
fun teardown() {
72+
runBlocking {
73+
database.close()
74+
}
75+
cleanup("testdb")
76+
}
77+
78+
internal fun openDb() =
79+
PowerSyncDatabase(
80+
factory = factory,
81+
schema = Schema(UserRow.table),
82+
dbFilename = "testdb",
83+
) as PowerSyncDatabaseImpl
84+
85+
internal fun CoroutineScope.syncStream(): SyncStream {
86+
val client = MockSyncService.client(this, syncLines.receiveAsFlow())
87+
return SyncStream(
88+
bucketStorage = database.bucketStorage,
89+
connector = connector,
90+
httpEngine = client,
91+
uploadCrud = { },
92+
retryDelayMs = 10,
93+
logger = logger,
94+
params = JsonObject(emptyMap()),
95+
)
96+
}
97+
}

core/src/commonIntegrationTest/kotlin/com/powersync/SyncIntegrationTest.kt renamed to core/src/commonIntegrationTest/kotlin/com/powersync/sync/SyncIntegrationTest.kt

+5-92
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,30 @@
1-
package com.powersync
1+
package com.powersync.sync
22

33
import app.cash.turbine.turbineScope
4-
import co.touchlab.kermit.ExperimentalKermitApi
54
import co.touchlab.kermit.Logger
6-
import co.touchlab.kermit.Severity
7-
import co.touchlab.kermit.TestConfig
8-
import co.touchlab.kermit.TestLogWriter
5+
import com.powersync.PowerSyncDatabase
96
import com.powersync.bucket.BucketChecksum
107
import com.powersync.bucket.BucketPriority
118
import com.powersync.bucket.Checkpoint
129
import com.powersync.bucket.OpType
1310
import com.powersync.bucket.OplogEntry
14-
import com.powersync.connectors.PowerSyncBackendConnector
15-
import com.powersync.connectors.PowerSyncCredentials
1611
import com.powersync.db.PowerSyncDatabaseImpl
1712
import com.powersync.db.schema.Schema
18-
import com.powersync.sync.SyncLine
19-
import com.powersync.sync.SyncStream
20-
import com.powersync.testutils.MockSyncService
2113
import com.powersync.testutils.UserRow
22-
import com.powersync.testutils.cleanup
2314
import com.powersync.testutils.factory
24-
import com.powersync.testutils.generatePrintLogWriter
2515
import com.powersync.testutils.waitFor
2616
import com.powersync.utils.JsonUtil
27-
import dev.mokkery.answering.returns
28-
import dev.mokkery.everySuspend
29-
import dev.mokkery.mock
30-
import kotlinx.coroutines.CoroutineScope
31-
import kotlinx.coroutines.channels.Channel
32-
import kotlinx.coroutines.flow.receiveAsFlow
33-
import kotlinx.coroutines.runBlocking
3417
import kotlinx.coroutines.test.runTest
3518
import kotlinx.serialization.encodeToString
36-
import kotlinx.serialization.json.JsonObject
37-
import kotlin.test.AfterTest
38-
import kotlin.test.BeforeTest
3919
import kotlin.test.Test
4020
import kotlin.test.assertEquals
4121
import kotlin.test.assertFalse
4222
import kotlin.test.assertNotNull
4323
import kotlin.test.assertTrue
4424
import kotlin.time.Duration.Companion.seconds
4525

46-
@OptIn(ExperimentalKermitApi::class)
47-
class SyncIntegrationTest {
48-
private val logWriter =
49-
TestLogWriter(
50-
loggable = Severity.Debug,
51-
)
52-
53-
private val logger =
54-
Logger(
55-
TestConfig(
56-
minSeverity = Severity.Debug,
57-
logWriterList = listOf(logWriter, generatePrintLogWriter()),
58-
),
59-
)
60-
private lateinit var database: PowerSyncDatabaseImpl
61-
private lateinit var connector: PowerSyncBackendConnector
62-
private lateinit var syncLines: Channel<SyncLine>
63-
64-
@BeforeTest
65-
fun setup() {
66-
cleanup("testdb")
67-
logWriter.reset()
68-
database = openDb()
69-
connector =
70-
mock<PowerSyncBackendConnector> {
71-
everySuspend { getCredentialsCached() } returns
72-
PowerSyncCredentials(
73-
token = "test-token",
74-
userId = "test-user",
75-
endpoint = "https://test.com",
76-
)
77-
78-
everySuspend { invalidateCredentials() } returns Unit
79-
}
80-
syncLines = Channel()
81-
82-
runBlocking {
83-
database.disconnectAndClear(true)
84-
}
85-
}
86-
87-
@AfterTest
88-
fun teardown() {
89-
runBlocking {
90-
database.close()
91-
}
92-
cleanup("testdb")
93-
}
94-
95-
private fun openDb() =
96-
PowerSyncDatabase(
97-
factory = factory,
98-
schema = Schema(UserRow.table),
99-
dbFilename = "testdb",
100-
) as PowerSyncDatabaseImpl
101-
102-
private fun CoroutineScope.syncStream(): SyncStream {
103-
val client = MockSyncService.client(this, syncLines.receiveAsFlow())
104-
return SyncStream(
105-
bucketStorage = database.bucketStorage,
106-
connector = connector,
107-
httpEngine = client,
108-
uploadCrud = { },
109-
retryDelayMs = 10,
110-
logger = logger,
111-
params = JsonObject(emptyMap()),
112-
)
113-
}
114-
26+
@OptIn(co.touchlab.kermit.ExperimentalKermitApi::class)
27+
class SyncIntegrationTest: BaseInMemorySyncTest() {
11528
private suspend fun expectUserCount(amount: Int) {
11629
val users = database.getAll("SELECT * FROM users;") { UserRow.from(it) }
11730
assertEquals(amount, users.size, "Expected $amount users, got $users")
@@ -466,4 +379,4 @@ class SyncIntegrationTest {
466379
database.close()
467380
syncLines.close()
468381
}
469-
}
382+
}

0 commit comments

Comments
 (0)