# -*- coding: utf-8 -*- # test_soledad.py # Copyright (C) 2013 LEAP # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ Tests for general Soledad functionality. """ import os import re import tempfile import simplejson as json from leap.common.testing.basetest import BaseLeapTest from leap.soledad.tests import BaseSoledadTest 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 class AuxMethodsTestCase(BaseSoledadTest): def test__init_dirs(self): sol = self._soledad_instance(prefix='_init_dirs') sol._init_dirs() local_db_dir = os.path.dirname(sol.local_db_path) secrets_path = os.path.dirname(sol.secrets_path) self.assertTrue(os.path.isdir(local_db_dir)) self.assertTrue(os.path.isdir(secrets_path)) def test__init_db(self): sol = self._soledad_instance() sol._init_dirs() sol._crypto = SoledadCrypto(sol) #self._soledad._gpg.import_keys(PUBLIC_KEY) if not sol._has_secret(): sol._gen_secret() sol._load_secrets() sol._init_db() from leap.soledad.backends.sqlcipher import SQLCipherDatabase self.assertIsInstance(sol._db, SQLCipherDatabase) def test__init_config_defaults(self): """ Test if configuration defaults point to the correct place. """ class SoledadMock(Soledad): def __init__(self): pass # instantiate without initializing so we just test _init_config() sol = SoledadMock() Soledad._init_config(sol, None, None, '') # assert value of secrets_path self.assertEquals( os.path.join( sol.DEFAULT_PREFIX, Soledad.STORAGE_SECRETS_FILE_NAME), sol.secrets_path) # assert value of local_db_path self.assertEquals( os.path.join(sol.DEFAULT_PREFIX, 'soledad.u1db'), sol.local_db_path) def test__init_config_from_params(self): """ Test if configuration is correctly read from file. """ sol = self._soledad_instance( 'leap@leap.se', passphrase='123', secrets_path='value_3', local_db_path='value_2', server_url='value_1', cert_file=None) self.assertEqual( os.path.join(self.tempdir, 'value_3'), sol.secrets_path) self.assertEqual( os.path.join(self.tempdir, 'value_2'), sol.local_db_path) self.assertEqual('value_1', sol.server_url) class SoledadSharedDBTestCase(BaseSoledadTest): """ These tests ensure the functionalities of the shared recovery database. """ def setUp(self): BaseSoledadTest.setUp(self) self._shared_db = SoledadSharedDatabase( 'https://provider/', LeapDocument, None) def test__get_secrets_from_shared_db(self): """ Ensure the shared db is queried with the correct doc_id. """ doc_id = self._soledad._uuid_hash() self._soledad._get_secrets_from_shared_db() self.assertTrue( self._soledad._shared_db().get_doc.assert_called_with( doc_id) is None, 'Wrong doc_id when fetching recovery document.') def test__put_secrets_in_shared_db(self): """ Ensure recovery document is put into shared recover db. """ doc_id = self._soledad._uuid_hash() self._soledad._put_secrets_in_shared_db() self.assertTrue( self._soledad._shared_db().get_doc.assert_called_with( doc_id) is None, 'Wrong doc_id when fetching recovery document.') self.assertTrue( self._soledad._shared_db.put_doc.assert_called_with( self._doc_put) is None, 'Wrong document when putting recovery document.') self.assertTrue( self._doc_put.doc_id == doc_id, 'Wrong doc_id when putting recovery document.')