Skip to content

Commit

Permalink
Version dependent settings in test
Browse files Browse the repository at this point in the history
  • Loading branch information
xzkostyan committed Feb 22, 2019
1 parent 384391d commit d75ab85
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 10 deletions.
28 changes: 19 additions & 9 deletions tests/columns/test_decimal.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,22 @@


class DecimalTestCase(BaseTestCase):
client_kwargs = {'settings': {'allow_experimental_decimal_type': True}}
cli_client_kwargs = {'allow_experimental_decimal_type': 1}
stable_support_version = (18, 14, 9)

def client_kwargs(self, version):
if version < self.stable_support_version:
return {'settings': {'allow_experimental_decimal_type': True}}

def cli_client_kwargs(self):
i = self.client.connection.server_info
current = (i.version_major, i.version_minor, i.version_patch)

if self.stable_support_version > current:
return {'allow_experimental_decimal_type': 1}

@require_server_version(18, 12, 13)
def test_simple(self):
with self.create_table('a Decimal(9, 5)', **self.cli_client_kwargs):
with self.create_table('a Decimal(9, 5)', **self.cli_client_kwargs()):
data = [(Decimal('300.42'), ), (300.42, ), (-300, )]
self.client.execute(
'INSERT INTO test (a) VALUES', data, types_check=True
Expand All @@ -30,7 +40,7 @@ def test_simple(self):
def test_different_precisions(self):
columns = 'a Decimal32(2), b Decimal64(2), c Decimal128(2)'

with self.create_table(columns, **self.cli_client_kwargs):
with self.create_table(columns, **self.cli_client_kwargs()):
data = [(
Decimal('300.42'),
# 300.42 + (1 << 34)
Expand Down Expand Up @@ -63,7 +73,7 @@ def test_different_precisions(self):
def test_different_precisions_negative(self):
columns = 'a Decimal32(2), b Decimal64(2), c Decimal128(2)'

with self.create_table(columns, **self.cli_client_kwargs):
with self.create_table(columns, **self.cli_client_kwargs()):
data = [(
Decimal('-300.42'),
# 300.42 + (1 << 34)
Expand Down Expand Up @@ -96,7 +106,7 @@ def test_different_precisions_negative(self):
def test_max_precisions(self):
columns = 'a Decimal32(0), b Decimal64(0), c Decimal128(0)'

with self.create_table(columns, **self.cli_client_kwargs):
with self.create_table(columns, **self.cli_client_kwargs()):
data = [(
Decimal(10**9 - 1),
Decimal(10**18 - 1),
Expand Down Expand Up @@ -130,7 +140,7 @@ def test_max_precisions(self):
def test_nullable(self):
columns = 'a Nullable(Decimal32(3))'

with self.create_table(columns, **self.cli_client_kwargs):
with self.create_table(columns, **self.cli_client_kwargs()):
data = [(300.42, ), (None, ), ]
self.client.execute(
'INSERT INTO test (a) VALUES', data
Expand All @@ -145,7 +155,7 @@ def test_nullable(self):

@require_server_version(18, 12, 13)
def test_no_scale(self):
with self.create_table('a Decimal32(0)', **self.cli_client_kwargs):
with self.create_table('a Decimal32(0)', **self.cli_client_kwargs()):
data = [(2147483647, ), ]
self.client.execute(
'INSERT INTO test (a) VALUES', data
Expand All @@ -161,7 +171,7 @@ def test_no_scale(self):
@require_server_version(18, 12, 13)
def test_type_mismatch(self):
data = [(2147483649,), ]
with self.create_table('a Decimal32(0)', **self.cli_client_kwargs):
with self.create_table('a Decimal32(0)', **self.cli_client_kwargs()):
with self.assertRaises(errors.TypeMismatchError) as e:
self.client.execute(
'INSERT INTO test (a) VALUES', data, types_check=True
Expand Down
9 changes: 8 additions & 1 deletion tests/testcase.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class BaseTestCase(TestCase):

client = None
client_kwargs = None
cli_client_kwargs = None

@classmethod
def emit_cli(cls, statement, database=None, encoding='utf-8', **kwargs):
Expand Down Expand Up @@ -85,7 +86,13 @@ def setUpClass(cls):

def setUp(self):
super(BaseTestCase, self).setUp()
client_kwargs = self.client_kwargs or {}
if callable(self.client_kwargs):
version_str = self.emit_cli('SELECT version()')
version = tuple(int(x) for x in version_str.strip().split('.'))
client_kwargs = self.client_kwargs(version)
else:
client_kwargs = self.client_kwargs
client_kwargs = client_kwargs or {}
self.client = self._create_client(**client_kwargs)

def tearDown(self):
Expand Down

0 comments on commit d75ab85

Please sign in to comment.