ソースを参照

Add more testing for SQLite driver

oz123 11 年 前
コミット
e28b541487
3 ファイル変更43 行追加25 行削除
  1. 20 23
      pwman/data/drivers/sqlite.py
  2. 19 1
      pwman/tests/db_tests.py
  3. 4 1
      pwman/tests/test_pwman.py

+ 20 - 23
pwman/data/drivers/sqlite.py

@@ -47,24 +47,21 @@ def check_db_version():
 class SQLiteDatabaseNewForm(Database):
     """SQLite Database implementation"""
 
-    def __init__(self, filename=None):
+    def __init__(self):
         """Initialise SQLitePwmanDatabase instance."""
         Database.__init__(self)
-        if filename:
-            self._filename = filename
-        else:
-            try:
-                self._filename = config.get_value('Database', 'filename')
-            except KeyError, e:
-                raise DatabaseException(
-                    "SQLite: missing parameter [%s]" % (e))
+        # error handling is implemented in config.get_value
+        # so there's no need to try... except here...
+        self._filename = config.get_value('Database', 'filename')
+        if not self._filename:
+            raise DatabaseException("SQLite: missing config parameter: filename")
 
     def _open(self):
         try:
             self._con = sqlite.connect(self._filename)
             self._cur = self._con.cursor()
             self._checktables()
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             raise DatabaseException("SQLite: %s" % (e))
 
     def close(self):
@@ -108,9 +105,9 @@ class SQLiteDatabaseNewForm(Database):
                 tags.append(tagstring)
                 row = self._cur.fetchone()
             return tags
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             raise DatabaseException("SQLite: %s" % (e))
-        except sqlite.InterfaceError, e:
+        except sqlite.InterfaceError, e:  # pragma: no cover
             raise e
 
     def parse_node_string(self, string):
@@ -147,7 +144,7 @@ class SQLiteDatabaseNewForm(Database):
         try:
             sql = "UPDATE NODES SET DATA = ? WHERE ID = ?"
             self._cur.execute(sql, [node.dump_edit_to_db()[0], id])
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             raise DatabaseException("SQLite: %s" % (e))
         self._setnodetags(node)
         self._checktags()
@@ -178,7 +175,7 @@ class SQLiteDatabaseNewForm(Database):
                 sql = "DELETE FROM NODES WHERE ID = ?"
                 self._cur.execute(sql, [n._id])
 
-            except sqlite.DatabaseError, e:
+            except sqlite.DatabaseError, e:  # pragma: no cover
                 raise DatabaseException("SQLite: %s" % (e))
             self._deletenodetags(n)
 
@@ -207,13 +204,13 @@ class SQLiteDatabaseNewForm(Database):
             rows = self._cur.fetchall()
             ids = [row[0] for row in rows]
             return ids
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             raise DatabaseException("SQLite: %s" % (e))
 
     def _commit(self):
         try:
             self._con.commit()
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             self._con.rollback()
             raise DatabaseException(
                 "SQLite: Error commiting data to db [%s]" % (e))
@@ -231,7 +228,7 @@ class SQLiteDatabaseNewForm(Database):
         params = [node._id, tag_id]
         try:
             self._cur.execute(sql, params)
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             raise DatabaseException("SQLite: %s" % (e))
 
     def _tagids(self, tags):
@@ -249,7 +246,7 @@ class SQLiteDatabaseNewForm(Database):
                 else:
                     self._create_tag(tag, None)
                     ids.append(self._cur.lastrowid)
-            except sqlite.DatabaseError, e:
+            except sqlite.DatabaseError, e:  # pragma: no cover
                 raise DatabaseException("SQLite: %s" % (e))
         return ids
 
@@ -257,7 +254,7 @@ class SQLiteDatabaseNewForm(Database):
         try:
             sql = "DELETE FROM LOOKUP WHERE NODE = ?"
             self._cur.execute(sql, [node._id])
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             raise DatabaseException("SQLite: %s" % (e))
         self._commit()
 
