Merge lp:~pedronis/u1db/json-preservation-tests into lp:u1db

Proposed by Samuele Pedroni
Status: Merged
Approved by: Samuele Pedroni
Approved revision: 420
Merged at revision: 423
Proposed branch: lp:~pedronis/u1db/json-preservation-tests
Merge into: lp:u1db
Diff against target: 186 lines (+108/-18)
1 file modified
u1db/tests/test_backends.py (+108/-18)
To merge this branch: bzr merge lp:~pedronis/u1db/json-preservation-tests
Reviewer Review Type Date Requested Status
Eric Casteleijn (community) Approve
Review via email: mp+128207@code.launchpad.net

Commit message

add optional json preservation tests as far as supported by current impls on trunk

Description of the change

add optional json preservation tests as far as supported by current impls on trunk

To post a comment you must log in.
Revision history for this message
Eric Casteleijn (thisfred) wrote :

looks good

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'u1db/tests/test_backends.py'
--- u1db/tests/test_backends.py 2012-09-28 12:13:18 +0000
+++ u1db/tests/test_backends.py 2012-10-05 10:13:24 +0000
@@ -83,20 +83,23 @@
83 """A (not very) alternative implementation of Document."""83 """A (not very) alternative implementation of Document."""
8484
8585
86ALL_SCENARIOS = tests.LOCAL_DATABASES_SCENARIOS + [
87 ('http', {'make_database_for_test': make_http_database_for_test,
88 'copy_database_for_test': copy_http_database_for_test,
89 'make_document_for_test': tests.make_document_for_test,
90 'make_app_with_state': make_http_app}),
91 ('oauth_http', {'make_database_for_test':
92 make_oauth_http_database_for_test,
93 'copy_database_for_test':
94 copy_oauth_http_database_for_test,
95 'make_document_for_test': tests.make_document_for_test,
96 'make_app_with_state': make_oauth_http_app})
97 ] + tests.C_DATABASE_SCENARIOS
98
99
86class AllDatabaseTests(tests.DatabaseBaseTests, tests.TestCaseWithServer):100class AllDatabaseTests(tests.DatabaseBaseTests, tests.TestCaseWithServer):
87101
88 scenarios = tests.LOCAL_DATABASES_SCENARIOS + [102 scenarios = ALL_SCENARIOS
89 ('http', {'make_database_for_test': make_http_database_for_test,
90 'copy_database_for_test': copy_http_database_for_test,
91 'make_document_for_test': tests.make_document_for_test,
92 'make_app_with_state': make_http_app}),
93 ('oauth_http', {'make_database_for_test':
94 make_oauth_http_database_for_test,
95 'copy_database_for_test':
96 copy_oauth_http_database_for_test,
97 'make_document_for_test': tests.make_document_for_test,
98 'make_app_with_state': make_oauth_http_app})
99 ] + tests.C_DATABASE_SCENARIOS
100103
101 def test_close(self):104 def test_close(self):
102 self.db.close()105 self.db.close()
@@ -338,9 +341,38 @@
338 self.assertGetDoc(self.db, doc.doc_id, doc.rev, nested_doc, False)341 self.assertGetDoc(self.db, doc.doc_id, doc.rev, nested_doc, False)
339342
340343
344peculiar_json1 = '{ "a": 1 ,\n "b": 2}'
345peculiar_json2 = '{"a": 1,"b":2}'
346peculiar_json3 = '{"a": 1,"b":2,\n"c": 3}'
347
348
349class OptionalJSONPreservationlDatabaseTests(tests.DatabaseBaseTests,
350 tests.TestCaseWithServer):
351
352 scenarios = ALL_SCENARIOS
353
354 def test_preserve_json_create_doc_from_json(self):
355 doc = self.db.create_doc_from_json(peculiar_json1)
356 doc1 = self.db.get_doc(doc.doc_id)
357 self.assertEqual(peculiar_json1, doc1.get_json())
358
359 def test_preserve_json_put_doc(self):
360 doc = self.make_document('doc-id', None, peculiar_json1)
361 doc = self.db.put_doc(doc)
362 doc1 = self.db.get_doc('doc-id')
363 self.assertEqual(peculiar_json1, doc1.get_json())
364 doc1.set_json(peculiar_json2)
365 self.db.put_doc(doc1)
366 doc2 = self.db.get_doc('doc-id')
367 self.assertEqual(peculiar_json2, doc2.get_json())
368
369
370LOCAL_SCENARIOS = tests.LOCAL_DATABASES_SCENARIOS + tests.C_DATABASE_SCENARIOS
371
372
341class DocumentSizeTests(tests.DatabaseBaseTests):373class DocumentSizeTests(tests.DatabaseBaseTests):
342374
343 scenarios = tests.LOCAL_DATABASES_SCENARIOS + tests.C_DATABASE_SCENARIOS375 scenarios = LOCAL_SCENARIOS
344376
345 def test_put_doc_refuses_oversized_documents(self):377 def test_put_doc_refuses_oversized_documents(self):
346 self.db.set_document_size_limit(1)378 self.db.set_document_size_limit(1)
@@ -364,7 +396,7 @@
364396
365class LocalDatabaseTests(tests.DatabaseBaseTests):397class LocalDatabaseTests(tests.DatabaseBaseTests):
366398
367 scenarios = tests.LOCAL_DATABASES_SCENARIOS + tests.C_DATABASE_SCENARIOS399 scenarios = LOCAL_SCENARIOS
368400
369 def test_create_doc_different_ids_diff_db(self):401 def test_create_doc_different_ids_diff_db(self):
370 doc1 = self.db.create_doc_from_json(simple_doc)402 doc1 = self.db.create_doc_from_json(simple_doc)
@@ -607,9 +639,47 @@
607 self.db.whats_changed(2))639 self.db.whats_changed(2))
608640
609641
642class LocalDatabaseOptionalJSONPreservationTests(tests.DatabaseBaseTests):
643
644 scenarios = LOCAL_SCENARIOS
645
646 def test_preserve_json_put_doc_if_newer(self):
647 doc = self.make_document('doc-id', 'other:1', peculiar_json1)
648 self.db._put_doc_if_newer(doc, save_conflict=False,
649 replica_uid="other", replica_gen=1)
650 doc1 = self.db.get_doc('doc-id')
651 self.assertEqual(peculiar_json1, doc1.get_json())
652 doc1 = self.make_document('doc-id', 'other:2', peculiar_json2)
653 self.db._put_doc_if_newer(doc1, save_conflict=False,
654 replica_uid="other", replica_gen=2)
655 doc2 = self.db.get_doc('doc-id')
656 self.assertEqual(peculiar_json2, doc2.get_json())
657
658 def test_preserve_json_put_doc_if_newer_autoresolve_json(self):
659 doc = self.make_document('doc-id', None, peculiar_json1)
660 self.db.put_doc(doc)
661 doc1 = self.make_document('doc-id', 'other:1', peculiar_json1)
662 self.db._put_doc_if_newer(doc1, save_conflict=False,
663 replica_uid="other", replica_gen=1)
664 doc2 = self.db.get_doc('doc-id')
665 self.assertEqual(peculiar_json1, doc2.get_json())
666
667 def test_preserve_json_put_doc_if_newer_autoresolve_content(self):
668 if self.db.__class__.__name__ == 'CDatabase':
669 self.skipTest("the C implementation atm uses string "
670 "equivalence only")
671 doc = self.make_document('doc-id', None, peculiar_json1)
672 self.db.put_doc(doc)
673 doc1 = self.make_document('doc-id', 'other:1', peculiar_json2)
674 self.db._put_doc_if_newer(doc1, save_conflict=False,
675 replica_uid="other", replica_gen=1)
676 doc2 = self.db.get_doc('doc-id')
677 self.assertEqual(peculiar_json2, doc2.get_json())
678
679
610class LocalDatabaseValidateGenNTransIdTests(tests.DatabaseBaseTests):680class LocalDatabaseValidateGenNTransIdTests(tests.DatabaseBaseTests):
611681
612 scenarios = tests.LOCAL_DATABASES_SCENARIOS + tests.C_DATABASE_SCENARIOS682 scenarios = LOCAL_SCENARIOS
613683
614 def test_validate_gen_and_trans_id(self):684 def test_validate_gen_and_trans_id(self):
615 self.db.create_doc_from_json(simple_doc)685 self.db.create_doc_from_json(simple_doc)
@@ -633,7 +703,7 @@
633703
634class LocalDatabaseValidateSourceGenTests(tests.DatabaseBaseTests):704class LocalDatabaseValidateSourceGenTests(tests.DatabaseBaseTests):
635705
636 scenarios = tests.LOCAL_DATABASES_SCENARIOS + tests.C_DATABASE_SCENARIOS706 scenarios = LOCAL_SCENARIOS
637707
638 def test_validate_source_gen_and_trans_id_same(self):708 def test_validate_source_gen_and_trans_id_same(self):
639 self.db._set_replica_gen_and_trans_id('other', 1, 'T-sid')709 self.db._set_replica_gen_and_trans_id('other', 1, 'T-sid')
@@ -653,7 +723,7 @@
653class LocalDatabaseWithConflictsTests(tests.DatabaseBaseTests):723class LocalDatabaseWithConflictsTests(tests.DatabaseBaseTests):
654 # test supporting/functionality around storing conflicts724 # test supporting/functionality around storing conflicts
655725
656 scenarios = tests.LOCAL_DATABASES_SCENARIOS + tests.C_DATABASE_SCENARIOS726 scenarios = LOCAL_SCENARIOS
657727
658 def test_get_docs_conflicted(self):728 def test_get_docs_conflicted(self):
659 doc1 = self.db.create_doc_from_json(simple_doc)729 doc1 = self.db.create_doc_from_json(simple_doc)
@@ -1019,9 +1089,29 @@
1019 self.assertRaises(errors.ConflictedDoc, self.db.delete_doc, doc2)1089 self.assertRaises(errors.ConflictedDoc, self.db.delete_doc, doc2)
10201090
10211091
1092class LocalDatabaseWithConflictsJSONPreservationTests(tests.DatabaseBaseTests):
1093 # test supporting/functionality around storing conflicts
1094
1095 scenarios = LOCAL_SCENARIOS
1096
1097 def test_json_preservation_put_doc_if_newer_save_conflicted(self):
1098 doc1 = self.db.create_doc_from_json(peculiar_json1)
1099 # Document is inserted as a conflict
1100 doc2 = self.make_document(doc1.doc_id, 'alternate:1',
1101 peculiar_json3)
1102 state, _ = self.db._put_doc_if_newer(
1103 doc2, save_conflict=True, replica_uid='r', replica_gen=1,
1104 replica_trans_id='foo')
1105 self.assertEqual('conflicted', state)
1106 # check json in db
1107 conflicts = self.db.get_doc_conflicts(doc1.doc_id)
1108 self.assertEqual(peculiar_json3, conflicts[0].get_json())
1109 self.assertEqual(peculiar_json1, conflicts[1].get_json())
1110
1111
1022class DatabaseIndexTests(tests.DatabaseBaseTests):1112class DatabaseIndexTests(tests.DatabaseBaseTests):
10231113
1024 scenarios = tests.LOCAL_DATABASES_SCENARIOS + tests.C_DATABASE_SCENARIOS1114 scenarios = LOCAL_SCENARIOS
10251115
1026 def assertParseError(self, definition):1116 def assertParseError(self, definition):
1027 self.db.create_doc_from_json(nested_doc)1117 self.db.create_doc_from_json(nested_doc)

Subscribers

People subscribed via source and target branches