Skip to content

Commit 55908f1

Browse files
committed
Update tests covering powersync-sqlite-core.
1 parent de5b7dd commit 55908f1

File tree

1 file changed

+94
-14
lines changed

1 file changed

+94
-14
lines changed

packages/powersync/test/bucket_storage_test.dart

Lines changed: 94 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -304,23 +304,10 @@ void main() {
304304
await bucketStorage.saveSyncData(SyncDataBatch([
305305
SyncBucketData(
306306
bucket: 'bucket1',
307-
data: [
308-
OplogEntry(
309-
opId: '1',
310-
op: OpType.move,
311-
checksum: 1,
312-
data: '{"target": "3"}')
313-
],
307+
data: [OplogEntry(opId: '1', op: OpType.move, checksum: 1)],
314308
),
315309
]));
316310

317-
// At this point, we have target: 3, but don't have that op yet, so we cannot sync.
318-
final result = await bucketStorage.syncLocalDatabase(Checkpoint(
319-
lastOpId: '2',
320-
checksums: [BucketChecksum(bucket: 'bucket1', checksum: 1)]));
321-
// Checksum passes, but we don't have a complete checkpoint
322-
expect(result, equals(SyncLocalDatabaseResult(ready: false)));
323-
324311
await bucketStorage.saveSyncData(SyncDataBatch([
325312
SyncBucketData(
326313
bucket: 'bucket1',
@@ -480,6 +467,99 @@ void main() {
480467
]));
481468
});
482469

470+
test('should compact with checksum wrapping', () async {
471+
await bucketStorage.saveSyncData(SyncDataBatch([
472+
SyncBucketData(bucket: 'bucket1', data: [
473+
OplogEntry(
474+
opId: '1',
475+
op: OpType.put,
476+
rowType: 'assets',
477+
rowId: 'O1',
478+
data: '{"description": "b1"}',
479+
checksum: 2147483647),
480+
OplogEntry(
481+
opId: '2',
482+
op: OpType.put,
483+
rowType: 'assets',
484+
rowId: 'O1',
485+
data: '{"description": "b2"}',
486+
checksum: 2147483646),
487+
OplogEntry(
488+
opId: '3',
489+
op: OpType.put,
490+
rowType: 'assets',
491+
rowId: 'O1',
492+
data: '{"description": "b3"}',
493+
checksum: 2147483645)
494+
])
495+
]));
496+
497+
await syncLocalChecked(Checkpoint(
498+
lastOpId: '4',
499+
writeCheckpoint: '4',
500+
checksums: [
501+
BucketChecksum(bucket: 'bucket1', checksum: 2147483642)
502+
]));
503+
504+
await bucketStorage.forceCompact();
505+
506+
await syncLocalChecked(Checkpoint(
507+
lastOpId: '4',
508+
writeCheckpoint: '4',
509+
checksums: [
510+
BucketChecksum(bucket: 'bucket1', checksum: 2147483642)
511+
]));
512+
513+
final stats = db.select(
514+
'SELECT row_type as type, row_id as id, count(*) as count FROM ps_oplog GROUP BY row_type, row_id ORDER BY row_type, row_id');
515+
expect(
516+
stats,
517+
equals([
518+
{'type': 'assets', 'id': 'O1', 'count': 1}
519+
]));
520+
});
521+
522+
test('should compact with checksum wrapping (2)', () async {
523+
await bucketStorage.saveSyncData(SyncDataBatch([
524+
SyncBucketData(bucket: 'bucket1', data: [
525+
OplogEntry(
526+
opId: '1',
527+
op: OpType.put,
528+
rowType: 'assets',
529+
rowId: 'O1',
530+
data: '{"description": "b1"}',
531+
checksum: 2147483647),
532+
OplogEntry(
533+
opId: '2',
534+
op: OpType.put,
535+
rowType: 'assets',
536+
rowId: 'O1',
537+
data: '{"description": "b2"}',
538+
checksum: 2147483646),
539+
])
540+
]));
541+
542+
await syncLocalChecked(Checkpoint(
543+
lastOpId: '4',
544+
writeCheckpoint: '4',
545+
checksums: [BucketChecksum(bucket: 'bucket1', checksum: -3)]));
546+
547+
await bucketStorage.forceCompact();
548+
549+
await syncLocalChecked(Checkpoint(
550+
lastOpId: '4',
551+
writeCheckpoint: '4',
552+
checksums: [BucketChecksum(bucket: 'bucket1', checksum: -3)]));
553+
554+
final stats = db.select(
555+
'SELECT row_type as type, row_id as id, count(*) as count FROM ps_oplog GROUP BY row_type, row_id ORDER BY row_type, row_id');
556+
expect(
557+
stats,
558+
equals([
559+
{'type': 'assets', 'id': 'O1', 'count': 1}
560+
]));
561+
});
562+
483563
test('should not sync local db with pending crud - server removed',
484564
() async {
485565
await bucketStorage.saveSyncData(SyncDataBatch([

0 commit comments

Comments
 (0)