222 lines
7.4 KiB
Python
222 lines
7.4 KiB
Python
|
# Configure this to _YOUR_ environment in order to run the testcases.
|
||
|
"testADOdbapiConfig.py v 2.6.2.B00"
|
||
|
|
||
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||
|
# #
|
||
|
# # TESTERS:
|
||
|
# #
|
||
|
# # You will need to make numerous modifications to this file
|
||
|
# # to adapt it to your own testing environment.
|
||
|
# #
|
||
|
# # Skip down to the next "# #" line --
|
||
|
# # -- the things you need to change are below it.
|
||
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||
|
import platform
|
||
|
import random
|
||
|
import sys
|
||
|
|
||
|
import is64bit
|
||
|
import setuptestframework
|
||
|
import tryconnection
|
||
|
|
||
|
print("\nPython", sys.version)
|
||
|
node = platform.node()
|
||
|
try:
|
||
|
print(
|
||
|
"node=%s, is64bit.os()= %s, is64bit.Python()= %s"
|
||
|
% (node, is64bit.os(), is64bit.Python())
|
||
|
)
|
||
|
except:
|
||
|
pass
|
||
|
|
||
|
if "--help" in sys.argv:
|
||
|
print(
|
||
|
"""Valid command-line switches are:
|
||
|
--package - create a temporary test package, run 2to3 if needed.
|
||
|
--all - run all possible tests
|
||
|
--time - loop over time format tests (including mxdatetime if present)
|
||
|
--nojet - do not test against an ACCESS database file
|
||
|
--mssql - test against Microsoft SQL server
|
||
|
--pg - test against PostgreSQL
|
||
|
--mysql - test against MariaDB
|
||
|
--remote= - test unsing remote server at= (experimental)
|
||
|
"""
|
||
|
)
|
||
|
exit()
|
||
|
try:
|
||
|
onWindows = bool(sys.getwindowsversion()) # seems to work on all versions of Python
|
||
|
except:
|
||
|
onWindows = False
|
||
|
|
||
|
# create a random name for temporary table names
|
||
|
_alphabet = (
|
||
|
"PYFGCRLAOEUIDHTNSQJKXBMWVZ" # why, yes, I do happen to use a dvorak keyboard
|
||
|
)
|
||
|
tmp = "".join([random.choice(_alphabet) for x in range(9)])
|
||
|
mdb_name = "xx_" + tmp + ".mdb" # generate a non-colliding name for the temporary .mdb
|
||
|
testfolder = setuptestframework.maketemp()
|
||
|
|
||
|
if "--package" in sys.argv:
|
||
|
# create a new adodbapi module -- running 2to3 if needed.
|
||
|
pth = setuptestframework.makeadopackage(testfolder)
|
||
|
else:
|
||
|
# use the adodbapi module in which this file appears
|
||
|
pth = setuptestframework.find_ado_path()
|
||
|
if pth not in sys.path:
|
||
|
# look here _first_ to find modules
|
||
|
sys.path.insert(1, pth)
|
||
|
|
||
|
proxy_host = None
|
||
|
for arg in sys.argv:
|
||
|
if arg.startswith("--remote="):
|
||
|
proxy_host = arg.split("=")[1]
|
||
|
import adodbapi.remote as remote
|
||
|
|
||
|
break
|
||
|
|
||
|
|
||
|
# function to clean up the temporary folder -- calling program must run this function before exit.
|
||
|
cleanup = setuptestframework.getcleanupfunction()
|
||
|
try:
|
||
|
import adodbapi # will (hopefully) be imported using the "pth" discovered above
|
||
|
except SyntaxError:
|
||
|
print(
|
||
|
'\n* * * Are you trying to run Python2 code using Python3? Re-run this test using the "--package" switch.'
|
||
|
)
|
||
|
sys.exit(11)
|
||
|
try:
|
||
|
print(adodbapi.version) # show version
|
||
|
except:
|
||
|
print('"adodbapi.version" not present or not working.')
|
||
|
print(__doc__)
|
||
|
|
||
|
verbose = False
|
||
|
for a in sys.argv:
|
||
|
if a.startswith("--verbose"):
|
||
|
arg = True
|
||
|
try:
|
||
|
arg = int(a.split("=")[1])
|
||
|
except IndexError:
|
||
|
pass
|
||
|
adodbapi.adodbapi.verbose = arg
|
||
|
verbose = arg
|
||
|
|
||
|
doAllTests = "--all" in sys.argv
|
||
|
doAccessTest = not ("--nojet" in sys.argv)
|
||
|
doSqlServerTest = "--mssql" in sys.argv or doAllTests
|
||
|
doMySqlTest = "--mysql" in sys.argv or doAllTests
|
||
|
doPostgresTest = "--pg" in sys.argv or doAllTests
|
||
|
iterateOverTimeTests = ("--time" in sys.argv or doAllTests) and onWindows
|
||
|
|
||
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||
|
# # start your environment setup here v v v
|
||
|
SQL_HOST_NODE = "testsql.2txt.us,1430"
|
||
|
|
||
|
try: # If mx extensions are installed, use mxDateTime
|
||
|
import mx.DateTime
|
||
|
|
||
|
doMxDateTimeTest = True
|
||
|
except:
|
||
|
doMxDateTimeTest = False # Requires eGenixMXExtensions
|
||
|
|
||
|
doTimeTest = True # obsolete python time format
|
||
|
|
||
|
if doAccessTest:
|
||
|
if proxy_host: # determine the (probably remote) database file folder
|
||
|
c = {"macro_find_temp_test_path": ["mdb", mdb_name], "proxy_host": proxy_host}
|
||
|
else:
|
||
|
c = {"mdb": setuptestframework.makemdb(testfolder, mdb_name)}
|
||
|
|
||
|
# macro definition for keyword "provider" using macro "is64bit" -- see documentation
|
||
|
# is64bit will return true for 64 bit versions of Python, so the macro will select the ACE provider
|
||
|
# (If running a remote ADO service, this will test the 64-bitedness of the ADO server.)
|
||
|
c["macro_is64bit"] = [
|
||
|
"provider",
|
||
|
"Microsoft.ACE.OLEDB.12.0", # 64 bit provider
|
||
|
"Microsoft.Jet.OLEDB.4.0",
|
||
|
] # 32 bit provider
|
||
|
connStrAccess = "Provider=%(provider)s;Data Source=%(mdb)s" # ;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Bypass UserInfo Validation=True"
|
||
|
print(
|
||
|
" ...Testing ACCESS connection to {} file...".format(
|
||
|
c.get("mdb", "remote .mdb")
|
||
|
)
|
||
|
)
|
||
|
doAccessTest, connStrAccess, dbAccessconnect = tryconnection.try_connection(
|
||
|
verbose, connStrAccess, 10, **c
|
||
|
)
|
||
|
|
||
|
if doSqlServerTest:
|
||
|
c = {
|
||
|
"host": SQL_HOST_NODE, # name of computer with SQL Server
|
||
|
"database": "adotest",
|
||
|
"user": "adotestuser", # None implies Windows security
|
||
|
"password": "Sq1234567",
|
||
|
# macro definition for keyword "security" using macro "auto_security"
|
||
|
"macro_auto_security": "security",
|
||
|
"provider": "MSOLEDBSQL; MARS Connection=True",
|
||
|
}
|
||
|
if proxy_host:
|
||
|
c["proxy_host"] = proxy_host
|
||
|
connStr = "Provider=%(provider)s; Initial Catalog=%(database)s; Data Source=%(host)s; %(security)s;"
|
||
|
print(" ...Testing MS-SQL login to {}...".format(c["host"]))
|
||
|
(
|
||
|
doSqlServerTest,
|
||
|
connStrSQLServer,
|
||
|
dbSqlServerconnect,
|
||
|
) = tryconnection.try_connection(verbose, connStr, 30, **c)
|
||
|
|
||
|
if doMySqlTest:
|
||
|
c = {
|
||
|
"host": "testmysql.2txt.us",
|
||
|
"database": "adodbapitest",
|
||
|
"user": "adotest",
|
||
|
"password": "12345678",
|
||
|
"port": "3330", # note the nonstandard port for obfuscation
|
||
|
"driver": "MySQL ODBC 5.1 Driver",
|
||
|
} # or _driver="MySQL ODBC 3.51 Driver
|
||
|
if proxy_host:
|
||
|
c["proxy_host"] = proxy_host
|
||
|
c["macro_is64bit"] = [
|
||
|
"provider",
|
||
|
"Provider=MSDASQL;",
|
||
|
] # turn on the 64 bit ODBC adapter only if needed
|
||
|
cs = (
|
||
|
"%(provider)sDriver={%(driver)s};Server=%(host)s;Port=3330;"
|
||
|
+ "Database=%(database)s;user=%(user)s;password=%(password)s;Option=3;"
|
||
|
)
|
||
|
print(" ...Testing MySql login to {}...".format(c["host"]))
|
||
|
doMySqlTest, connStrMySql, dbMySqlconnect = tryconnection.try_connection(
|
||
|
verbose, cs, 5, **c
|
||
|
)
|
||
|
|
||
|
|
||
|
if doPostgresTest:
|
||
|
_computername = "testpg.2txt.us"
|
||
|
_databasename = "adotest"
|
||
|
_username = "adotestuser"
|
||
|
_password = "12345678"
|
||
|
kws = {"timeout": 4}
|
||
|
kws["macro_is64bit"] = [
|
||
|
"prov_drv",
|
||
|
"Provider=MSDASQL;Driver={PostgreSQL Unicode(x64)}",
|
||
|
"Driver=PostgreSQL Unicode",
|
||
|
]
|
||
|
# get driver from http://www.postgresql.org/ftp/odbc/versions/
|
||
|
# test using positional and keyword arguments (bad example for real code)
|
||
|
if proxy_host:
|
||
|
kws["proxy_host"] = proxy_host
|
||
|
print(" ...Testing PostgreSQL login to {}...".format(_computername))
|
||
|
doPostgresTest, connStrPostgres, dbPostgresConnect = tryconnection.try_connection(
|
||
|
verbose,
|
||
|
"%(prov_drv)s;Server=%(host)s;Database=%(database)s;uid=%(user)s;pwd=%(password)s;port=5430;", # note nonstandard port
|
||
|
_username,
|
||
|
_password,
|
||
|
_computername,
|
||
|
_databasename,
|
||
|
**kws
|
||
|
)
|
||
|
|
||
|
assert (
|
||
|
doAccessTest or doSqlServerTest or doMySqlTest or doPostgresTest
|
||
|
), "No database engine found for testing"
|