1from __future__ import with_statement 2from os import path, makedirs, environ 3import shutil 4 5import _mssql 6 7from .helpers import tmpdir, skip_test 8config_dump_path = path.join(tmpdir, 'freetds-config-dump.txt') 9 10def setup_module(): 11 if not path.isdir(tmpdir): 12 makedirs(tmpdir) 13 14class TestConfig(object): 15 def connect(self, **kwargs): 16 environ['TDSDUMPCONFIG'] = config_dump_path 17 try: 18 _mssql.connect(**kwargs) 19 assert False 20 except _mssql.MSSQLDriverException as e: 21 # we get this when the name of the server is not valid 22 if 'Connection to the database failed' not in str(e): 23 raise 24 except _mssql.MSSQLDatabaseException as e: 25 # we get this when the name or IP can be obtained but the connection 26 # can not be made 27 if e.args[0][0] != 20009: 28 raise 29 with open(config_dump_path, 'rU') as fh: 30 return fh.read() 31 32 def test_config_values(self): 33 config_dump = self.connect( 34 server='dontnameyourserverthis', 35 user = 'bob', 36 database = 'tempdb', 37 tds_version='7.1' 38 ) 39 assert 'user_name = bob' in config_dump 40 assert 'database = tempdb\n' in config_dump 41 # test default port 42 assert 'port = 1433' in config_dump 43 # not sure why 7.1 version is used instead of 8.0 which is the 44 # default 45 assert 'major_version = 7' in config_dump 46 assert 'minor_version = 1' in config_dump 47 48 def test_tds_protocol_version_42(self): 49 config_dump = self.connect( 50 server='dontnameyourserverthis', 51 tds_version='4.2' 52 ) 53 assert 'major_version = 4' in config_dump 54 assert 'minor_version = 2' in config_dump 55 56 def test_tds_protocol_version_70(self): 57 config_dump = self.connect( 58 server='dontnameyourserverthis', 59 tds_version='7.0' 60 ) 61 assert 'major_version = 7' in config_dump 62 assert 'minor_version = 0' in config_dump 63 64 def test_tds_protocol_version_71(self): 65 config_dump = self.connect( 66 server='dontnameyourserverthis', 67 tds_version='7.1' 68 ) 69 assert 'major_version = 7' in config_dump 70 assert 'minor_version = 1' in config_dump 71 72 def test_tds_protocol_version_80(self): 73 # follow-up: turns out 8.0 was erroneous. MS named the new protocol 74 # 7.1 instead of 8.0, so FreeTDS will accept 8.0 but shows as 7.1. 75 # got that from the FreeTDS mailling list. New FreeTDS docs,built from 76 # source, have a page that describes the protocol and that page lists 77 # versions 7.0, 7.1, and 7.2 among others. 78 79 config_dump = self.connect( 80 server='dontnameyourserverthis', 81 tds_version='8.0' 82 ) 83 assert 'major_version = 7' in config_dump 84 assert 'minor_version = 1' in config_dump 85 86 def test_tds_protocol_version_72(self): 87 config_dump = self.connect( 88 server='dontnameyourserverthis', 89 tds_version='7.2' 90 ) 91 assert 'major_version = 7' in config_dump 92 assert 'minor_version = 2' in config_dump 93 94 def test_tds_protocol_version_invalid(self): 95 try: 96 self.connect(tds_version='1.0') 97 assert False 98 except _mssql.MSSQLException as e: 99 assert 'unrecognized tds version: 1.0' == str(e) 100 101 def test_tds_nonstandard_port_int(self): 102 #it should convert it to a string 103 config_dump = self.connect(port=1435) 104 assert 'port = 1435' in config_dump 105