diff options
| -rw-r--r-- | src/leap/soledad/common/couch/check.py | 29 | ||||
| -rw-r--r-- | tests/couch/test_state.py | 23 | 
2 files changed, 26 insertions, 26 deletions
| diff --git a/src/leap/soledad/common/couch/check.py b/src/leap/soledad/common/couch/check.py index f55dd6f6..93fc1d66 100644 --- a/src/leap/soledad/common/couch/check.py +++ b/src/leap/soledad/common/couch/check.py @@ -18,7 +18,6 @@  Database schema version verification  """ -import os  import treq  from six.moves.urllib.parse import urljoin @@ -84,13 +83,6 @@ def _check_db_schema_version(url, db, auth, agent=None):              raise WrongCouchSchemaVersionError(db) -def _stop(failure, reactor): -    logger.error("Failure while checking schema versions: %r - %s" -                 % (failure, failure.message)) -    reactor.addSystemEventTrigger('after', 'shutdown', os._exit, 1) -    reactor.stop() - -  @defer.inlineCallbacks  def check_schema_versions(couch_url, agent=None, reactor=reactor):      """ @@ -107,17 +99,26 @@ def check_schema_versions(couch_url, agent=None, reactor=reactor):      url = urlsplit(couch_url)      auth = (url.username, url.password) if url.username else None      url = "%s://%s:%d" % (url.scheme, url.hostname, url.port) -    res = yield treq.get(urljoin(url, '_all_dbs'), auth=auth, agent=agent) -    dbs = yield res.json() +    try: +        res = yield treq.get(urljoin(url, '_all_dbs'), auth=auth, agent=agent) +        dbs = yield res.json() +    except Exception as e: +        logger.error('Error trying to get list of dbs from %s: %r' +                     % (url, e)) +        raise e      deferreds = []      semaphore = defer.DeferredSemaphore(20) -    logger.info('Starting schema versions check...') +    logger.info('Starting CouchDB schema versions check...')      for db in dbs:          if not db.startswith('user-'):              continue          d = semaphore.run(_check_db_schema_version, url, db, auth, agent=agent) -        d.addErrback(_stop, reactor=reactor)          deferreds.append(d)      d = defer.gatherResults(deferreds, consumeErrors=True) -    d.addCallback(lambda _: logger.info('Finished schema versions check.')) -    yield d +    try: +        yield d +        logger.info('Finished CouchDB schema versions check.') +    except Exception as e: +        msg = 'Error checking CouchDB schema versions: %r' % e +        logger.error(msg) +        raise Exception(msg) diff --git a/tests/couch/test_state.py b/tests/couch/test_state.py index d978fe56..8b06676d 100644 --- a/tests/couch/test_state.py +++ b/tests/couch/test_state.py @@ -1,4 +1,3 @@ -import mock  import pytest  from leap.soledad.common.couch import CONFIG_DOC_ID @@ -17,7 +16,7 @@ from twisted.internet import reactor  from twisted.web.client import HTTPConnectionPool, Agent -class CouchDesignDocsTests(CouchDBTestCase): +class CouchStateTests(CouchDBTestCase):      def setUp(self):          CouchDBTestCase.setUp(self) @@ -40,14 +39,14 @@ class CouchDesignDocsTests(CouchDBTestCase):                  self.couch_url, self.db.name, None, agent=self.agent)      @defer.inlineCallbacks -    def test_check_schema_versions_wrong_schema_version_stops_reactor(self): +    def test_check_schema_versions_wrong_schema_version_raises(self):          wrong_schema_version = SCHEMA_VERSION + 1          self.db.create(              {'_id': CONFIG_DOC_ID, SCHEMA_VERSION_KEY: wrong_schema_version}) -        mocked_reactor = mock.Mock() -        yield check_schema_versions( -            self.couch_url, agent=self.agent, reactor=mocked_reactor) -        mocked_reactor.stop.assert_called() +        expected_msg = 'Error checking CouchDB schema versions: ' \ +                       'FirstError.*WrongCouchSchemaVersionError()' +        with pytest.raises(Exception, match=expected_msg): +            yield check_schema_versions(self.couch_url, agent=self.agent)      @defer.inlineCallbacks      def test__check_db_schema_version_missing_config_doc_raises(self): @@ -57,9 +56,9 @@ class CouchDesignDocsTests(CouchDBTestCase):                  self.couch_url, self.db.name, None, agent=self.agent)      @defer.inlineCallbacks -    def test_check_schema_versions_missing_config_doc_stops_reactor(self): +    def test_check_schema_versions_missing_config_doc_raises(self):          self.db.create({}) -        mocked_reactor = mock.Mock() -        yield check_schema_versions( -            self.couch_url, agent=self.agent, reactor=mocked_reactor) -        mocked_reactor.stop.assert_called() +        expected_msg = 'Error checking CouchDB schema versions: ' \ +                       'FirstError.*MissingCouchConfigDocumentError()' +        with pytest.raises(Exception, match=expected_msg): +            yield check_schema_versions(self.couch_url, agent=self.agent) | 
