diff options
Diffstat (limited to 'testing')
| -rw-r--r-- | testing/test_soledad/u1db_tests/__init__.py | 7 | ||||
| -rw-r--r-- | testing/test_soledad/u1db_tests/test_open.py | 11 | ||||
| -rw-r--r-- | testing/test_soledad/util.py | 4 | ||||
| -rw-r--r-- | testing/tests/blobs/test_blob_manager.py | 4 | ||||
| -rw-r--r-- | testing/tests/blobs/test_decrypter_buffer.py | 10 | ||||
| -rw-r--r-- | testing/tests/blobs/test_sqlcipher_client_backend.py | 2 | ||||
| -rw-r--r-- | testing/tests/client/test_attachments.py | 81 | ||||
| -rw-r--r-- | testing/tests/client/test_aux_methods.py | 2 | ||||
| -rw-r--r-- | testing/tests/server/test_blobs_server.py | 4 | ||||
| -rw-r--r-- | testing/tests/sqlcipher/test_async.py | 6 | ||||
| -rw-r--r-- | testing/tests/sqlcipher/test_backend.py | 9 | ||||
| -rw-r--r-- | testing/tests/sync/test_sync_target.py | 6 | 
12 files changed, 117 insertions, 29 deletions
| diff --git a/testing/test_soledad/u1db_tests/__init__.py b/testing/test_soledad/u1db_tests/__init__.py index 1575b859..ccbb6ca6 100644 --- a/testing/test_soledad/u1db_tests/__init__.py +++ b/testing/test_soledad/u1db_tests/__init__.py @@ -37,11 +37,12 @@ from twisted.internet import reactor  from leap.soledad.common.l2db import errors  from leap.soledad.common.l2db import Document  from leap.soledad.common.l2db.backends import inmemory -from leap.soledad.common.l2db.backends import sqlite_backend  from leap.soledad.common.l2db.remote import server_state  from leap.soledad.common.l2db.remote import http_app  from leap.soledad.common.l2db.remote import http_target +from leap.soledad.client._database import sqlite +  if sys.version_info[0] < 3:      from pysqlcipher import dbapi2  else: @@ -140,7 +141,7 @@ def copy_memory_database_for_test(test, db):  def make_sqlite_partial_expanded_for_test(test, replica_uid): -    db = sqlite_backend.SQLitePartialExpandDatabase(':memory:') +    db = sqlite.SQLitePartialExpandDatabase(':memory:')      db._set_replica_uid(replica_uid)      return db @@ -151,7 +152,7 @@ def copy_sqlite_partial_expanded_for_test(test, db):      # CORRECTLY DETECT IT HAPPENING SO THAT WE CAN RAISE ERRORS RATHER THAN      # CORRUPT USER DATA. USE SYNC INSTEAD, OR WE WILL SEND NINJA TO YOUR      # HOUSE. -    new_db = sqlite_backend.SQLitePartialExpandDatabase(':memory:') +    new_db = sqlite.SQLitePartialExpandDatabase(':memory:')      tmpfile = StringIO()      for line in db._db_handle.iterdump():          if 'sqlite_sequence' not in line:  # work around bug in iterdump diff --git a/testing/test_soledad/u1db_tests/test_open.py b/testing/test_soledad/u1db_tests/test_open.py index b572fba0..eaaee72f 100644 --- a/testing/test_soledad/u1db_tests/test_open.py +++ b/testing/test_soledad/u1db_tests/test_open.py @@ -27,7 +27,8 @@ from test_soledad.u1db_tests.test_backends import TestAlternativeDocument  from leap.soledad.common.l2db import errors  from leap.soledad.common.l2db import open as u1db_open -from leap.soledad.common.l2db.backends import sqlite_backend + +from leap.soledad.client._database import sqlite  @skip("Skiping tests imported from U1DB.") @@ -47,7 +48,7 @@ class TestU1DBOpen(tests.TestCase):          db = u1db_open(self.db_path, create=True)          self.addCleanup(db.close)          self.assertTrue(os.path.exists(self.db_path)) -        self.assertIsInstance(db, sqlite_backend.SQLiteDatabase) +        self.assertIsInstance(db, sqlite.SQLiteDatabase)      def test_open_with_factory(self):          db = u1db_open(self.db_path, create=True, @@ -56,7 +57,7 @@ class TestU1DBOpen(tests.TestCase):          self.assertEqual(TestAlternativeDocument, db._factory)      def test_open_existing(self): -        db = sqlite_backend.SQLitePartialExpandDatabase(self.db_path) +        db = sqlite.SQLitePartialExpandDatabase(self.db_path)          self.addCleanup(db.close)          doc = db.create_doc_from_json(tests.simple_doc)          # Even though create=True, we shouldn't wipe the db @@ -66,8 +67,8 @@ class TestU1DBOpen(tests.TestCase):          self.assertEqual(doc, doc2)      def test_open_existing_no_create(self): -        db = sqlite_backend.SQLitePartialExpandDatabase(self.db_path) +        db = sqlite.SQLitePartialExpandDatabase(self.db_path)          self.addCleanup(db.close)          db2 = u1db_open(self.db_path, create=False)          self.addCleanup(db2.close) -        self.assertIsInstance(db2, sqlite_backend.SQLitePartialExpandDatabase) +        self.assertIsInstance(db2, sqlite.SQLitePartialExpandDatabase) diff --git a/testing/test_soledad/util.py b/testing/test_soledad/util.py index 6ffb60b6..0335d544 100644 --- a/testing/test_soledad/util.py +++ b/testing/test_soledad/util.py @@ -46,9 +46,9 @@ from leap.soledad.common.couch.state import CouchServerState  from leap.soledad.client import Soledad  from leap.soledad.client import http_target  from leap.soledad.client import auth -from leap.soledad.client.sqlcipher import SQLCipherDatabase -from leap.soledad.client.sqlcipher import SQLCipherOptions  from leap.soledad.client._crypto import is_symmetrically_encrypted +from leap.soledad.client._database.sqlcipher import SQLCipherDatabase +from leap.soledad.client._database.sqlcipher import SQLCipherOptions  from leap.soledad.server import SoledadApp diff --git a/testing/tests/blobs/test_blob_manager.py b/testing/tests/blobs/test_blob_manager.py index 7609936d..69a272c8 100644 --- a/testing/tests/blobs/test_blob_manager.py +++ b/testing/tests/blobs/test_blob_manager.py @@ -19,8 +19,8 @@ Tests for BlobManager.  """  from twisted.trial import unittest  from twisted.internet import defer -from leap.soledad.client._blobs import BlobManager, BlobDoc, FIXED_REV -from leap.soledad.client._blobs import BlobAlreadyExistsError +from leap.soledad.client._database.blobs import BlobManager, BlobDoc, FIXED_REV +from leap.soledad.client._database.blobs import BlobAlreadyExistsError  from io import BytesIO  from mock import Mock  import pytest diff --git a/testing/tests/blobs/test_decrypter_buffer.py b/testing/tests/blobs/test_decrypter_buffer.py index 288c9975..edaa66e2 100644 --- a/testing/tests/blobs/test_decrypter_buffer.py +++ b/testing/tests/blobs/test_decrypter_buffer.py @@ -18,12 +18,16 @@  Tests for blobs decrypter buffer. A component which is used as a decryption  sink during blob stream download.  """ +from io import BytesIO +from mock import Mock +  from twisted.trial import unittest  from twisted.internet import defer -from leap.soledad.client._blobs import DecrypterBuffer, BlobManager, FIXED_REV + +from leap.soledad.client._database.blobs import DecrypterBuffer +from leap.soledad.client._database.blobs import BlobManager +from leap.soledad.client._database.blobs import FIXED_REV  from leap.soledad.client import _crypto -from io import BytesIO -from mock import Mock  class DecrypterBufferCase(unittest.TestCase): diff --git a/testing/tests/blobs/test_sqlcipher_client_backend.py b/testing/tests/blobs/test_sqlcipher_client_backend.py index 951bac22..865a64e1 100644 --- a/testing/tests/blobs/test_sqlcipher_client_backend.py +++ b/testing/tests/blobs/test_sqlcipher_client_backend.py @@ -19,7 +19,7 @@ Tests for sqlcipher backend on blobs client.  """  from twisted.trial import unittest  from twisted.internet import defer -from leap.soledad.client._blobs import SQLiteBlobBackend +from leap.soledad.client._database.blobs import SQLiteBlobBackend  from io import BytesIO  import pytest diff --git a/testing/tests/client/test_attachments.py b/testing/tests/client/test_attachments.py new file mode 100644 index 00000000..ad4595e9 --- /dev/null +++ b/testing/tests/client/test_attachments.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +# test_attachments.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 document attachments. +""" + +import pytest + +from io import BytesIO +from mock import Mock + +from twisted.internet import defer +from test_soledad.util import BaseSoledadTest + + +from leap.soledad.client import AttachmentStates + + +def mock_response(doc): +    doc._manager._client.get = Mock( +        return_value=defer.succeed(Mock(code=200, json=lambda: []))) +    doc._manager._client.put = Mock( +        return_value=defer.succeed(Mock(code=200))) + + +@pytest.mark.usefixture('method_tmpdir') +class AttachmentTests(BaseSoledadTest): + +    @defer.inlineCallbacks +    def test_create_doc_saves_store(self): +        doc = yield self._soledad.create_doc({}) +        self.assertEqual(self._soledad, doc.store) + +    @defer.inlineCallbacks +    def test_put_attachment(self): +        doc = yield self._soledad.create_doc({}) +        mock_response(doc) +        yield doc.put_attachment(BytesIO('test')) +        local_list = yield doc._manager.local_list() +        self.assertIn(doc._blob_id, local_list) + +    @defer.inlineCallbacks +    def test_get_attachment(self): +        doc = yield self._soledad.create_doc({}) +        mock_response(doc) +        yield doc.put_attachment(BytesIO('test')) +        fd = yield doc.get_attachment() +        self.assertEqual('test', fd.read()) + +    @defer.inlineCallbacks +    def test_attachment_state(self): +        doc = yield self._soledad.create_doc({}) +        state = yield doc.attachment_state() +        self.assertEqual(AttachmentStates.NONE, state) +        mock_response(doc) +        yield doc.put_attachment(BytesIO('test')) +        state = yield doc.attachment_state() +        self.assertEqual(AttachmentStates.LOCAL, state) + +    @defer.inlineCallbacks +    def test_is_dirty(self): +        doc = yield self._soledad.create_doc({}) +        dirty = yield doc.is_dirty() +        self.assertFalse(dirty) +        doc.content = {'test': True} +        dirty = yield doc.is_dirty() +        self.assertTrue(dirty) diff --git a/testing/tests/client/test_aux_methods.py b/testing/tests/client/test_aux_methods.py index 729aa28a..da33255c 100644 --- a/testing/tests/client/test_aux_methods.py +++ b/testing/tests/client/test_aux_methods.py @@ -22,7 +22,7 @@ import os  from pytest import inlineCallbacks  from leap.soledad.client import Soledad -from leap.soledad.client.adbapi import U1DBConnectionPool +from leap.soledad.client._database.adbapi import U1DBConnectionPool  from leap.soledad.client._secrets.util import SecretsError  from test_soledad.util import BaseSoledadTest diff --git a/testing/tests/server/test_blobs_server.py b/testing/tests/server/test_blobs_server.py index 2e5af01f..cd39833f 100644 --- a/testing/tests/server/test_blobs_server.py +++ b/testing/tests/server/test_blobs_server.py @@ -24,8 +24,10 @@ from twisted.web.server import Site  from twisted.internet import reactor  from twisted.internet import defer  from treq._utils import set_global_pool +  from leap.soledad.server import _blobs as server_blobs -from leap.soledad.client._blobs import BlobManager, BlobAlreadyExistsError +from leap.soledad.client._database.blobs import BlobManager +from leap.soledad.client._database.blobs import BlobAlreadyExistsError  class BlobServerTestCase(unittest.TestCase): diff --git a/testing/tests/sqlcipher/test_async.py b/testing/tests/sqlcipher/test_async.py index 42c315fe..dac6c6b9 100644 --- a/testing/tests/sqlcipher/test_async.py +++ b/testing/tests/sqlcipher/test_async.py @@ -20,8 +20,8 @@ import hashlib  from twisted.internet import defer  from test_soledad.util import BaseSoledadTest -from leap.soledad.client import adbapi -from leap.soledad.client.sqlcipher import SQLCipherOptions +from leap.soledad.client._database import adbapi +from leap.soledad.client._database import sqlcipher  class ASyncSQLCipherRetryTestCase(BaseSoledadTest): @@ -42,7 +42,7 @@ class ASyncSQLCipherRetryTestCase(BaseSoledadTest):      def _get_dbpool(self):          tmpdb = os.path.join(self.tempdir, "test.soledad") -        opts = SQLCipherOptions(tmpdb, "secret", create=True) +        opts = sqlcipher.SQLCipherOptions(tmpdb, "secret", create=True)          return adbapi.getConnectionPool(opts)      def _get_sample(self): diff --git a/testing/tests/sqlcipher/test_backend.py b/testing/tests/sqlcipher/test_backend.py index 6e9595db..4f614fb3 100644 --- a/testing/tests/sqlcipher/test_backend.py +++ b/testing/tests/sqlcipher/test_backend.py @@ -26,14 +26,13 @@ import sys  # l2db stuff.  from leap.soledad.common.l2db import errors  from leap.soledad.common.l2db import query_parser -from leap.soledad.common.l2db.backends.sqlite_backend \ -    import SQLitePartialExpandDatabase  # soledad stuff.  from leap.soledad.common.document import SoledadDocument -from leap.soledad.client.sqlcipher import SQLCipherDatabase -from leap.soledad.client.sqlcipher import SQLCipherOptions -from leap.soledad.client.sqlcipher import DatabaseIsNotEncrypted +from leap.soledad.client._database.sqlite import SQLitePartialExpandDatabase +from leap.soledad.client._database.sqlcipher import SQLCipherDatabase +from leap.soledad.client._database.sqlcipher import SQLCipherOptions +from leap.soledad.client._database.sqlcipher import DatabaseIsNotEncrypted  # u1db tests stuff.  from test_soledad import u1db_tests as tests diff --git a/testing/tests/sync/test_sync_target.py b/testing/tests/sync/test_sync_target.py index a54a02ee..e1bd7de1 100644 --- a/testing/tests/sync/test_sync_target.py +++ b/testing/tests/sync/test_sync_target.py @@ -32,9 +32,9 @@ from twisted.internet import defer  from leap.soledad.client import http_target as target  from leap.soledad.client.http_target.fetch_protocol import DocStreamReceiver -from leap.soledad.client.sqlcipher import SQLCipherU1DBSync -from leap.soledad.client.sqlcipher import SQLCipherOptions -from leap.soledad.client.sqlcipher import SQLCipherDatabase +from leap.soledad.client._database.sqlcipher import SQLCipherU1DBSync +from leap.soledad.client._database.sqlcipher import SQLCipherOptions +from leap.soledad.client._database.sqlcipher import SQLCipherDatabase  from leap.soledad.client import _crypto  from leap.soledad.common import l2db | 
