Skip to content

Commit e62bdc3

Browse files
committed
fix sync tests to account for site id based tie breaking
1 parent 32f5beb commit e62bdc3

File tree

1 file changed

+76
-39
lines changed

1 file changed

+76
-39
lines changed

py/correctness/tests/test_sync.py

Lines changed: 76 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -155,32 +155,40 @@ def test_delete():
155155
close(db)
156156

157157

158+
# returns two dbs. The lower site id being the first one returned.
159+
def create_and_swap():
160+
db1 = connect(":memory:")
161+
db2 = connect(":memory:")
162+
if get_site_id(db1) > get_site_id(db2):
163+
temp = db1
164+
db1 = db2
165+
db2 = temp
166+
167+
return (db1, db2)
168+
158169
# TODO: create db _then swap_ then create rows then check original invariants
159170
# Col? not exists case so entry created and default filled in
171+
172+
160173
def test_merging_on_defaults():
161-
def create_db1():
162-
db1 = connect(":memory:")
174+
def setup_db1_schema(db1):
163175
db1.execute("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 0);")
164176
db1.execute("INSERT INTO foo (a) VALUES (1);")
165177
db1.execute("SELECT crsql_as_crr('foo');")
166178
db1.commit()
167179
return db1
168180

169-
def create_db2():
170-
db2 = connect(":memory:")
181+
def setup_db2_schema(db2):
171182
db2.execute("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 0);")
172183
db2.execute("INSERT INTO foo VALUES (1, 2);")
173184
db2.execute("SELECT crsql_as_crr('foo');")
174185
db2.commit()
175186
return db2
176187

177188
# test merging from thing with records (db2) to thing without records for default cols (db1)
178-
db1 = create_db1()
179-
db2 = create_db2()
180-
if get_site_id(db1) > get_site_id(db2):
181-
temp = db1
182-
db1 = db2
183-
db2 = temp
189+
(db1, db2) = create_and_swap()
190+
setup_db1_schema(db1)
191+
setup_db2_schema(db2)
184192

185193
sync_left_to_right(db2, db1, 0)
186194
# db1 has changes from db2
@@ -193,12 +201,9 @@ def create_db2():
193201
close(db1)
194202
close(db2)
195203

196-
db1 = create_db1()
197-
db2 = create_db2()
198-
if get_site_id(db1) > get_site_id(db2):
199-
temp = db1
200-
db1 = db2
201-
db2 = temp
204+
(db1, db2) = create_and_swap()
205+
setup_db1_schema(db1)
206+
setup_db2_schema(db2)
202207

203208
sync_left_to_right(db1, db2, 0)
204209

@@ -225,13 +230,12 @@ def create_db2():
225230
# this value will be less than the default
226231
def test_merging_larger_backfilled_default():
227232
def create_dbs():
228-
db1 = connect(":memory:")
233+
(db2, db1) = create_and_swap()
229234
db1.execute("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);")
230235
db1.execute("INSERT INTO foo (a) VALUES (1);")
231236
db1.execute("SELECT crsql_as_crr('foo');")
232237
db1.commit()
233238

234-
db2 = connect(":memory:")
235239
db2.execute("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);")
236240
db2.execute("SELECT crsql_as_crr('foo');")
237241
db2.commit()
@@ -294,8 +298,7 @@ def test_db_version_moves_as_expected_post_alter():
294298
# DB2 has a row with all columns having clock records since value was set explicityl
295299
# The default value with no records should always be overridden in all cases
296300
def test_merging_on_defaults2():
297-
def create_db1():
298-
db1 = connect(":memory:")
301+
def setup_db1_schema(db1):
299302
db1.execute("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);")
300303
db1.execute("SELECT crsql_as_crr('foo');")
301304
db1.commit()
@@ -311,8 +314,7 @@ def create_db1():
311314
db1.commit()
312315
return db1
313316

314-
def create_db2():
315-
db2 = connect(":memory:")
317+
def setup_db2_schema(db2):
316318
db2.execute("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);")
317319
db2.execute("SELECT crsql_as_crr('foo');")
318320
db2.commit()
@@ -326,43 +328,77 @@ def create_db2():
326328
db2.commit()
327329
return db2
328330

329-
# test merging from thing with records (db2) to thing without records for default cols (db1)
330-
db1 = create_db1()
331-
db2 = create_db2()
331+
(db1, db2) = create_and_swap()
332+
setup_db1_schema(db1)
333+
setup_db2_schema(db2)
332334

333335
sync_left_to_right(db2, db1, 0)
334336

335337
changes = db1.execute("SELECT * FROM crsql_changes").fetchall()
336338
site_id1 = get_site_id(db1)
337339
site_id2 = get_site_id(db2)
338-
assert (changes == [('foo', b'\x01\t\x01', 'b', 4, 1, 1, site_id1, 1, 0),
339-
('foo', b'\x01\t\x01', 'c', 3, 1, 2, site_id2, 1, 1)])
340+
341+
assert (changes == [('foo',
342+
b'\x01\t\x01',
343+
'b',
344+
2,
345+
1,
346+
2,
347+
site_id2,
348+
1,
349+
0),
350+
('foo',
351+
b'\x01\t\x01',
352+
'c',
353+
3,
354+
1,
355+
2,
356+
site_id2,
357+
1,
358+
1)])
340359

341360
close(db1)
342361
close(db2)
343362

344-
db1 = create_db1()
345-
db2 = create_db2()
363+
(db1, db2) = create_and_swap()
364+
setup_db1_schema(db1)
365+
setup_db2_schema(db2)
346366
site_id1 = get_site_id(db1)
347367
site_id2 = get_site_id(db2)
348368

349369
sync_left_to_right(db1, db2, 0)
350370

351371
changes = db2.execute("SELECT * FROM crsql_changes").fetchall()
352-
assert (changes == [ # db2 c 3 wins given columns with no value after an alter
353-
# do no merging
354-
('foo', b'\x01\t\x01', 'c', 3, 1, 1, site_id2, 1, 1),
355-
# Move db version since b lost on db2.
356-
# b had the value 2 on db2.
357-
('foo', b'\x01\t\x01', 'b', 4, 1, 2, site_id1, 1, 0)])
372+
assert (changes == [('foo',
373+
b'\x01\t\x01',
374+
'b',
375+
2,
376+
1,
377+
1,
378+
site_id2,
379+
1,
380+
0),
381+
('foo',
382+
b'\x01\t\x01',
383+
'c',
384+
3,
385+
1,
386+
1,
387+
site_id2,
388+
1,
389+
1)])
358390

359391

360392
def create_basic_db():
361393
db = connect(":memory:")
394+
setup_basic_db(db)
395+
return db
396+
397+
398+
def setup_basic_db(db):
362399
db.execute("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b);")
363400
db.execute("SELECT crsql_as_crr('foo');")
364401
db.commit()
365-
return db
366402

367403

368404
def test_merge_same():
@@ -392,10 +428,11 @@ def make_dbs():
392428
assert (changes == [('foo', b'\x01\t\x01', 'b', 2, 1, 1, site_id, 1, 0)])
393429

394430

395-
def test_merge_matching_clocks_lesser_value():
431+
def test_merge_matching_clocks_lesser_siteid():
396432
def make_dbs():
397-
db1 = create_basic_db()
398-
db2 = create_basic_db()
433+
(db1, db2) = create_and_swap()
434+
setup_basic_db(db1)
435+
setup_basic_db(db2)
399436

400437
db1.execute("INSERT INTO foo (a,b) VALUES (1,1);")
401438
db1.commit()

0 commit comments

Comments
 (0)