summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/__init__.py8
-rw-r--r--tests/test_couch.py13
-rw-r--r--tests/test_leap_backend.py146
-rw-r--r--tests/test_sqlcipher.py74
4 files changed, 90 insertions, 151 deletions
diff --git a/tests/__init__.py b/tests/__init__.py
index 890c4d2a..6135e648 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -23,12 +23,16 @@ class BaseSoledadTest(BaseLeapTest):
self._db2 = u1db.open(self.db2_file, create=True,
document_factory=LeapDocument)
# open a soledad instance
- self._soledad = Soledad(self.email, gpghome=self.gnupg_home)
+ self._soledad = Soledad(self.email, gpghome=self.gnupg_home,
+ initialize=False)
self._soledad._gpg.import_keys(PUBLIC_KEY)
self._soledad._gpg.import_keys(PRIVATE_KEY)
+ self._soledad._initialize()
def tearDown(self):
- pass
+ self._db1.close()
+ self._db2.close()
+ self._soledad.close()
# Key material for testing
diff --git a/tests/test_couch.py b/tests/test_couch.py
index 02399e4c..3482b035 100644
--- a/tests/test_couch.py
+++ b/tests/test_couch.py
@@ -27,6 +27,8 @@ import time
import unittest
+# from: https://github.com/smcq/paisley/blob/master/paisley/test/util.py
+# TODO: include license of above project.
class CouchDBWrapper(object):
"""
Wrapper for external CouchDB instance which is started and stopped for
@@ -42,6 +44,7 @@ class CouchDBWrapper(object):
conf = handle.read() % {
'tempdir': self.tempdir,
}
+ handle.close()
confPath = os.path.join(self.tempdir, 'test.ini')
handle = open(confPath, 'w')
@@ -51,10 +54,11 @@ class CouchDBWrapper(object):
# create the dirs from the template
os.mkdir(os.path.join(self.tempdir, 'lib'))
os.mkdir(os.path.join(self.tempdir, 'log'))
- argus = ['couchdb', '-n' '-a', confPath]
- null = open('/dev/null', 'w')
+ args = ['couchdb', '-n' '-a', confPath]
+ #null = open('/dev/null', 'w')
self.process = subprocess.Popen(
- argus, env=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ args, env=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ close_fds=True)
# find port
logPath = os.path.join(self.tempdir, 'log', 'couch.log')
while not os.path.exists(logPath):
@@ -75,6 +79,7 @@ stderr:
handle = open(logPath)
line = handle.read()
+ handle.close()
m = PORT_RE.search(line)
if not m:
self.stop()
@@ -83,7 +88,7 @@ stderr:
def stop(self):
self.process.terminate()
-
+ self.process.wait()
os.system("rm -rf %s" % self.tempdir)
diff --git a/tests/test_leap_backend.py b/tests/test_leap_backend.py
index cdd60b10..a061533c 100644
--- a/tests/test_leap_backend.py
+++ b/tests/test_leap_backend.py
@@ -21,51 +21,9 @@ from leap.soledad.tests.u1db_tests import test_https
#-----------------------------------------------------------------------------
-# The following tests come from `u1db.tests.test_common_backend`.
-#-----------------------------------------------------------------------------
-
-class TestLeapBackendImpl(tests.TestCase):
-
- def test__allocate_doc_id(self):
- db = leap_backend.LeapDatabase('test')
- doc_id1 = db._allocate_doc_id()
- self.assertTrue(doc_id1.startswith('D-'))
- self.assertEqual(34, len(doc_id1))
- int(doc_id1[len('D-'):], 16)
- self.assertNotEqual(doc_id1, db._allocate_doc_id())
-
-
-#-----------------------------------------------------------------------------
# The following tests come from `u1db.tests.test_backends`.
#-----------------------------------------------------------------------------
-def make_leap_database_for_test(test, replica_uid, path='test'):
- test.startServer()
- test.request_state._create_database(replica_uid)
- return leap_backend.LeapDatabase(test.getURL(path))
-
-
-def copy_leap_database_for_test(test, db):
- # DO NOT COPY OR REUSE THIS CODE OUTSIDE TESTS: COPYING U1DB DATABASES IS
- # THE WRONG THING TO DO, THE ONLY REASON WE DO SO HERE IS TO TEST THAT WE
- # 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.
- return test.request_state._copy_database(db)
-
-
-def make_oauth_leap_database_for_test(test, replica_uid):
- http_db = make_leap_database_for_test(test, replica_uid, '~/test')
- http_db.set_oauth_credentials(tests.consumer1.key, tests.consumer1.secret,
- tests.token1.key, tests.token1.secret)
- return http_db
-
-
-def make_document_for_test(test, doc_id, rev, content, has_conflicts=False):
- return leap_backend.LeapDocument(
- doc_id, rev, content, has_conflicts=has_conflicts)
-
-
def make_leap_document_for_test(test, doc_id, rev, content,
has_conflicts=False):
return leap_backend.LeapDocument(
@@ -82,10 +40,11 @@ def make_leap_encrypted_document_for_test(test, doc_id, rev, encrypted_content,
LEAP_SCENARIOS = [
- ('http', {'make_database_for_test': make_leap_database_for_test,
- 'copy_database_for_test': copy_leap_database_for_test,
- 'make_document_for_test': make_leap_document_for_test,
- 'make_app_with_state': make_http_app}),
+ ('http', {
+ 'make_database_for_test': test_backends.make_http_database_for_test,
+ 'copy_database_for_test': test_backends.copy_http_database_for_test,
+ 'make_document_for_test': make_leap_document_for_test,
+ 'make_app_with_state': make_http_app}),
]
@@ -95,101 +54,6 @@ class LeapTests(test_backends.AllDatabaseTests, BaseSoledadTest):
#-----------------------------------------------------------------------------
-# The following tests come from `u1db.tests.test_http_database`.
-#-----------------------------------------------------------------------------
-
-class TestLeapDatabaseSimpleOperations(
- test_http_database.TestHTTPDatabaseSimpleOperations):
-
- def setUp(self):
- super(test_http_database.TestHTTPDatabaseSimpleOperations,
- self).setUp()
- self.db = leap_backend.LeapDatabase('dbase')
- self.db._conn = object() # crash if used
- self.got = None
- self.response_val = None
-
- def _request(method, url_parts, params=None, body=None,
- content_type=None):
- self.got = method, url_parts, params, body, content_type
- if isinstance(self.response_val, Exception):
- raise self.response_val
- return self.response_val
-
- def _request_json(method, url_parts, params=None, body=None,
- content_type=None):
- self.got = method, url_parts, params, body, content_type
- if isinstance(self.response_val, Exception):
- raise self.response_val
- return self.response_val
-
- self.db._request = _request
- self.db._request_json = _request_json
-
- def test_get_sync_target(self):
- st = self.db.get_sync_target()
- self.assertIsInstance(st, leap_backend.LeapSyncTarget)
- self.assertEqual(st._url, self.db._url)
-
-
-class TestLeapDatabaseCtrWithCreds(
- test_http_database.TestHTTPDatabaseCtrWithCreds):
- pass
-
-
-class TestLeapDatabaseIntegration(
- test_http_database.TestHTTPDatabaseIntegration):
-
- def test_non_existing_db(self):
- db = leap_backend.LeapDatabase(self.getURL('not-there'))
- self.assertRaises(u1db.errors.DatabaseDoesNotExist, db.get_doc, 'doc1')
-
- def test__ensure(self):
- db = leap_backend.LeapDatabase(self.getURL('new'))
- db._ensure()
- self.assertIs(None, db.get_doc('doc1'))
-
- def test__delete(self):
- self.request_state._create_database('db0')
- db = leap_backend.LeapDatabase(self.getURL('db0'))
- db._delete()
- self.assertRaises(u1db.errors.DatabaseDoesNotExist,
- self.request_state.check_database, 'db0')
-
- def test_open_database_existing(self):
- self.request_state._create_database('db0')
- db = leap_backend.LeapDatabase.open_database(self.getURL('db0'),
- create=False)
- self.assertIs(None, db.get_doc('doc1'))
-
- def test_open_database_non_existing(self):
- self.assertRaises(u1db.errors.DatabaseDoesNotExist,
- leap_backend.LeapDatabase.open_database,
- self.getURL('not-there'),
- create=False)
-
- def test_open_database_create(self):
- db = leap_backend.LeapDatabase.open_database(self.getURL('new'),
- create=True)
- self.assertIs(None, db.get_doc('doc1'))
-
- def test_delete_database_existing(self):
- self.request_state._create_database('db0')
- leap_backend.LeapDatabase.delete_database(self.getURL('db0'))
- self.assertRaises(u1db.errors.DatabaseDoesNotExist,
- self.request_state.check_database, 'db0')
-
- def test_doc_ids_needing_quoting(self):
- db0 = self.request_state._create_database('db0')
- db = leap_backend.LeapDatabase.open_database(self.getURL('db0'),
- create=False)
- doc = leap_backend.LeapDocument('%fff', None, '{}')
- db.put_doc(doc)
- self.assertGetDoc(db0, '%fff', doc.rev, '{}', False)
- self.assertGetDoc(db, '%fff', doc.rev, '{}', False)
-
-
-#-----------------------------------------------------------------------------
# The following tests come from `u1db.tests.test_http_client`.
#-----------------------------------------------------------------------------
diff --git a/tests/test_sqlcipher.py b/tests/test_sqlcipher.py
index a3ab35b6..09b76b82 100644
--- a/tests/test_sqlcipher.py
+++ b/tests/test_sqlcipher.py
@@ -3,7 +3,7 @@
import os
import time
from sqlite3 import dbapi2, DatabaseError
-import unittest2 as unittest
+import unittest
from StringIO import StringIO
import threading
@@ -11,6 +11,7 @@ import threading
from u1db import (
errors,
query_parser,
+ sync,
)
from u1db.backends.sqlite_backend import SQLitePartialExpandDatabase
@@ -27,6 +28,8 @@ from leap.soledad.tests import u1db_tests as tests
from leap.soledad.tests.u1db_tests import test_sqlite_backend
from leap.soledad.tests.u1db_tests import test_backends
from leap.soledad.tests.u1db_tests import test_open
+from leap.soledad.tests.u1db_tests import test_sync
+from leap.soledad.backends.leap_backend import LeapSyncTarget
PASSWORD = '123456'
@@ -233,7 +236,8 @@ class TestSQLCipherPartialExpandDatabase(
db2 = SQLCipherDatabase._open_database(
path, PASSWORD,
document_factory=TestAlternativeDocument)
- self.assertEqual(TestAlternativeDocument, db2._factory)
+ doc = db2.create_doc({})
+ self.assertTrue(isinstance(doc, LeapDocument))
def test_open_database_existing(self):
temp_dir = self.createTempDir(prefix='u1db-test-')
@@ -249,7 +253,8 @@ class TestSQLCipherPartialExpandDatabase(
db2 = SQLCipherDatabase.open_database(
path, PASSWORD, create=False,
document_factory=TestAlternativeDocument)
- self.assertEqual(TestAlternativeDocument, db2._factory)
+ doc = db2.create_doc({})
+ self.assertTrue(isinstance(doc, LeapDocument))
def test_create_database_initializes_schema(self):
# This test had to be cloned because our implementation of SQLCipher
@@ -301,7 +306,8 @@ class SQLCipherOpen(test_open.TestU1DBOpen):
db = u1db_open(self.db_path, password=PASSWORD, create=True,
document_factory=TestAlternativeDocument)
self.addCleanup(db.close)
- self.assertEqual(TestAlternativeDocument, db._factory)
+ doc = db.create_doc({})
+ self.assertTrue(isinstance(doc, LeapDocument))
def test_open_existing(self):
db = SQLCipherDatabase(self.db_path, PASSWORD)
@@ -322,6 +328,63 @@ class SQLCipherOpen(test_open.TestU1DBOpen):
#-----------------------------------------------------------------------------
+# The following tests come from `u1db.tests.test_sync`.
+#-----------------------------------------------------------------------------
+
+sync_scenarios = []
+for name, scenario in SQLCIPHER_SCENARIOS:
+ scenario = dict(scenario)
+ scenario['do_sync'] = test_sync.sync_via_synchronizer
+ sync_scenarios.append((name, scenario))
+ scenario = dict(scenario)
+
+
+def sync_via_synchronizer_and_leap(test, db_source, db_target,
+ trace_hook=None, trace_hook_shallow=None):
+ if trace_hook:
+ test.skipTest("full trace hook unsupported over http")
+ path = test._http_at[db_target]
+ target = LeapSyncTarget.connect(test.getURL(path))
+ if trace_hook_shallow:
+ target._set_trace_hook_shallow(trace_hook_shallow)
+ return sync.Synchronizer(db_source, target).sync()
+
+
+sync_scenarios.append(('pyleap', {
+ 'make_database_for_test': test_sync.make_database_for_http_test,
+ 'copy_database_for_test': test_sync.copy_database_for_http_test,
+ 'make_document_for_test': tests.make_document_for_test,
+ 'make_app_with_state': tests.test_remote_sync_target.make_http_app,
+ 'do_sync': sync_via_synchronizer_and_leap,
+}))
+
+
+class SQLCipherDatabaseSyncTests(test_sync.DatabaseSyncTests):
+
+ scenarios = sync_scenarios
+
+
+def _make_local_db_and_leap_target(test, path='test'):
+ test.startServer()
+ db = test.request_state._create_database(os.path.basename(path))
+ st = LeapSyncTarget.connect(test.getURL(path))
+ return db, st
+
+
+target_scenarios = [
+ ('leap', {
+ 'create_db_and_target': _make_local_db_and_leap_target,
+ 'make_app_with_state': tests.test_remote_sync_target.make_http_app}),
+]
+
+
+class SQLCipherSyncTargetTests(test_sync.DatabaseSyncTargetTests):
+
+ scenarios = (tests.multiply_scenarios(SQLCIPHER_SCENARIOS,
+ target_scenarios))
+
+
+#-----------------------------------------------------------------------------
# Tests for actual encryption of the database
#-----------------------------------------------------------------------------
@@ -372,3 +435,6 @@ class SQLCipherEncryptionTest(unittest.TestCase):
"non-encrypted dbs.")
except DatabaseIsNotEncrypted:
pass
+
+
+load_tests = tests.load_with_scenarios