summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/src/leap/soledad/client/http_target.py7
-rw-r--r--common/src/leap/soledad/common/tests/test_sync_target.py51
2 files changed, 26 insertions, 32 deletions
diff --git a/client/src/leap/soledad/client/http_target.py b/client/src/leap/soledad/client/http_target.py
index f5d8ef1c..31729e2c 100644
--- a/client/src/leap/soledad/client/http_target.py
+++ b/client/src/leap/soledad/client/http_target.py
@@ -527,8 +527,11 @@ class SoledadHTTPSyncTarget(SyncTarget):
raise errors.BrokenSyncStream
data = parts[1:-1]
# decode metadata
- line, comma = utils.check_and_strip_comma(data[0])
- metadata = None
+ try:
+ line, comma = utils.check_and_strip_comma(data[0])
+ metadata = None
+ except (IndexError):
+ raise errors.BrokenSyncStream
try:
metadata = json.loads(line)
new_generation = metadata['new_generation']
diff --git a/common/src/leap/soledad/common/tests/test_sync_target.py b/common/src/leap/soledad/common/tests/test_sync_target.py
index 070ead3e..21ead889 100644
--- a/common/src/leap/soledad/common/tests/test_sync_target.py
+++ b/common/src/leap/soledad/common/tests/test_sync_target.py
@@ -56,7 +56,7 @@ from leap.soledad.common.tests.u1db_tests import test_sync
# The following tests come from `u1db.tests.test_remote_sync_target`.
# -----------------------------------------------------------------------------
-class TestSoledadParsingSyncStream(
+class TestSoledadParseReceivedDocResponse(
test_remote_sync_target.TestParsingSyncStream,
BaseSoledadTest):
@@ -112,49 +112,40 @@ class TestSoledadParsingSyncStream(
self.target._parse_received_doc_response("")
def test_wrong_end(self):
- tgt = target.SoledadHTTPSyncTarget("http://foo/foo")
-
- self.assertRaises(u1db.errors.BrokenSyncStream,
- tgt._parse_sync_stream, "[\r\n{}", None)
+ with self.assertRaises(u1db.errors.BrokenSyncStream):
+ self.target._parse_received_doc_response("[\r\n{}")
- self.assertRaises(u1db.errors.BrokenSyncStream,
- tgt._parse_sync_stream, "[\r\n", None)
+ with self.assertRaises(u1db.errors.BrokenSyncStream):
+ self.target._parse_received_doc_response("[\r\n")
def test_missing_comma(self):
- tgt = target.SoledadHTTPSyncTarget("http://foo/foo")
-
- self.assertRaises(u1db.errors.BrokenSyncStream,
- tgt._parse_sync_stream,
- '[\r\n{}\r\n{"id": "i", "rev": "r", '
- '"content": "c", "gen": 3}\r\n]', None)
+ with self.assertRaises(u1db.errors.BrokenSyncStream):
+ self.target._parse_received_doc_response(
+ '[\r\n{}\r\n{"id": "i", "rev": "r", '
+ '"content": "c", "gen": 3}\r\n]')
def test_no_entries(self):
- tgt = target.SoledadHTTPSyncTarget("http://foo/foo")
-
- self.assertRaises(u1db.errors.BrokenSyncStream,
- tgt._parse_sync_stream, "[\r\n]", None)
+ with self.assertRaises(u1db.errors.BrokenSyncStream):
+ self.target._parse_received_doc_response("[\r\n]")
def test_error_in_stream(self):
- tgt = target.SoledadHTTPSyncTarget("http://foo/foo")
-
- self.assertRaises(u1db.errors.Unavailable,
- tgt._parse_sync_stream,
- '[\r\n{"new_generation": 0},'
- '\r\n{"error": "unavailable"}\r\n', None)
-
- self.assertRaises(u1db.errors.Unavailable,
- tgt._parse_sync_stream,
- '[\r\n{"error": "unavailable"}\r\n', None)
+ with self.assertRaises(u1db.errors.BrokenSyncStream):
+ self.target._parse_received_doc_response(
+ '[\r\n{"new_generation": 0},'
+ '\r\n{"error": "unavailable"}\r\n')
- self.assertRaises(u1db.errors.BrokenSyncStream,
- tgt._parse_sync_stream,
- '[\r\n{"error": "?"}\r\n', None)
+ with self.assertRaises(u1db.errors.BrokenSyncStream):
+ self.target._parse_received_doc_response(
+ '[\r\n{"error": "unavailable"}\r\n')
+ with self.assertRaises(u1db.errors.BrokenSyncStream):
+ self.target._parse_received_doc_response('[\r\n{"error": "?"}\r\n')
#
# functions for TestRemoteSyncTargets
#
+
def make_local_db_and_soledad_target(test, path='test'):
test.startServer()
db = test.request_state._create_database(os.path.basename(path))