Add test for MyManager (enable only when MySQLdb is available). Configure tests using pgtoolkit.conf (same as used by other executables).
authorRadek Brich <radek.brich@devl.cz>
Sat, 29 Sep 2012 13:53:54 +0200
changeset 49 08e4dfe1b0cb
parent 48 b82c7c2fb5af
child 50 f71d3abbb18f
Add test for MyManager (enable only when MySQLdb is available). Configure tests using pgtoolkit.conf (same as used by other executables).
.hgignore
TESTING
mytoolkit/mymanager.py
pgtoolkit.conf.example
sql/tests.sql
tests.py
tests/TESTS
tests/config.py
tests/test_mymanager.py
tests/testpgmanager.py
tests/tests.conf.example
tests/tests.sql
--- a/.hgignore	Sat Sep 29 12:08:47 2012 +0200
+++ b/.hgignore	Sat Sep 29 13:53:54 2012 +0200
@@ -1,7 +1,7 @@
-.*\.pyc
-.project
-.pydevproject
-.settings/org.eclipse.core.resources.prefs
-pgtoolkit\.conf
-build
-tests/tests\.conf
+^.*\.pyc$
+^.project
+^.pydevproject
+^.settings/org.eclipse.core.resources.prefs
+^pgtoolkit\.conf$
+^build
+^tests\.conf$
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TESTING	Sat Sep 29 13:53:54 2012 +0200
@@ -0,0 +1,15 @@
+TESTING
+=======
+
+All test should work at least with Python 2.7 and 3.2
+
+
+How to test
+-----------
+
+1. copy pgtoolkit.conf.example to pgtoolkit.conf, modify it so it points to your test database
+
+2. create test tables using sql/tests.sql
+
+3. run tests.py
+
--- a/mytoolkit/mymanager.py	Sat Sep 29 12:08:47 2012 +0200
+++ b/mytoolkit/mymanager.py	Sat Sep 29 13:53:54 2012 +0200
@@ -2,7 +2,7 @@
 #
 # MyManager - manage database connections (MySQL version)
 #
-# Requires: Python 2.6, MySQLdb
+# Requires: Python 2.6 / 2.7, MySQLdb
 #
 # Part of pgtoolkit
 # http://hg.devl.cz/pgtoolkit
@@ -93,7 +93,7 @@
         self.keep_open = keep_open
         self.parameters = kw
         self.adjust_parameters()
-    
+
     def adjust_parameters(self):
         '''Rename Postgres parameters to proper value for MySQL.'''
         m = {'dbname' : 'db', 'password' : 'passwd'}
@@ -166,9 +166,9 @@
 
     def close_conn(self, name='default'):
         '''Close all connections of given name.
-        
+
         Connection credentials are still saved.
-        
+
         '''
         while len(self.conn_pool[name]):
             conn = self.conn_pool[name].pop()
@@ -176,9 +176,9 @@
 
     def destroy_conn(self, name='default'):
         '''Destroy connection.
-        
+
         Counterpart of create_conn.
-        
+
         '''
         if not name in self.conn_known:
             raise MyManagerError('Connection name "%s" not registered.' % name)
@@ -213,10 +213,10 @@
 
     def put_conn(self, conn, name='default'):
         '''Put connection back to pool.
-        
+
         Name must be same as used for get_conn,
         otherwise things become broken.
-        
+
         '''
         self.lock.acquire()
         try:
@@ -241,10 +241,10 @@
     @contextmanager
     def cursor(self, name='default'):
         '''Cursor context.
-        
+
         Uses any connection of name 'name' from pool
         and returns cursor for that connection.
-        
+
         '''
         conn = self.get_conn(name)
 
--- a/pgtoolkit.conf.example	Sat Sep 29 12:08:47 2012 +0200
+++ b/pgtoolkit.conf.example	Sat Sep 29 13:53:54 2012 +0200
@@ -1,6 +1,8 @@
 ### named connections
 databases = {
-  'test' : 'host=127.0.0.1 user=test password=test dbname=test'
+  # database for tests.py (postgres, mysql - remove one of the lines to skip particular tests)
+  'test' : 'host=127.0.0.1 dbname=test user=test password=test',
+  'test_mysql' : 'host=127.0.0.1 db=test user=test password=test',
 }
 
 ### meta database (contains connection parameters for other databases)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/tests.sql	Sat Sep 29 13:53:54 2012 +0200
