@powersync/service-core-tests 0.0.0-dev-20241219091224

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +67 -0
  3. package/README.md +5 -0
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.js +5 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/test-utils/bucket-validation.d.ts +42 -0
  8. package/dist/test-utils/bucket-validation.js +115 -0
  9. package/dist/test-utils/bucket-validation.js.map +1 -0
  10. package/dist/test-utils/general-utils.d.ts +31 -0
  11. package/dist/test-utils/general-utils.js +81 -0
  12. package/dist/test-utils/general-utils.js.map +1 -0
  13. package/dist/test-utils/stream_utils.d.ts +6 -0
  14. package/dist/test-utils/stream_utils.js +37 -0
  15. package/dist/test-utils/stream_utils.js.map +1 -0
  16. package/dist/test-utils/test-utils-index.d.ts +3 -0
  17. package/dist/test-utils/test-utils-index.js +4 -0
  18. package/dist/test-utils/test-utils-index.js.map +1 -0
  19. package/dist/tests/register-bucket-validation-tests.d.ts +10 -0
  20. package/dist/tests/register-bucket-validation-tests.js +139 -0
  21. package/dist/tests/register-bucket-validation-tests.js.map +1 -0
  22. package/dist/tests/register-compacting-tests.d.ts +14 -0
  23. package/dist/tests/register-compacting-tests.js +343 -0
  24. package/dist/tests/register-compacting-tests.js.map +1 -0
  25. package/dist/tests/register-data-storage-tests.d.ts +14 -0
  26. package/dist/tests/register-data-storage-tests.js +1571 -0
  27. package/dist/tests/register-data-storage-tests.js.map +1 -0
  28. package/dist/tests/register-sync-tests.d.ts +11 -0
  29. package/dist/tests/register-sync-tests.js +538 -0
  30. package/dist/tests/register-sync-tests.js.map +1 -0
  31. package/dist/tests/tests-index.d.ts +4 -0
  32. package/dist/tests/tests-index.js +5 -0
  33. package/dist/tests/tests-index.js.map +1 -0
  34. package/package.json +28 -0
  35. package/src/index.ts +5 -0
  36. package/src/test-utils/bucket-validation.ts +120 -0
  37. package/src/test-utils/general-utils.ts +113 -0
  38. package/src/test-utils/stream_utils.ts +42 -0
  39. package/src/test-utils/test-utils-index.ts +4 -0
  40. package/src/tests/register-bucket-validation-tests.ts +148 -0
  41. package/src/tests/register-compacting-tests.ts +297 -0
  42. package/src/tests/register-data-storage-tests.ts +1552 -0
  43. package/src/tests/register-sync-tests.ts +521 -0
  44. package/src/tests/tests-index.ts +4 -0
  45. package/tsconfig.json +34 -0
  46. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-sync-tests.js","sourceRoot":"","sources":["../../src/tests/register-sync-tests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './register-bucket-validation-tests.js';
