From 28e950c1386059e4c4d78783640666a66221fc5b Mon Sep 17 00:00:00 2001 From: Christoph Mack Date: Mon, 5 Oct 2015 19:41:00 +0200 Subject: [PATCH] Added unit tests for SimpleUserManager, SqliteUserManagerTest, SimpleSessionManager and SqliteSessionManagerTest. --- tests/test_sync_app.py | 150 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) diff --git a/tests/test_sync_app.py b/tests/test_sync_app.py index 7bf7194..4fbfdd0 100644 --- a/tests/test_sync_app.py +++ b/tests/test_sync_app.py @@ -1,9 +1,18 @@ # -*- coding: utf-8 -*- +import binascii +import hashlib +import os +import sqlite3 +import tempfile import unittest -import ankisyncd from ankisyncd.sync_app import SyncCollectionHandler +from ankisyncd.sync_app import SimpleUserManager +from ankisyncd.sync_app import SqliteUserManager +from ankisyncd.sync_app import SyncUserSession +from ankisyncd.sync_app import SimpleSessionManager +from ankisyncd.sync_app import SqliteSessionManager from ankisyncd.sync_app import SyncApp from CollectionTestBase import CollectionTestBase @@ -48,6 +57,145 @@ class SyncCollectionHandlerTest(CollectionTestBase): self.assertEqual(meta['cont'], True) +class SimpleUserManagerTest(unittest.TestCase): + _good_test_un = 'username' + _good_test_pw = 'password' + + _bad_test_un = 'notAUsername' + _bad_test_pw = 'notAPassword' + + def setUp(self): + self._user_manager = SimpleUserManager() + + def tearDown(self): + self._user_manager = None + + def test_authenticate(self): + self.assertTrue(self._user_manager.authenticate(self._good_test_un, + self._good_test_pw)) + + self.assertTrue(self._user_manager.authenticate(self._bad_test_un, + self._bad_test_pw)) + + self.assertTrue(self._user_manager.authenticate(self._good_test_un, + self._bad_test_pw)) + + self.assertTrue(self._user_manager.authenticate(self._bad_test_un, + self._good_test_pw)) + + def test_username2dirname(self): + dirname = self._user_manager.username2dirname(self._good_test_un) + self.assertEqual(dirname, self._good_test_un) + + +class SqliteUserManagerTest(SimpleUserManagerTest): + file_descriptor, _test_auth_db_path = tempfile.mkstemp(suffix=".db") + os.close(file_descriptor) + os.unlink(_test_auth_db_path) + + def _create_test_auth_db(self, db_path, username, password): + if os.path.exists(db_path): + os.remove(db_path) + + salt = binascii.b2a_hex(os.urandom(8)) + crypto_hash = hashlib.sha256(username+password+salt).hexdigest()+salt + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + cursor.execute("""CREATE TABLE IF NOT EXISTS auth + (user VARCHAR PRIMARY KEY, hash VARCHAR)""") + + cursor.execute("INSERT INTO auth VALUES (?, ?)", (username, crypto_hash)) + + conn.commit() + conn.close() + + def setUp(self): + self._create_test_auth_db(self._test_auth_db_path, + self._good_test_un, + self._good_test_pw) + self._user_manager = SqliteUserManager(self._test_auth_db_path) + + def tearDown(self): + if os.path.exists(self._test_auth_db_path): + os.remove(self._test_auth_db_path) + + def test_authenticate(self): + self.assertTrue(self._user_manager.authenticate(self._good_test_un, + self._good_test_pw)) + + self.assertFalse(self._user_manager.authenticate(self._bad_test_un, + self._bad_test_pw)) + + self.assertFalse(self._user_manager.authenticate(self._good_test_un, + self._bad_test_pw)) + + self.assertFalse(self._user_manager.authenticate(self._bad_test_un, + self._good_test_pw)) + + +class SimpleSessionManagerTest(unittest.TestCase): + test_hkey = '1234567890' + test_session = SyncUserSession('testName', 'testPath', None, None) + + def setUp(self): + self.sessionManager = SimpleSessionManager() + + def tearDown(self): + self.sessionManager = None + + def test_save(self): + self.sessionManager.save(self.test_hkey, self.test_session) + self.assertEqual(self.sessionManager.sessions[self.test_hkey].name, + self.test_session.name) + self.assertEqual(self.sessionManager.sessions[self.test_hkey].path, + self.test_session.path) + + def test_delete(self): + self.sessionManager.save(self.test_hkey, self.test_session) + self.assertTrue(self.test_hkey in self.sessionManager.sessions) + + self.sessionManager.delete(self.test_hkey) + + self.assertTrue(self.test_hkey not in self.sessionManager.sessions) + + def test_load(self): + self.sessionManager.save(self.test_hkey, self.test_session) + self.assertTrue(self.test_hkey in self.sessionManager.sessions) + + loaded_session = self.sessionManager.load(self.test_hkey) + self.assertEqual(loaded_session.name, self.test_session.name) + self.assertEqual(loaded_session.path, self.test_session.path) + + +class SqliteSessionManagerTest(SimpleSessionManagerTest): + file_descriptor, _test_sess_db_path = tempfile.mkstemp(suffix=".db") + os.close(file_descriptor) + os.unlink(_test_sess_db_path) + + def setUp(self): + self.sessionManager = SqliteSessionManager(self._test_sess_db_path) + + def tearDown(self): + if os.path.exists(self._test_sess_db_path): + os.remove(self._test_sess_db_path) + + def test_save(self): + SimpleSessionManagerTest.test_save(self) + self.assertTrue(os.path.exists(self._test_sess_db_path)) + + conn = sqlite3.connect(self._test_sess_db_path) + cursor = conn.cursor() + cursor.execute("SELECT user, path FROM session WHERE hkey=?", + (self.test_hkey,)) + res = cursor.fetchone() + conn.close() + + self.assertEqual(res[0], self.test_session.name) + self.assertEqual(res[1], self.test_session.path) + + class SyncAppTest(unittest.TestCase): pass