@@ -273,7 +270,7 @@ class SQLiteDatabaseNewForm(Database):
             sql = "DELETE FROM TAGS WHERE ID NOT IN (SELECT TAG FROM" \
                 + " LOOKUP GROUP BY TAG)"
             self._cur.execute(sql)
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             raise DatabaseException("SQLite: %s" % (e))
         self._commit()
 
@@ -286,7 +283,7 @@ class SQLiteDatabaseNewForm(Database):
         to the new version with a designated script.
         """
         self._cur.execute("PRAGMA TABLE_INFO(NODES)")
-        if (self._cur.fetchone() is None):
+        if self._cur.fetchone() is None:
             # table doesn't exist, create it
             # SQLite does have constraints implemented at the moment
             # so datatype will just be a string
@@ -308,7 +305,7 @@ class SQLiteDatabaseNewForm(Database):
             self._cur.execute("INSERT INTO DBVERSION VALUES('0.4')")
             try:
                 self._con.commit()
-            except DatabaseException, e:
+            except DatabaseException, e:  # pragma: no cover
                 self._con.rollback()
                 raise e
 
@@ -325,7 +322,7 @@ class SQLiteDatabaseNewForm(Database):
         self._cur.execute(sql, values)
         try:
             self._con.commit()
-        except sqlite.DatabaseError, e:
+        except sqlite.DatabaseError, e:  # pragma: no cover
             self._con.rollback()
             raise DatabaseException(
                 "SQLite: Error saving key [%s]" % (e))

+ 19 - 1
pwman/tests/db_tests.py

@@ -1,5 +1,6 @@
 from pwman.util.callback import Callback
 from pwman.util.generator import leetlist
+from pwman.data.drivers.sqlite import DatabaseException
 import os
 import os.path
 import sys
@@ -37,6 +38,7 @@ class DummyCallback3(Callback):
     def getnewsecret(self, question):
         return u'newsecret'
 
+
 class DummyCallback4(Callback):
 
     def getinput(self, question):
@@ -167,6 +169,23 @@ class DBTests(unittest.TestCase):
         self.tester.cli.do_ls('')
 
 
+class TestDBFalseConfig(unittest.TestCase):
+
+    def setUp(self):
+        #filename = default_config['Database'].pop('filename')
+        self.fname1 = default_config['Database'].pop('filename')
+        self.fname = config._conf['Database'].pop('filename')
+
+    def test_db_missing_conf_parameter(self):
+        self.assertRaises(DatabaseException, pwman.data.factory.create,
+                          'SQLite', 0.4)
+
+    def tearDown(self):
+        config.set_value('Database', 'filename', self.fname)
+        default_config['Database']['filename'] = self.fname1
+        config._conf['Database']['filename'] = self.fname
+
+
 class CLITests(unittest.TestCase):
     """
     test command line functionallity
@@ -205,7 +224,6 @@ class CLITests(unittest.TestCase):
     def test_leet_password(self):
         password = self.tester.cli.get_password(None, leetify=True,
                                                 reader=lambda x: u'HAtman')
-        print password
         self.assertRegexpMatches(password, ("(H|h)?(A|a|4)?(T|t|\+)?(m|M|\|"
                                             "\/\|)?(A|a|4)?(N|n|\|\\|)?"))
 

+ 4 - 1
pwman/tests/test_pwman.py

@@ -22,7 +22,9 @@
 import os
 import sys
 import unittest
-from db_tests import (DBTests, SetupTester, CLITests, ConfigTest, FactoryTest)
+from db_tests import (DBTests, SetupTester, CLITests, ConfigTest,
+                      TestDBFalseConfig, FactoryTest)
+
 from crypto_tests import CryptoTest
 
 # make sure we use local pwman
@@ -41,6 +43,7 @@ def suite():
     suite.addTest(loader.loadTestsFromTestCase(CLITests))
     suite.addTest(loader.loadTestsFromTestCase(ConfigTest))
     suite.addTest(loader.loadTestsFromTestCase(FactoryTest))
+    suite.addTest(loader.loadTestsFromTestCase(TestDBFalseConfig))
     return suite
 
 if __name__ == '__main__':