@@ -0,0 +1,6 @@
+CREATE TABLE test
+(
+  id serial NOT NULL,
+  name varchar,
+  PRIMARY KEY (id)
+);
--- a/tests.py	Sat Sep 29 12:08:47 2012 +0200
+++ b/tests.py	Sat Sep 29 13:53:54 2012 +0200
@@ -5,12 +5,21 @@
 from tests import test_rowdict
 from tests import testpgmanager
 
+enable_mysql = True
+try:
+    from tests import test_mymanager
+except ImportError:
+    enable_mysql = False
+
 loader = unittest.TestLoader()
 
 suite = unittest.TestSuite()
 suite.addTests(loader.loadTestsFromModule(test_rowdict))
 suite.addTests(loader.loadTestsFromModule(testpgmanager))
 
+if enable_mysql:
+    suite.addTests(loader.loadTestsFromModule(test_mymanager))
+
 runner = unittest.TextTestRunner(verbosity=2)
 result = runner.run(suite)
 
--- a/tests/TESTS	Sat Sep 29 12:08:47 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-TESTS
-=====
-
-All test should work at least with Python 2.6, 2.7 and 3.2
-
-
-How to test
------------
-
-1. Copy tests.conf.example to tests.conf and modify it so it points to your test database.
-
-2. Create test tables using tests.sql
-
-3. Run individual tests.
-
--- a/tests/config.py	Sat Sep 29 12:08:47 2012 +0200
+++ b/tests/config.py	Sat Sep 29 13:53:54 2012 +0200
@@ -1,8 +1,3 @@
-import sys
-
-sys.path.insert(0, '..')
-
-
 class Config(dict):
     def __init__(self, fname):
         with open(fname) as f:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_mymanager.py	Sat Sep 29 13:53:54 2012 +0200
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+
+from tests.config import Config
+from mytoolkit import mymanager
+
+import unittest
+
+
+class TestMyManager(unittest.TestCase):
+
+    def setUp(self):
+        cfg = Config('pgtoolkit.conf')
+        test_db_conn_params = cfg['databases']['test_mysql']
+        params = self.params_to_mapping(test_db_conn_params)
+        self.m = mymanager.get_instance()
+        self.m.create_conn(**params)
+
+    def tearDown(self):
+        self.m.destroy_conn()
+
+    def params_to_mapping(self, params):
+        return dict([param.split('=') for param in params.split(' ')])
+
+    def test_mysql_query(self):
+        with self.m.cursor() as curs:
+            ajaj = 1
+            curs.execute('SELECT %(ajaj)s AS ajaj', locals())
+            row = curs.fetchone_dict()
+            self.assertEqual(row.ajaj, ajaj)
+
+
+if __name__ == '__main__':
+    unittest.main()
+
--- a/tests/testpgmanager.py	Sat Sep 29 12:08:47 2012 +0200
+++ b/tests/testpgmanager.py	Sat Sep 29 13:53:54 2012 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.2
+#!/usr/bin/env python3
 
 from tests.config import Config
 from pgtoolkit import pgmanager
@@ -9,10 +9,11 @@
 class TestSuite(unittest.TestCase):
 
     def setUp(self):
-        cfg = Config('tests.conf')
+        cfg = Config('pgtoolkit.conf')
+        test_db_conn_params = cfg['databases']['test']
         self.m = pgmanager.get_instance()
-        self.m.create_conn(**cfg)
-        self.m.create_conn('autocommit', isolation_level='autocommit', **cfg)
+        self.m.create_conn(dsn=test_db_conn_params)
+        self.m.create_conn('autocommit', isolation_level='autocommit', dsn=test_db_conn_params)
 
     def tearDown(self):
         self.m.destroy_conn()
@@ -48,6 +49,7 @@
         self.assertTrue(curs.rowcount == 1)
         self.m.put_conn(conn)
 
+
 if __name__ == '__main__':
     unittest.main()
 
--- a/tests/tests.conf.example	Sat Sep 29 12:08:47 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-hostaddr='127.0.0.1'
-dbname='test'
-user='test'
-password='pass'
--- a/tests/tests.sql	Sat Sep 29 12:08:47 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-CREATE TABLE test
-(
-  id serial NOT NULL,
-  name varchar,
-  PRIMARY KEY (id)
-);