diff options
author | drebs <drebs@leap.se> | 2017-04-25 09:10:20 +0200 |
---|---|---|
committer | drebs <drebs@leap.se> | 2017-04-25 09:20:22 +0200 |
commit | 89cd6184b2fdf2eec16ed31c108966e68f6446b1 (patch) | |
tree | eccddc140278c131f1e63a2dd79bf9adf7b8a710 /testing | |
parent | 2d4468af5484ab96dbee42837ba03e3d91ee7828 (diff) |
[test] ensure rev system works in shared db
During a meeting with pixelated we were asked to ensure that the u1db
revision system was working for the shared database. This commit adds a
test to make sure that documents in the shared database can be updated
successfully if the include the correct revision, but will fail if the
include the incorrect revision.
Resolves: #8842.
Diffstat (limited to 'testing')
-rw-r--r-- | testing/tests/server/test_shared_db.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/testing/tests/server/test_shared_db.py b/testing/tests/server/test_shared_db.py new file mode 100644 index 00000000..4f3b1787 --- /dev/null +++ b/testing/tests/server/test_shared_db.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# test_shared_db.py +# Copyright (C) 2017 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +""" +Tests for the shared db on server side. +""" + + +import pytest + +from twisted.trial import unittest + +from leap.soledad.client.shared_db import SoledadSharedDatabase +from leap.soledad.common.document import SoledadDocument +from leap.soledad.common.l2db.errors import RevisionConflict + + +class SharedDbTests(unittest.TestCase): + """ + """ + + URL = 'http://127.0.0.1:2424/shared' + CREDS = {'token': {'uuid': 'an-uuid', 'token': 'an-auth-token'}} + + @pytest.fixture(autouse=True) + def soledad_client(self, soledad_server, soledad_dbs): + soledad_dbs('an-uuid') + self._db = SoledadSharedDatabase.open_database(self.URL, self.CREDS) + + @pytest.mark.thisone + def test_doc_update_succeeds(self): + doc_id = 'some-random-doc' + self.assertIsNone(self._db.get_doc(doc_id)) + # create a document in shared db + doc = SoledadDocument(doc_id=doc_id) + self._db.put_doc(doc) + # update that document + expected = {'new': 'content'} + doc.content = expected + self._db.put_doc(doc) + # ensure expected content was saved + doc = self._db.get_doc(doc_id) + self.assertEqual(expected, doc.content) + + @pytest.mark.thisone + def test_doc_update_fails_with_wrong_rev(self): + # create a document in shared db + doc_id = 'some-random-doc' + self.assertIsNone(self._db.get_doc(doc_id)) + # create a document in shared db + doc = SoledadDocument(doc_id=doc_id) + self._db.put_doc(doc) + # try to update document without including revision of old version + doc.rev = 'wrong-rev' + self.assertRaises(RevisionConflict, self._db.put_doc, doc) |