diff options
| -rw-r--r-- | testing/setup.py | 2 | ||||
| -rw-r--r-- | testing/test_soledad/u1db_tests/test_open.py | 15 | ||||
| -rw-r--r-- | testing/test_soledad/util.py | 13 | ||||
| -rw-r--r-- | testing/tests/client/test_app.py | 8 | ||||
| -rw-r--r-- | testing/tests/client/test_doc.py | 4 | ||||
| -rw-r--r-- | testing/tests/client/test_https.py | 4 | ||||
| -rw-r--r-- | testing/tests/conftest.py | 5 | ||||
| -rw-r--r-- | testing/tests/couch/test_atomicity.py | 4 | ||||
| -rw-r--r-- | testing/tests/couch/test_command.py | 8 | ||||
| -rw-r--r-- | testing/tests/server/test_server.py | 7 | ||||
| -rw-r--r-- | testing/tests/sqlcipher/test_backend.py | 58 | ||||
| -rw-r--r-- | testing/tests/sync/test_sync.py | 2 | ||||
| -rw-r--r-- | testing/tests/sync/test_sync_mutex.py | 4 | 
13 files changed, 50 insertions, 84 deletions
| diff --git a/testing/setup.py b/testing/setup.py index 059b2489..c1204c9a 100644 --- a/testing/setup.py +++ b/testing/setup.py @@ -5,5 +5,5 @@ from setuptools import find_packages  setup(      name='test_soledad',      packages=find_packages('.'), -    package_data={'': ['*.conf']} +    package_data={'': ['*.conf', 'u1db_tests/testing-certs/*']}  ) diff --git a/testing/test_soledad/u1db_tests/test_open.py b/testing/test_soledad/u1db_tests/test_open.py index 30d4de00..b572fba0 100644 --- a/testing/test_soledad/u1db_tests/test_open.py +++ b/testing/test_soledad/u1db_tests/test_open.py @@ -18,24 +18,25 @@  """Test u1db.open"""  import os +import pytest +  from unittest import skip -from leap.soledad.common.l2db import ( -    errors, open as u1db_open, -)  from test_soledad import u1db_tests as tests +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 test_soledad.u1db_tests.test_backends \ -    import TestAlternativeDocument  @skip("Skiping tests imported from U1DB.") +@pytest.mark.usefixtures('method_tmpdir')  class TestU1DBOpen(tests.TestCase):      def setUp(self):          super(TestU1DBOpen, self).setUp() -        tmpdir = self.createTempDir() -        self.db_path = tmpdir + '/test.db' +        self.db_path = self.tempdir + '/test.db'      def test_open_no_create(self):          self.assertRaises(errors.DatabaseDoesNotExist, diff --git a/testing/test_soledad/util.py b/testing/test_soledad/util.py index e23d185e..d53f6cda 100644 --- a/testing/test_soledad/util.py +++ b/testing/test_soledad/util.py @@ -22,8 +22,6 @@ Utilities used by multiple test suites.  import os -import tempfile -import shutil  import random  import string  import couchdb @@ -43,7 +41,6 @@ from leap.soledad.common import l2db  from leap.soledad.common.l2db import sync  from leap.soledad.common.l2db.remote import http_database -from leap.soledad.common import soledad_assert  from leap.soledad.common.document import SoledadDocument  from leap.soledad.common.couch import CouchDatabase  from leap.soledad.common.couch.state import CouchServerState @@ -226,6 +223,7 @@ class BaseSoledadTest(BaseLeapTest, MockedSharedDBTest):      """      defer_sync_encryption = False +    @pytest.mark.usefixtures("method_tmpdir")      def setUp(self):          # The following snippet comes from BaseLeapTest.setUpClass, but we          # repeat it here because twisted.trial does not work with @@ -233,7 +231,6 @@ class BaseSoledadTest(BaseLeapTest, MockedSharedDBTest):          self.old_path = os.environ['PATH']          self.old_home = os.environ['HOME'] -        self.tempdir = tempfile.mkdtemp(prefix="leap_tests-")          self.home = self.tempdir          bin_tdir = os.path.join(              self.tempdir, @@ -276,14 +273,6 @@ class BaseSoledadTest(BaseLeapTest, MockedSharedDBTest):                        self._soledad.secrets.secrets_path]:                  if os.path.isfile(f):                      os.unlink(f) -            # The following snippet comes from BaseLeapTest.setUpClass, but we -            # repeat it here because twisted.trial does not work with -            # setUpClass/tearDownClass. -            soledad_assert( -                self.tempdir.startswith('/tmp/leap_tests-'), -                "beware! tried to remove a dir which does not " -                "live in temporal folder!") -            shutil.rmtree(self.tempdir)          from twisted.internet import reactor          reactor.addSystemEventTrigger( diff --git a/testing/tests/client/test_app.py b/testing/tests/client/test_app.py index fef2f371..6867473e 100644 --- a/testing/tests/client/test_app.py +++ b/testing/tests/client/test_app.py @@ -17,6 +17,8 @@  """  Test ObjectStore and Couch backend bits.  """ +import pytest +  from testscenarios import TestWithScenarios  from test_soledad.util import BaseSoledadTest @@ -31,9 +33,15 @@ from test_soledad.u1db_tests import test_backends  # The following tests come from `u1db.tests.test_backends`.  # ----------------------------------------------------------------------------- +@pytest.mark.usefixtures('method_tmpdir')  class SoledadTests(          TestWithScenarios, test_backends.AllDatabaseTests, BaseSoledadTest): +    def setUp(self): +        TestWithScenarios.setUp(self) +        test_backends.AllDatabaseTests.setUp(self) +        BaseSoledadTest.setUp(self) +      scenarios = [          ('token_http', {              'make_database_for_test': make_token_http_database_for_test, diff --git a/testing/tests/client/test_doc.py b/testing/tests/client/test_doc.py index e158d768..36479e90 100644 --- a/testing/tests/client/test_doc.py +++ b/testing/tests/client/test_doc.py @@ -17,6 +17,8 @@  """  Test Leap backend bits: soledad docs  """ +import pytest +  from testscenarios import TestWithScenarios  from test_soledad.u1db_tests import test_document @@ -28,6 +30,7 @@ from test_soledad.util import make_soledad_document_for_test  # The following tests come from `u1db.tests.test_document`.  # ----------------------------------------------------------------------------- +@pytest.mark.usefixtures('method_tmpdir')  class TestSoledadDocument(          TestWithScenarios,          test_document.TestDocument, BaseSoledadTest): @@ -37,6 +40,7 @@ class TestSoledadDocument(              'make_document_for_test': make_soledad_document_for_test})]) +@pytest.mark.usefixtures('method_tmpdir')  class TestSoledadPyDocument(          TestWithScenarios,          test_document.TestPyDocument, BaseSoledadTest): diff --git a/testing/tests/client/test_https.py b/testing/tests/client/test_https.py index caac16da..1b6caed6 100644 --- a/testing/tests/client/test_https.py +++ b/testing/tests/client/test_https.py @@ -17,7 +17,7 @@  """  Test Leap backend bits: https  """ -from unittest import skip +import pytest  from testscenarios import TestWithScenarios @@ -62,7 +62,7 @@ def token_leap_https_sync_target(test, host, path, cert_file=None):      return st -@skip("Skiping tests imported from U1DB.") +@pytest.mark.skip  class TestSoledadHTTPSyncTargetHttpsSupport(          TestWithScenarios,          # test_https.TestHttpSyncTargetHttpsSupport, diff --git a/testing/tests/conftest.py b/testing/tests/conftest.py index 3be9ba2a..9e4319ac 100644 --- a/testing/tests/conftest.py +++ b/testing/tests/conftest.py @@ -11,3 +11,8 @@ def pytest_addoption(parser):  def couch_url(request):      url = request.config.getoption('--couch-url')      request.cls.couch_url = url + + +@pytest.fixture +def method_tmpdir(request, tmpdir): +    request.instance.tempdir = tmpdir.strpath diff --git a/testing/tests/couch/test_atomicity.py b/testing/tests/couch/test_atomicity.py index 3badfb19..a3ae0314 100644 --- a/testing/tests/couch/test_atomicity.py +++ b/testing/tests/couch/test_atomicity.py @@ -18,7 +18,7 @@  Test atomicity of couch operations.  """  import os -import tempfile +import pytest  import threading  from urlparse import urljoin @@ -41,6 +41,7 @@ from test_soledad.u1db_tests import TestCaseWithServer  REPEAT_TIMES = 20 +@pytest.mark.usefixtures('method_tmpdir')  class CouchAtomicityTestCase(CouchDBTestCase, TestCaseWithServer):      @staticmethod @@ -91,7 +92,6 @@ class CouchAtomicityTestCase(CouchDBTestCase, TestCaseWithServer):              urljoin(self.couch_url, 'user-' + self.user),              create=True,              replica_uid='replica') -        self.tempdir = tempfile.mkdtemp(prefix="leap_tests-")          self.startTwistedServer()      def tearDown(self): diff --git a/testing/tests/couch/test_command.py b/testing/tests/couch/test_command.py index f61e118d..6a96ebf9 100644 --- a/testing/tests/couch/test_command.py +++ b/testing/tests/couch/test_command.py @@ -1,6 +1,6 @@  from twisted.trial import unittest -from leap.soledad.common import couch +from leap.soledad.common.couch import state as couch_state  from leap.soledad.common.l2db import errors as u1db_errors  from mock import Mock @@ -9,7 +9,7 @@ from mock import Mock  class CommandBasedDBCreationTest(unittest.TestCase):      def test_ensure_db_using_custom_command(self): -        state = couch.state.CouchServerState("url", create_cmd="echo") +        state = couch_state.CouchServerState("url", create_cmd="/bin/echo")          mock_db = Mock()          mock_db.replica_uid = 'replica_uid'          state.open_database = Mock(return_value=mock_db) @@ -18,11 +18,11 @@ class CommandBasedDBCreationTest(unittest.TestCase):          self.assertEquals(mock_db.replica_uid, replica_uid)      def test_raises_unauthorized_on_failure(self): -        state = couch.state.CouchServerState("url", create_cmd="inexistent") +        state = couch_state.CouchServerState("url", create_cmd="inexistent")          self.assertRaises(u1db_errors.Unauthorized,                            state.ensure_database, "user-1337")      def test_raises_unauthorized_by_default(self): -        state = couch.state.CouchServerState("url") +        state = couch_state.CouchServerState("url")          self.assertRaises(u1db_errors.Unauthorized,                            state.ensure_database, "user-1337") diff --git a/testing/tests/server/test_server.py b/testing/tests/server/test_server.py index 49d25ed0..18f92d88 100644 --- a/testing/tests/server/test_server.py +++ b/testing/tests/server/test_server.py @@ -20,7 +20,7 @@ Tests for server-related functionality.  import binascii  import mock  import os -import tempfile +import pytest  from hashlib import sha512  from pkg_resources import resource_filename @@ -287,6 +287,7 @@ class ServerAuthorizationTestCase(BaseSoledadTest):                  self._make_environ('/%s/sync-from/x' % dbname, 'POST'))) +@pytest.mark.usefixtures("method_tmpdir")  class EncryptedSyncTestCase(          CouchDBTestCase, TestCaseWithServer): @@ -349,11 +350,7 @@ class EncryptedSyncTestCase(          return self.make_app_with_state(self.request_state)      def setUp(self): -        # the order of the following initializations is crucial because of -        # dependencies. -        # XXX explain better          CouchDBTestCase.setUp(self) -        self.tempdir = tempfile.mkdtemp(prefix="leap_tests-")          TestCaseWithServer.setUp(self)      def tearDown(self): diff --git a/testing/tests/sqlcipher/test_backend.py b/testing/tests/sqlcipher/test_backend.py index 11472d46..caacba0d 100644 --- a/testing/tests/sqlcipher/test_backend.py +++ b/testing/tests/sqlcipher/test_backend.py @@ -18,10 +18,9 @@  Test sqlcipher backend internals.  """  import os +import pytest  import time  import threading -import tempfile -import shutil  from pysqlcipher import dbapi2  from testscenarios import TestWithScenarios @@ -33,7 +32,6 @@ from leap.soledad.common.l2db.backends.sqlite_backend \      import SQLitePartialExpandDatabase  # soledad stuff. -from leap.soledad.common import soledad_assert  from leap.soledad.common.document import SoledadDocument  from leap.soledad.client.sqlcipher import SQLCipherDatabase  from leap.soledad.client.sqlcipher import SQLCipherOptions @@ -109,6 +107,7 @@ class SQLCipherIndexTests(  # The following tests come from `u1db.tests.test_sqlite_backend`.  # ----------------------------------------------------------------------------- +@pytest.mark.usefixtures('method_tmpdir')  class TestSQLCipherDatabase(tests.TestCase):      """      Tests from u1db.tests.test_sqlite_backend.TestSQLiteDatabase. @@ -117,8 +116,7 @@ class TestSQLCipherDatabase(tests.TestCase):      def test_atomic_initialize(self):          # This test was modified to ensure that db2.close() is called within          # the thread that created the database. -        tmpdir = self.createTempDir() -        dbname = os.path.join(tmpdir, 'atomic.db') +        dbname = os.path.join(self.tempdir, 'atomic.db')          t2 = None  # will be a thread @@ -164,6 +162,7 @@ class TestSQLCipherDatabase(tests.TestCase):          db1.close() +@pytest.mark.usefixtures('method_tmpdir')  class TestSQLCipherPartialExpandDatabase(tests.TestCase):      """      Tests from u1db.tests.test_sqlite_backend.TestSQLitePartialExpandDatabase. @@ -226,8 +225,7 @@ class TestSQLCipherPartialExpandDatabase(tests.TestCase):          pass      def test__open_database_non_existent(self): -        temp_dir = self.createTempDir(prefix='u1db-test-') -        path = temp_dir + '/non-existent.sqlite' +        path = self.tempdir + '/non-existent.sqlite'          self.assertRaises(errors.DatabaseDoesNotExist,                            sqlcipher_open,                            path, PASSWORD, create=False) @@ -243,8 +241,7 @@ class TestSQLCipherPartialExpandDatabase(tests.TestCase):          # This test was modified to ensure that an empty database file will          # raise a DatabaseIsNotEncrypted exception instead of a          # dbapi2.OperationalError exception. -        temp_dir = self.createTempDir(prefix='u1db-test-') -        path1 = temp_dir + '/invalid1.db' +        path1 = self.tempdir + '/invalid1.db'          with open(path1, 'wb') as f:              f.write("")          self.assertRaises(DatabaseIsNotEncrypted, @@ -270,8 +267,7 @@ class TestSQLCipherPartialExpandDatabase(tests.TestCase):      def test_open_database_create(self):          # SQLCipherDatabas has no open_database() method, so we just test for          # the actual database constructor effects. -        temp_dir = self.createTempDir(prefix='u1db-test-') -        path = temp_dir + '/new.sqlite' +        path = self.tempdir + '/new.sqlite'          db1 = sqlcipher_open(path, PASSWORD, create=True)          db2 = sqlcipher_open(path, PASSWORD, create=False)          self.assertIsInstance(db2, SQLCipherDatabase) @@ -395,8 +391,7 @@ class TestSQLCipherPartialExpandDatabase(tests.TestCase):                           c.fetchall())      def test__ensure_schema_rollback(self): -        temp_dir = self.createTempDir(prefix='u1db-test-') -        path = temp_dir + '/rollback.db' +        path = self.tempdir + '/rollback.db'          class SQLitePartialExpandDbTesting(SQLCipherDatabase): @@ -414,15 +409,13 @@ class TestSQLCipherPartialExpandDatabase(tests.TestCase):          db._initialize(db._db_handle.cursor())      def test_open_database_non_existent(self): -        temp_dir = self.createTempDir(prefix='u1db-test-') -        path = temp_dir + '/non-existent.sqlite' +        path = self.tempdir + '/non-existent.sqlite'          self.assertRaises(errors.DatabaseDoesNotExist,                            sqlcipher_open, path, "123",                            create=False)      def test_delete_database_existent(self): -        temp_dir = self.createTempDir(prefix='u1db-test-') -        path = temp_dir + '/new.sqlite' +        path = self.tempdir + '/new.sqlite'          db = sqlcipher_open(path, "123", create=True)          db.close()          SQLCipherDatabase.delete_database(path) @@ -431,8 +424,7 @@ class TestSQLCipherPartialExpandDatabase(tests.TestCase):                            create=False)      def test_delete_database_nonexistent(self): -        temp_dir = self.createTempDir(prefix='u1db-test-') -        path = temp_dir + '/non-existent.sqlite' +        path = self.tempdir + '/non-existent.sqlite'          self.assertRaises(errors.DatabaseDoesNotExist,                            SQLCipherDatabase.delete_database, path) @@ -630,37 +622,13 @@ class SQLCipherEncryptionTests(BaseSoledadTest):                  os.unlink(dbfile)      def setUp(self): -        # the following come from BaseLeapTest.setUpClass, because -        # twisted.trial doesn't support such class methods for setting up -        # test classes. -        self.old_path = os.environ['PATH'] -        self.old_home = os.environ['HOME'] -        self.tempdir = tempfile.mkdtemp(prefix="leap_tests-") -        self.home = self.tempdir -        bin_tdir = os.path.join( -            self.tempdir, -            'bin') -        os.environ["PATH"] = bin_tdir -        os.environ["HOME"] = self.tempdir -        # this is our own stuff +        BaseSoledadTest.setUp(self)          self.DB_FILE = os.path.join(self.tempdir, 'test.db')          self._delete_dbfiles()      def tearDown(self):          self._delete_dbfiles() -        # the following come from BaseLeapTest.tearDownClass, because -        # twisted.trial doesn't support such class methods for tearing down -        # test classes. -        os.environ["PATH"] = self.old_path -        os.environ["HOME"] = self.old_home -        # safety check! please do not wipe my home... -        # XXX needs to adapt to non-linuces -        soledad_assert( -            self.tempdir.startswith('/tmp/leap_tests-') or -            self.tempdir.startswith('/var/folder'), -            "beware! tried to remove a dir which does not " -            "live in temporal folder!") -        shutil.rmtree(self.tempdir) +        BaseSoledadTest.tearDown(self)      def test_try_to_open_encrypted_db_with_sqlite_backend(self):          """ diff --git a/testing/tests/sync/test_sync.py b/testing/tests/sync/test_sync.py index 5540b7cb..5290003e 100644 --- a/testing/tests/sync/test_sync.py +++ b/testing/tests/sync/test_sync.py @@ -15,7 +15,6 @@  # You should have received a copy of the GNU General Public License  # along with this program. If not, see <http://www.gnu.org/licenses/>.  import json -import tempfile  import threading  import time @@ -60,7 +59,6 @@ class InterruptableSyncTestCase(      def setUp(self):          TestCaseWithServer.setUp(self)          CouchDBTestCase.setUp(self) -        self.tempdir = tempfile.mkdtemp(prefix="leap_tests-")      def tearDown(self):          CouchDBTestCase.tearDown(self) diff --git a/testing/tests/sync/test_sync_mutex.py b/testing/tests/sync/test_sync_mutex.py index 261c6485..2626ab2a 100644 --- a/testing/tests/sync/test_sync_mutex.py +++ b/testing/tests/sync/test_sync_mutex.py @@ -24,8 +24,6 @@ be two concurrent synchronization processes at the same time.  import time  import uuid -import tempfile -import shutil  from urlparse import urljoin @@ -91,13 +89,11 @@ class TestSyncMutex(      def setUp(self):          TestCaseWithServer.setUp(self)          CouchDBTestCase.setUp(self) -        self.tempdir = tempfile.mkdtemp(prefix="leap_tests-")          self.user = ('user-%s' % uuid.uuid4().hex)      def tearDown(self):          CouchDBTestCase.tearDown(self)          TestCaseWithServer.tearDown(self) -        shutil.rmtree(self.tempdir)      def test_two_concurrent_syncs_do_not_overlap_no_docs(self):          self.startServer() | 
