ソースを参照

add some unittests

beginnig of a new era
oz123 11 年 前
コミット
13f38fb7b2
2 ファイル変更193 行追加0 行削除
  1. 58 0
      tests/db_tests.py
  2. 135 0
      tests/test_pwman.py

+ 58 - 0
tests/db_tests.py

@@ -0,0 +1,58 @@
+import os
+import os.path
+
+_saveconfig = True
+
+
+import sys
+
+if 'darwin' in sys.platform:
+    from pwman.ui.mac import PwmanCliMac as PwmanCli
+    from pwman.ui.mac import PwmanCliMacNew as PwmanCliNew
+    OSX = True
+elif 'win' in sys.platform:
+    from pwman.ui.cli import PwmanCli
+    from pwman.ui.win import PwmanCliWinNew as PwmanCliNew
+    OSX = False
+else:
+    from pwman.ui.cli import PwmanCli
+    from pwman.ui.cli import PwmanCliNew
+    OSX = False
+
+
+import pwman.util.config as config
+import pwman.data.factory
+from pwman.data.convertdb import PwmanConvertDB
+
+
+# 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 DBTests(unittest.TestCase):
+    """test everything related to db"""
+    def test(self):
+        self.assertTrue(True)
+
+    def test_db_created(self):
+        "test that the right db instance was created"
+        dbver = 0.4
+        dbtype = config.get_value("Database", "type")
+        db = pwman.data.factory.create(dbtype, dbver)
+        self.assertIn(dbtype, db.__class__.__name__)
+
+class CLITests(unittest.TestCase):
+    """test command line functionallity"""
+    def test(self):
+        self.assertTrue(True)

+ 135 - 0
tests/test_pwman.py

@@ -0,0 +1,135 @@
+#!/usr/bin/env python
+#============================================================================
+# This file is part of Pwman3.
+#
+# Pwman3 is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2
+# as published by the Free Software Foundation;
+#
+# Pwman3 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 Pwman3; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#============================================================================
+# Copyright (C) 2012 Oz Nahum <nahumoz@gmail.com>
+#============================================================================
+# Copyright (C) 2006 Ivan Kelly <ivan@ivankelly.net>
+#============================================================================
+import os
+import os.path
+
+import sys
+sys.path.insert(0, os.getcwd())
+_saveconfig = True
+
+import sys
+from pwman.util.crypto import CryptoEngine
+
+if 'darwin' in sys.platform:
+    from pwman.ui.mac import PwmanCliMac as PwmanCli
+    from pwman.ui.mac import PwmanCliMacNew as PwmanCliNew
+    OSX = True
+elif 'win' in sys.platform:
+    from pwman.ui.cli import PwmanCli
+    from pwman.ui.win import PwmanCliWinNew as PwmanCliNew
+    OSX = False
+else:
+    from pwman.ui.cli import PwmanCli
+    from pwman.ui.cli import PwmanCliNew
+    OSX = False
+
+
+import pwman.util.config as config
+import pwman.data.factory
+from pwman.data.convertdb import PwmanConvertDB
+
+
+def which(cmd):
+    _, cmdname = os.path.split(cmd)
+
+    for path in os.environ["PATH"].split(os.pathsep):
+        cmd = os.path.join(path, cmdname)
+        if os.path.isfile(cmd) and os.access(cmd, os.X_OK):
+            return cmd
+
+    return None
+
+try:
+    config_dir = os.path.expanduser("~/.pwman")
+    if not os.path.isdir(config_dir):
+        os.mkdir(config_dir)
+
+    config_file = os.path.join(config_dir, "config")
+    # 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(config_dir,
+                                                            "pwman.db")},
+                      'Encryption': {'algorithm': 'AES'},
+                      'Readline': {'history': os.path.join(config_dir,
+                                                           "history")}
+                      }
+
+    config.set_defaults(default_config)
+    if 'win' in sys.platform:
+        try:
+            import colorama
+            colorama.init()
+        except ImportError:
+            config.set_value("Global", "colors", 'no')
+    if os.path.exists(config_file):
+        config.load(config_file)
+        xselpath = config.get_value("Global", "xselpath")
+    elif not OSX:
+        xselpath = which("xsel")
+        config.set_value("Global", "xsel", xselpath)
+    elif OSX:
+        pbcopypath = which("pbcopy")
+        config.set_value("Global", "xsel", pbcopypath)
+    # set umask before creating/opening any files
+    umask = int(config.get_value("Global", "umask"))
+    os.umask(umask)
+
+    enc = CryptoEngine.get()
+
+    dbtype = config.get_value("Database", "type")
+    # if it is done here, we could do the following:
+    # if db.ver == 0.4 :
+    #     db = pwman.data.factory.create(dbtyp, new_version)
+    # else:
+    #     we use the old code untouched ... insecure, but
+    #     keeps backwards compatibility ...
+    # if the database file exists check it's version
+    # else: force version 0.4
+    if os.path.exists(config.get_value("Database", "filename")):
+        dbver = pwman.data.factory.check_db_version(dbtype)
+        dbver = float(dbver.strip("\'"))
+    else:
+        dbver = 0.4
+    # the method create could create an old instance that
+    # accepts cPickle object or new style instance that
+    # accepts only strings.
+    # The user should be STRONGLY Prompted to CONVERT the
+    # database to the new format using a command line tool.
+    # version 0.5 pwman will depreciate that old and insecure
+    # code ...
+
+    db = pwman.data.factory.create(dbtype, dbver)
+    if dbver >= 0.4:
+        cli = PwmanCliNew(db, xselpath)
+    elif dbver < 0.4:
+        cli = PwmanCli(db, xselpath)
+except SystemExit, e:
+    sys.exit(e)
+import logging
+import unittest
+from db_tests import CLITests
+from db_tests import DBTests
+if __name__ == '__main__':
+    unittest.main()