Files
DataLogger-Generic/web_db/mysql-connector-python-2.1.4/tests/test_examples.py
2016-11-01 16:56:22 -05:00

225 lines
7.2 KiB
Python

# -*- coding: utf-8 -*-
# MySQL Connector/Python - MySQL driver written in Python.
# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
# MySQL Connector/Python is licensed under the terms of the GPLv2
# <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most
# MySQL Connectors. There are special exceptions to the terms and
# conditions of the GPLv2 as it is applied to this software, see the
# FOSS License Exception
# <http://www.mysql.com/about/legal/licensing/foss-exception.html>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
"""Unittests for examples
"""
from hashlib import md5
import sys
import tests
from . import PY2
import mysql.connector
class TestExamples(tests.MySQLConnectorTests):
def setUp(self):
self.config = tests.get_mysql_config()
self.config['use_pure'] = True
self.cnx = mysql.connector.connect(**self.config)
def tearDown(self):
self.cnx.close()
def _exec_main(self, example, exp=None):
try:
result = example.main(self.config)
if not exp:
return result
except Exception as err:
self.fail(err)
md5_result = md5()
output = u'\n'.join(result)
md5_result.update(output.encode('utf-8'))
self.assertEqual(exp, md5_result.hexdigest(),
'Output was not correct')
def test_dates(self):
"""examples/dates.py"""
try:
import examples.dates as example
except Exception as err:
self.fail(err)
output = example.main(self.config)
exp = [' 1 | 1977-06-14 | 1977-06-14 21:10:00 | 21:10:00 |',
' 2 | None | None | 0:00:00 |',
' 3 | None | None | 0:00:00 |']
self.assertEqual(output, exp)
example.DATA.append(('0000-00-00', None, '00:00:00'),)
self.assertRaises(mysql.connector.errors.IntegrityError,
example.main, self.config)
sys.modules.pop('examples.dates', None)
def test_engines(self):
"""examples/engines.py"""
try:
import examples.engines as example
except:
self.fail()
output = self._exec_main(example)
# Can't check output as it might be different per MySQL instance
# We check only if MyISAM is present
found = False
for line in output:
if line.find('MyISAM') > -1:
found = True
break
self.assertTrue(found, 'MyISAM engine not found in output')
sys.modules.pop('examples.engine', None)
def test_inserts(self):
"""examples/inserts.py"""
try:
import examples.inserts as example
except Exception as err:
self.fail(err)
exp = '077dcd0139015c0aa6fb82ed932f053e'
self._exec_main(example, exp)
sys.modules.pop('examples.inserts', None)
def test_transactions(self):
"""examples/transactions.py"""
db = mysql.connector.connect(**self.config)
r = tests.have_engine(db, 'InnoDB')
db.close()
if not r:
return
try:
import examples.transaction as example
except Exception as e:
self.fail(e)
exp = '3bd75261ffeb5624cdd754a43e2fd938'
self._exec_main(example, exp)
sys.modules.pop('examples.transaction', None)
def test_unicode(self):
"""examples/unicode.py"""
try:
import examples.unicode as example
except Exception as e:
self.fail(e)
output = self._exec_main(example)
if PY2:
exp = [u'Unicode string: ¿Habla español?',
u'Unicode string coming from db: ¿Habla español?']
else:
exp = ['Unicode string: ¿Habla español?',
'Unicode string coming from db: ¿Habla español?']
self.assertEqual(output, exp)
sys.modules.pop('examples.unicode', None)
def test_warnings(self):
"""examples/warnings.py"""
try:
import examples.warnings as example
except Exception as e:
self.fail(e)
output = self._exec_main(example)
exp = ["Executing 'SELECT 'abc'+1'",
"1292: Truncated incorrect DOUBLE value: 'abc'"]
self.assertEqual(output, exp, 'Output was not correct')
example.STMT = "SELECT 'abc'"
self.assertRaises(Exception, example.main, self.config)
sys.modules.pop('examples.warnings', None)
def test_multi_resultsets(self):
"""examples/multi_resultsets.py"""
try:
import examples.multi_resultsets as example
except Exception as e:
self.fail(e)
output = self._exec_main(example)
exp = ['Inserted 1 row', 'Number of rows: 1', 'Inserted 2 rows',
'Names in table: Geert Jan Michel']
self.assertEqual(output, exp, 'Output was not correct')
sys.modules.pop('examples.resultsets', None)
def test_microseconds(self):
"""examples/microseconds.py"""
try:
import examples.microseconds as example
except Exception as e:
self.fail(e)
output = self._exec_main(example)
if self.cnx.get_server_version() < (5, 6, 4):
exp = "does not support fractional precision for timestamps."
self.assertTrue(output[0].endswith(exp))
else:
exp = [
' 1 | 1 | 0:00:47.510000 | 2009-06-07 09:15:02.000234',
' 1 | 2 | 0:00:47.020000 | 2009-06-07 09:30:05.102345',
' 1 | 3 | 0:00:47.650000 | 2009-06-07 09:50:23.002300',
' 1 | 4 | 0:00:46.060000 | 2009-06-07 10:30:56.000001',
]
self.assertEqual(output, exp)
sys.modules.pop('examples.microseconds', None)
def test_prepared_statements(self):
"""examples/prepared_statements.py"""
try:
import examples.prepared_statements as example
except Exception as e:
self.fail(e)
output = self._exec_main(example)
exp = [
'Inserted data',
'1 | Geert',
'2 | Jan',
'3 | Michel',
]
self.assertEqual(output, exp, 'Output was not correct')
sys.modules.pop('examples.prepared_statements', None)
class TestExamplesCExt(TestExamples):
def setUp(self):
self.config = tests.get_mysql_config()
self.config['use_pure'] = False
self.cnx = mysql.connector.connect(**self.config)
def tearDown(self):
self.cnx.close()
def test_prepared_statements(self):
pass