summaryrefslogtreecommitdiff
path: root/src/leap/soledad
diff options
context:
space:
mode:
Diffstat (limited to 'src/leap/soledad')
-rw-r--r--src/leap/soledad/tests/__init__.py7
-rw-r--r--src/leap/soledad/tests/test_soledad.py167
2 files changed, 170 insertions, 4 deletions
diff --git a/src/leap/soledad/tests/__init__.py b/src/leap/soledad/tests/__init__.py
index c00fb847..9fec5530 100644
--- a/src/leap/soledad/tests/__init__.py
+++ b/src/leap/soledad/tests/__init__.py
@@ -22,6 +22,9 @@ from leap.common.testing.basetest import BaseLeapTest
# instance in each test.
#-----------------------------------------------------------------------------
+ADDRESS = 'leap@leap.se'
+
+
class BaseSoledadTest(BaseLeapTest):
"""
Instantiates Soledad for usage in tests.
@@ -31,7 +34,7 @@ class BaseSoledadTest(BaseLeapTest):
# config info
self.db1_file = os.path.join(self.tempdir, "db1.u1db")
self.db2_file = os.path.join(self.tempdir, "db2.u1db")
- self.email = 'leap@leap.se'
+ self.email = ADDRESS
# open test dbs
self._db1 = u1db.open(self.db1_file, create=True,
document_factory=LeapDocument)
@@ -48,7 +51,7 @@ class BaseSoledadTest(BaseLeapTest):
os.unlink(f)
self._soledad.close()
- def _soledad_instance(self, user='leap@leap.se', passphrase='123',
+ def _soledad_instance(self, user=ADDRESS, passphrase='123',
prefix='',
secrets_path=Soledad.STORAGE_SECRETS_FILE_NAME,
local_db_path='soledad.u1db', server_url='',
diff --git a/src/leap/soledad/tests/test_soledad.py b/src/leap/soledad/tests/test_soledad.py
index 1c0e6d4a..f78d60f0 100644
--- a/src/leap/soledad/tests/test_soledad.py
+++ b/src/leap/soledad/tests/test_soledad.py
@@ -25,14 +25,29 @@ import os
import re
import tempfile
import simplejson as json
+from mock import Mock
from leap.common.testing.basetest import BaseLeapTest
-from leap.soledad.tests import BaseSoledadTest
+from leap.common.events import (
+ server,
+ component,
+ events_pb2 as proto,
+ register,
+ signal,
+)
+from leap.soledad.tests import (
+ BaseSoledadTest,
+ ADDRESS,
+)
+from leap import soledad
from leap.soledad import Soledad
from leap.soledad.crypto import SoledadCrypto
from leap.soledad.shared_db import SoledadSharedDatabase
-from leap.soledad.backends.leap_backend import LeapDocument
+from leap.soledad.backends.leap_backend import (
+ LeapDocument,
+ LeapSyncTarget,
+)
class AuxMethodsTestCase(BaseSoledadTest):
@@ -138,3 +153,151 @@ class SoledadSharedDBTestCase(BaseSoledadTest):
self.assertTrue(
self._doc_put.doc_id == doc_id,
'Wrong doc_id when putting recovery document.')
+
+
+class SoledadSignalingTestCase(BaseSoledadTest):
+ """
+ These tests ensure signals are correctly emmited by Soledad.
+ """
+
+ EVENTS_SERVER_PORT = 8090
+
+ def setUp(self):
+ BaseSoledadTest.setUp(self)
+ # mock signaling
+ soledad.events.signal = Mock()
+
+ def tearDown(self):
+ pass
+
+ def _pop_mock_call(self, mocked):
+ mocked.call_args_list.pop()
+ mocked.mock_calls.pop()
+ mocked.call_args = mocked.call_args_list[-1]
+
+ def test_stage2_bootstrap_signals(self):
+ """
+ Test that a fresh soledad emits all bootstrap signals.
+ """
+ soledad.events.signal.reset_mock()
+ # get a fresh instance so it emits all bootstrap signals
+ sol = self._soledad_instance(
+ secrets_path='alternative.json',
+ local_db_path='alternative.u1db')
+ # reverse call order so we can verify in the order the signals were
+ # expected
+ soledad.events.signal.mock_calls.reverse()
+ soledad.events.signal.call_args = \
+ soledad.events.signal.call_args_list[0]
+ soledad.events.signal.call_args_list.reverse()
+ # assert signals
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DOWNLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DONE_DOWNLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_CREATING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DONE_CREATING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DOWNLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DONE_DOWNLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_UPLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DONE_UPLOADING_KEYS,
+ ADDRESS,
+ )
+
+ def test_stage1_bootstrap_signals(self):
+ """
+ Test that an existent soledad emits some of the bootstrap signals.
+ """
+ soledad.events.signal.reset_mock()
+ # get an existent instance so it emits only some of bootstrap signals
+ sol = self._soledad_instance()
+ # reverse call order so we can verify in the order the signals were
+ # expected
+ soledad.events.signal.mock_calls.reverse()
+ soledad.events.signal.call_args = \
+ soledad.events.signal.call_args_list[0]
+ soledad.events.signal.call_args_list.reverse()
+ # assert signals
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DOWNLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DONE_DOWNLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_UPLOADING_KEYS,
+ ADDRESS,
+ )
+ self._pop_mock_call(soledad.events.signal)
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DONE_UPLOADING_KEYS,
+ ADDRESS,
+ )
+
+
+ def test_sync_signals(self):
+ """
+ Test Soledad emits SOLEDAD_CREATING_KEYS signal.
+ """
+ soledad.events.signal.reset_mock()
+ # get a fresh instance so it emits all bootstrap signals
+ sol = self._soledad_instance()
+ # mock the actual db sync so soledad does not try to connect to the
+ # server
+ sol._db.sync = Mock()
+ # do the sync
+ sol.sync()
+ # assert the signal has been emitted
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_DONE_DATA_SYNC,
+ ADDRESS,
+ )
+
+ def test_need_sync_signals(self):
+ """
+ Test Soledad emits SOLEDAD_CREATING_KEYS signal.
+ """
+ soledad.events.signal.reset_mock()
+ sol = self._soledad_instance()
+ # mock the sync target
+ LeapSyncTarget.get_sync_info = Mock(return_value=[0,0,0,0,2])
+ # mock our generation so soledad thinks there's new data to sync
+ sol._db._get_generation = Mock(return_value=1)
+ # check for new data to sync
+ sol.need_sync('http://provider/userdb')
+ # assert the signal has been emitted
+ soledad.events.signal.assert_called_with(
+ proto.SOLEDAD_NEW_DATA_TO_SYNC,
+ ADDRESS,
+ )