2
+ export * from './register-compacting-tests.js';
3
+ export * from './register-data-storage-tests.js';
4
+ export * from './register-sync-tests.js';
@@ -0,0 +1,5 @@
1
+ export * from './register-bucket-validation-tests.js';
2
+ export * from './register-compacting-tests.js';
3
+ export * from './register-data-storage-tests.js';
4
+ export * from './register-sync-tests.js';
5
+ //# sourceMappingURL=tests-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tests-index.js","sourceRoot":"","sources":["../../src/tests/tests-index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@powersync/service-core-tests",
3
+ "repository": "https://github.com/powersync-ja/powersync-service",
4
+ "types": "dist/index.d.ts",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "version": "0.0.0-dev-20241219091224",
9
+ "main": "dist/index.js",
10
+ "license": "FSL-1.1-Apache-2.0",
11
+ "type": "module",
12
+ "dependencies": {
13
+ "@powersync/service-core": "^0.0.0-dev-20241219091224",
14
+ "@powersync/service-jsonbig": "^0.17.10",
15
+ "@powersync/service-sync-rules": "^0.0.0-dev-20241219091224"
16
+ },
17
+ "peerDependencies": {
18
+ "vite-tsconfig-paths": "^4.3.2",
19
+ "vitest": "^2.1.1"
20
+ },
21
+ "devDependencies": {
22
+ "typescript": "^5.6.2"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc -b",
26
+ "clean": "rm -rf ./dist && tsc -b --clean"
27
+ }
28
+ }
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './test-utils/test-utils-index.js';
2
+ export * as test_utils from './test-utils/test-utils-index.js';
3
+
4
+ export * from './tests/tests-index.js';
5
+ export * as register from './tests/tests-index.js';
@@ -0,0 +1,120 @@
1
+ import { utils } from '@powersync/service-core';
2
+ import { expect } from 'vitest';
3
+
4
+ /**
5
+ * Reduce a bucket to the final state as stored on the client.
6
+ *
7
+ * This keeps the final state for each row as a PUT operation.
8
+ *
9
+ * All other operations are replaced with a single CLEAR operation,
10
+ * summing their checksums, and using a 0 as an op_id.
11
+ *
12
+ * This is the function $r(B)$, as described in /docs/bucket-properties.md.
13
+ */
14
+ export function reduceBucket(operations: utils.OplogEntry[]) {
15
+ let rowState = new Map<string, utils.OplogEntry>();
16
+ let otherChecksum = 0;
17
+
18
+ for (let op of operations) {
19
+ const key = rowKey(op);
20
+ if (op.op == 'PUT') {
21
+ const existing = rowState.get(key);
22
+ if (existing) {
23
+ otherChecksum = utils.addChecksums(otherChecksum, existing.checksum as number);
24
+ }
25
+ rowState.set(key, op);
26
+ } else if (op.op == 'REMOVE') {
27
+ const existing = rowState.get(key);
28
+ if (existing) {
29
+ otherChecksum = utils.addChecksums(otherChecksum, existing.checksum as number);
30
+ }
31
+ rowState.delete(key);
32
+ otherChecksum = utils.addChecksums(otherChecksum, op.checksum as number);
33
+ } else if (op.op == 'CLEAR') {
34
+ rowState.clear();
35
+ otherChecksum = op.checksum as number;
36
+ } else if (op.op == 'MOVE') {
37
+ otherChecksum = utils.addChecksums(otherChecksum, op.checksum as number);
38
+ } else {
39
+ throw new Error(`Unknown operation ${op.op}`);
40
+ }
41
+ }
42
+
43
+ const puts = [...rowState.values()].sort((a, b) => {
44
+ return Number(BigInt(a.op_id) - BigInt(b.op_id));
45
+ });
46
+
47
+ let finalState: utils.OplogEntry[] = [
48
+ // Special operation to indiciate the checksum remainder
49
+ { op_id: '0', op: 'CLEAR', checksum: otherChecksum },
50
+ ...puts
51
+ ];
52
+
53
+ return finalState;
54
+ }
55
+
56
+ function rowKey(entry: utils.OplogEntry) {
57
+ return `${entry.object_type}/${entry.object_id}/${entry.subkey}`;
58
+ }
59
+
60
+ /**
61
+ import { OplogEntry } from '@/util/protocol-types.js';
62
+ import { reduceBucket } from '@/util/utils.js';
63
+ import { expect } from 'vitest';
64
+
65
+ /**
66
+ * Validate this property, as described in /docs/bucket-properties.md:
67
+ *
68
+ * $r(B_{[..id_n]}) = r(r(B_{[..id_i]}) \cup B_{[id_{i+1}..id_n]}) \;\forall\; i \in [1..n]$
69
+ *
70
+ * We test that a client syncing the entire bucket in one go (left side of the equation),
71
+ * ends up with the same result as another client syncing up to operation id_i, then sync
72
+ * the rest.
73
+ */
74
+ export function validateBucket(bucket: utils.OplogEntry[]) {
75
+ const r1 = reduceBucket(bucket);
76
+ for (let i = 0; i <= bucket.length; i++) {
77
+ const r2 = reduceBucket(bucket.slice(0, i + 1));
78
+ const b3 = bucket.slice(i + 1);
79
+ const r3 = r2.concat(b3);
80
+ const r4 = reduceBucket(r3);
81
+ expect(r4).toEqual(r1);
82
+ }
83
+
84
+ // This is the same check, just implemented differently
85
+ validateCompactedBucket(bucket, bucket);
86
+ }
87
+
88
+ /**
89
+ * Validate these properties for a bucket $B$ and its compacted version $B'$,:
90
+ * as described in /docs/bucket-properties.md:
91
+ *
92
+ * 1. $r(B) = r(B')$
93
+ * 2. $r(B_{[..c]}) = r(r(B_{[..c_i]}) \cup B'_{[c_i+1..c]}) \;\forall\; c_i \in B$
94
+ *
95
+ * The first one is that the result of syncing the original bucket is the same as
96
+ * syncing the compacted bucket.
97
+ *
98
+ * The second property is that result of syncing the entire original bucket, is the same
99
+ * as syncing any partial version of that (up to op $c_i$), and then continue syncing
100
+ * using the compacted bucket.
101
+ */
102
+ export function validateCompactedBucket(bucket: utils.OplogEntry[], compacted: utils.OplogEntry[]) {
103
+ // r(B_{[..c]})
104
+ const r1 = reduceBucket(bucket);
105
+ // r(B) = r(B')
106
+ expect(reduceBucket(compacted)).toEqual(r1);
107
+
108
+ for (let i = 0; i < bucket.length; i++) {
109
+ // r(B_{[..c_i]})
110
+ const r2 = reduceBucket(bucket.slice(0, i + 1));
111
+ const c_i = BigInt(bucket[i].op_id);
112
+ // B'_{[c_i+1..c]}
113
+ const b3 = compacted.filter((op) => BigInt(op.op_id) > c_i);
114
+ // r(B_{[..c_i]}) \cup B'_{[c_i+1..c]}
115
+ const r3 = r2.concat(b3);
116
+ // r(r(B_{[..c_i]}) \cup B'_{[c_i+1..c]})
117
+ const r4 = reduceBucket(r3);
118
+ expect(r4).toEqual(r1);
119
+ }
120
+ }
@@ -0,0 +1,113 @@
1
+ import { storage, utils } from '@powersync/service-core';
2
+ import { SqlSyncRules } from '@powersync/service-sync-rules';
3
+ import * as bson from 'bson';
4
+
5
+ export interface StorageOptions {
6
+ /**
7
+ * By default, collections are only cleared/
8
+ * Setting this to true will drop the collections completely.
9
+ */
10
+ dropAll?: boolean;
11
+
12
+ doNotClear?: boolean;
13
+ }
14
+ export type StorageFactory = (options?: StorageOptions) => Promise<storage.BucketStorageFactory>;
15
+
16
+ export const ZERO_LSN = '0/0';
17
+
18
+ export const PARSE_OPTIONS: storage.ParseSyncRulesOptions = {
19
+ defaultSchema: 'public'
20
+ };
21
+
22
+ export const BATCH_OPTIONS: storage.StartBatchOptions = {
23
+ ...PARSE_OPTIONS,
24
+ zeroLSN: ZERO_LSN,
25
+ storeCurrentData: true
26
+ };
27
+
28
+ export function testRules(content: string): storage.PersistedSyncRulesContent {
29
+ return {
30
+ id: 1,
31
+ sync_rules_content: content,
32
+ slot_name: 'test',
33
+ parsed(options) {
34
+ return {
35
+ id: 1,
36
+ sync_rules: SqlSyncRules.fromYaml(content, options),
37
+ slot_name: 'test'
38
+ };
39
+ },
40
+ lock() {
41
+ throw new Error('Not implemented');
42
+ }
43
+ };
44
+ }
45
+
46
+ export function makeTestTable(name: string, columns?: string[] | undefined) {
47
+ const relId = utils.hashData('table', name, (columns ?? ['id']).join(','));
48
+ const id = new bson.ObjectId('6544e3899293153fa7b38331');
49
+ return new storage.SourceTable(
50
+ id,
51
+ storage.SourceTable.DEFAULT_TAG,
52
+ relId,
53
+ 'public',
54
+ name,
55
+ (columns ?? ['id']).map((column) => ({ name: column, type: 'VARCHAR', typeId: 25 })),
56
+ true
57
+ );
58
+ }
59
+
60
+ export function getBatchData(
61
+ batch: utils.SyncBucketData[] | storage.SyncBucketDataBatch[] | storage.SyncBucketDataBatch
62
+ ) {
63
+ const first = getFirst(batch);
64
+ if (first == null) {
65
+ return [];
66
+ }
67
+ return first.data.map((d) => {
68
+ return {
69
+ op_id: d.op_id,
70
+ op: d.op,
71
+ object_id: d.object_id,
72
+ checksum: d.checksum
73
+ };
74
+ });
75
+ }
76
+
77
+ export function getBatchMeta(
78
+ batch: utils.SyncBucketData[] | storage.SyncBucketDataBatch[] | storage.SyncBucketDataBatch
79
+ ) {
80
+ const first = getFirst(batch);
81
+ if (first == null) {
82
+ return null;
83
+ }
84
+ return {
85
+ has_more: first.has_more,
86
+ after: first.after,
87
+ next_after: first.next_after
88
+ };
89
+ }
90
+
91
+ function getFirst(
92
+ batch: utils.SyncBucketData[] | storage.SyncBucketDataBatch[] | storage.SyncBucketDataBatch
93
+ ): utils.SyncBucketData | null {
94
+ if (!Array.isArray(batch)) {
95
+ return batch.batch;
96
+ }
97
+ if (batch.length == 0) {
98
+ return null;
99
+ }
100
+ let first = batch[0];
101
+ if ((first as storage.SyncBucketDataBatch).batch != null) {
102
+ return (first as storage.SyncBucketDataBatch).batch;
103
+ } else {
104
+ return first as utils.SyncBucketData;
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Replica id in the old Postgres format, for backwards-compatible tests.
110
+ */
111
+ export function rid(id: string): bson.UUID {
112
+ return utils.getUuidReplicaIdentityBson({ id: id }, [{ name: 'id', type: 'VARCHAR', typeId: 25 }]);
113
+ }
@@ -0,0 +1,42 @@
1
+ import { utils } from '@powersync/service-core';
2
+ import { JSONBig } from '@powersync/service-jsonbig';
3
+
4
+ export function putOp(table: string, data: Record<string, any>): Partial<utils.OplogEntry> {
5
+ return {
6
+ op: 'PUT',
7
+ object_type: table,
8
+ object_id: data.id,
9
+ data: JSONBig.stringify(data)
10
+ };
11
+ }
12
+
13
+ export function removeOp(table: string, id: string): Partial<utils.OplogEntry> {
14
+ return {
15
+ op: 'REMOVE',
16
+ object_type: table,
17
+ object_id: id
18
+ };
19
+ }
20
+
21
+ export function compareIds(a: utils.OplogEntry, b: utils.OplogEntry) {
22
+ return a.object_id!.localeCompare(b.object_id!);
23
+ }
24
+
25
+ export async function oneFromAsync<T>(source: Iterable<T> | AsyncIterable<T>): Promise<T> {
26
+ const items: T[] = [];
27
+ for await (const item of source) {
28
+ items.push(item);
29
+ }
30
+ if (items.length != 1) {
31
+ throw new Error(`One item expected, got: ${items.length}`);
32
+ }
33
+ return items[0];
34
+ }
35
+
36
+ export async function fromAsync<T>(source: Iterable<T> | AsyncIterable<T>): Promise<T[]> {
37
+ const items: T[] = [];
38
+ for await (const item of source) {
39
+ items.push(item);
40
+ }
41
+ return items;
42
+ }
@@ -0,0 +1,4 @@
1
+ export * from './bucket-validation.js';
2
+ export * from './general-utils.js';
3
+ export * from './stream_utils.js';
4
+
@@ -0,0 +1,148 @@
1
+ import { OplogEntry } from '@powersync/service-core';
2
+ import { expect, test } from 'vitest';
3
+ import * as test_utils from '../test-utils/test-utils-index.js';
4
+
5
+ /**
6
+ * This tests the reduceBucket function.
7
+ * While this function is not used directly in the service implementation,
8
+ * it is an important part of validating consistency in other tests.
9
+ * @example
10
+ * ```TypeScript
11
+ * describe('bucket validation', registerBucketValidationTests);
12
+ * ```
13
+ */
14
+ export function registerBucketValidationTests() {
15
+ const ops1: OplogEntry[] = [
16
+ {
17
+ op_id: '1',
18
+ op: 'PUT',
19
+ object_type: 'test',
20
+ object_id: 't1',
21
+ checksum: 2634521662,
22
+ subkey: '6544e3899293153fa7b38331/117ab485-4b42-58a2-ab32-0053a22c3423',
23
+ data: '{"id":"t1"}'
24
+ },
25
+ {
26
+ op_id: '2',
27
+ op: 'PUT',
28
+ object_type: 'test',
29
+ object_id: 't2',
30
+ checksum: 4243212114,
31
+ subkey: '6544e3899293153fa7b38331/ec27c691-b47a-5d92-927a-9944feb89eee',
32
+ data: '{"id":"t2"}'
33
+ },
34
+ {
35
+ op_id: '3',
36
+ op: 'REMOVE',
37
+ object_type: 'test',
38
+ object_id: 't1',
39
+ checksum: 4228978084,
40
+ subkey: '6544e3899293153fa7b38331/117ab485-4b42-58a2-ab32-0053a22c3423',
41
+ data: null
42
+ },
43
+ {
44
+ op_id: '4',
45
+ op: 'PUT',
46
+ object_type: 'test',
47
+ object_id: 't2',
48
+ checksum: 4243212114,
49
+ subkey: '6544e3899293153fa7b38331/ec27c691-b47a-5d92-927a-9944feb89eee',
50
+ data: '{"id":"t2"}'
51
+ }
52
+ ];
53
+
54
+ test('reduce 1', () => {
55
+ expect(test_utils.reduceBucket(ops1)).toEqual([
56
+ {
57
+ checksum: -1778190028,
58
+ op: 'CLEAR',
59
+ op_id: '0'
60
+ },
61
+ {
62
+ checksum: 4243212114,
63
+ data: '{"id":"t2"}',
64
+ object_id: 't2',
65
+ object_type: 'test',
66
+ op: 'PUT',
67
+ op_id: '4',
68
+ subkey: '6544e3899293153fa7b38331/ec27c691-b47a-5d92-927a-9944feb89eee'
69
+ }
70
+ ]);
71
+
72
+ expect(test_utils.reduceBucket(test_utils.reduceBucket(ops1))).toEqual([
73
+ {
74
+ checksum: -1778190028,
75
+ op: 'CLEAR',
76
+ op_id: '0'
77
+ },
78
+ {
79
+ checksum: 4243212114,
80
+ data: '{"id":"t2"}',
81
+ object_id: 't2',
82
+ object_type: 'test',
83
+ op: 'PUT',
84
+ op_id: '4',
85
+ subkey: '6544e3899293153fa7b38331/ec27c691-b47a-5d92-927a-9944feb89eee'
86
+ }
87
+ ]);
88
+
89
+ test_utils.validateBucket(ops1);
90
+ });
91
+
92
+ test('reduce 2', () => {
93
+ const bucket: OplogEntry[] = [
94
+ ...ops1,
95
+
96
+ {
97
+ checksum: 93784613,
98
+ op: 'CLEAR',
99
+ op_id: '5'
100
+ },
101
+ {
102
+ checksum: 5133378,
103
+ data: '{"id":"t3"}',
104
+ object_id: 't3',
105
+ object_type: 'test',
106
+ op: 'PUT',
107
+ op_id: '11',
108
+ subkey: '6544e3899293153fa7b38333/ec27c691-b47a-5d92-927a-9944feb89eee'
109
+ }
110
+ ];
111
+
112
+ expect(test_utils.reduceBucket(bucket)).toEqual([
113
+ {
114
+ checksum: 93784613,
115
+ op: 'CLEAR',
116
+ op_id: '0'
117
+ },
118
+ {
119
+ checksum: 5133378,
120
+ data: '{"id":"t3"}',
121
+ object_id: 't3',
122
+ object_type: 'test',
123
+ op: 'PUT',
124
+ op_id: '11',
125
+ subkey: '6544e3899293153fa7b38333/ec27c691-b47a-5d92-927a-9944feb89eee'
126
+ }
127
+ ]);
128
+
129
+ expect(test_utils.reduceBucket(test_utils.reduceBucket(bucket))).toEqual([
130
+ {
131
+ checksum: 93784613,
132
+ op: 'CLEAR',
133
+ op_id: '0'
134
+ },
135
+ {
136
+ checksum: 5133378,
137
+ data: '{"id":"t3"}',
138
+ object_id: 't3',
139
+ object_type: 'test',
140
+ op: 'PUT',
141
+ op_id: '11',
142
+ subkey: '6544e3899293153fa7b38333/ec27c691-b47a-5d92-927a-9944feb89eee'
143
+ }
144
+ ]);
145
+
146
+ test_utils.validateBucket(bucket);
147
+ });
148
+ }