import pwman.util.config as config
import os
from pwman.util.crypto_engine import (CryptoEngine, CryptoException)
# set cls_timout to negative number (e.g. -1) to disable
default_config = {'Global': {'umask': '0100', 'colors': 'yes',
                             'cls_timeout': '5'
                             },
                  'Database': {'type': 'SQLite',
                               'filename': os.path.join("tests", "pwman.db")},
                  'Encryption': {'algorithm': 'AES'},
                  'Readline': {'history': os.path.join("tests",
                                                       "history")}
                  }

config.set_defaults(default_config)
import unittest


class CryptoTest(unittest.TestCase):

    def test_no_algorithm(self):
        CryptoEngine._instance_new = None
        config.set_value('Encryption', 'algorithm', '')
        self.assertRaises((CryptoException,), CryptoEngine.get)
        config.set_value('Encryption', 'algorithm', 'AES')

    def test_getcipher(self):
        crypto = CryptoEngine()
        self.assertRaises((CryptoNoCallbackException,), crypto._getcipher)

    def test_prepare_data(self):
        obj = 'dummy_data'
        self.assertTrue(True)

    def test_get(self):
        CryptoEngine._instance_new = None
        old_engine = CryptoEngine.get(0.4)
        self.assertIsInstance(old_engine, CryptoEngineOld)
        CryptoEngine._instance = None
        new_engine = CryptoEngine.get(dbver=0.5)
        self.assertIsInstance(new_engine, CryptoEngine)
        self.assertFalse(isinstance(new_engine, CryptoEngineOld))
        CryptoEngine._instance = None
        old_engine = CryptoEngine.get()

    def test_alive(self):
        old_engine = CryptoEngine.get()
        self.assertTrue(old_engine.alive())
        old_engine._cipher = None
        self.assertFalse(old_engine.alive())
        CryptoEngine.get()


if __name__ == '__main__':
    unittest.main()