Skip to content

Commit 7c05a11

Browse files
committed
pytest/python 3 dtests breaks tests on 3.0 and 3.11
Patch by Ariel Weisberg; Reviewed by Sam Tunnicliffe for CASSANDRA-14206
1 parent 39e223f commit 7c05a11

11 files changed

+805
-734
lines changed

conftest.py

+27-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import copy
99
import inspect
1010
import subprocess
11+
from itertools import zip_longest
1112

1213
from dtest import running_in_docker, cleanup_docker_environment_before_test_execution
1314

@@ -351,10 +352,34 @@ def fixture_dtest_setup(request, parse_dtest_config, fixture_dtest_setup_overrid
351352
dtest_setup.cleanup_cluster()
352353

353354

355+
#Based on https://bugs.python.org/file25808/14894.patch
356+
def loose_version_compare(a, b):
357+
for i, j in zip_longest(a.version, b.version, fillvalue=''):
358+
if type(i) != type(j):
359+
i = str(i)
360+
j = str(j)
361+
if i == j:
362+
continue
363+
elif i < j:
364+
return -1
365+
else: # i > j
366+
return 1
367+
368+
#Longer version strings with equal prefixes are equal, but if one version string is longer than it is greater
369+
aLen = len(a.version)
370+
bLen = len(b.version)
371+
if aLen == bLen:
372+
return 0
373+
elif aLen < bLen:
374+
return -1
375+
else:
376+
return 1
377+
378+
354379
def _skip_msg(current_running_version, since_version, max_version):
355-
if current_running_version < since_version:
380+
if loose_version_compare(current_running_version, since_version) < 0:
356381
return "%s < %s" % (current_running_version, since_version)
357-
if max_version and current_running_version > max_version:
382+
if max_version and loose_version_compare(current_running_version, max_version) > 0:
358383
return "%s > %s" % (current_running_version, max_version)
359384

360385

dtest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def set_node_to_current_version(self, node):
268268
node.set_install_dir(version=version)
269269
else:
270270
node.set_install_dir(install_dir=self.dtest_config.cassandra_dir)
271-
os.environ.set('CASSANDRA_DIR', self.dtest_config.cassandra_dir)
271+
os.environ['CASSANDRA_DIR'] = self.dtest_config.cassandra_dir
272272

273273
def go(self, func):
274274
runner = Runner(func)

offline_tools_test.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -378,13 +378,17 @@ def test_sstableupgrade(self):
378378
# change before it's release.
379379
if testversion < '4.0':
380380
(out, error, rc) = node1.run_sstableupgrade(keyspace='ks', column_family='cf')
381+
out = str(out)
382+
error = str(error)
381383
logger.debug(out)
382384
logger.debug(error)
383385
logger.debug('Upgraded ks.cf sstable: {}'.format(node1.get_sstables(keyspace='ks', column_family='cf')))
384-
assert 'Found 1 sstables that need upgrading.' in out
386+
assert 'Found 1 sstables that need upgrading.' in str(out)
385387

386388
# Check that sstableupgrade finds no upgrade needed on current version.
387389
(out, error, rc) = node1.run_sstableupgrade(keyspace='ks', column_family='cf')
390+
out = str(out)
391+
error = str(error)
388392
logger.debug(out)
389393
logger.debug(error)
390394
assert 'Found 0 sstables that need upgrading.' in out

putget_test.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ def test_wide_slice(self):
132132
cluster.set_configuration_options(values={'partitioner': 'org.apache.cassandra.dht.ByteOrderedPartitioner'})
133133
cluster.populate(2)
134134
node1, node2 = cluster.nodelist()
135-
node1.set_configuration_options(values={'initial_token': "a".encode('hex')})
136-
node1.set_configuration_options(values={'initial_token': "b".encode('hex')})
135+
node1.set_configuration_options(values={'initial_token': 'a'.encode().hex()})
136+
node1.set_configuration_options(values={'initial_token': 'b'.encode().hex()})
137137
cluster.start()
138138
time.sleep(.5)
139139
session = self.patient_cql_connection(node1)

rebuild_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ def test_rebuild_with_specific_sources(self):
439439
node3.nodetool('rebuild -ks ks1 -ts (%s,%s] -s %s' % (tokens[2], str(pow(2, 63) - 1), node2_address))
440440

441441
# verify that node2 streamed to node3
442-
log_matches = node2.grep_log('Session with %s is complete' % node3.address_for_current_version())
442+
log_matches = node2.grep_log('Session with %s is complete' % node3.address_for_current_version_slashy())
443443
assert len(log_matches) > 0
444444

445445
# verify that node1 did not participate

snitch_test.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,11 @@ def test_prefer_local_reconnect_on_listen_address(self):
112112

113113
assert "/{}".format(NODE1_BROADCAST_ADDRESS) in out
114114
assert "INTERNAL_IP:{}:{}".format('9' if running40 else '6', NODE1_LISTEN_ADDRESS) in out
115-
assert "INTERNAL_ADDRESS_AND_PORT:7:{}".format(NODE1_40_LISTEN_ADDRESS) in out
116115
assert "/{}".format(NODE2_BROADCAST_ADDRESS) in out
117116
assert "INTERNAL_IP:{}:{}".format('9' if running40 else '6', NODE2_LISTEN_ADDRESS) in out
118-
assert "INTERNAL_ADDRESS_AND_PORT:7:{}".format(NODE1_40_LISTEN_ADDRESS) in out
117+
if running40:
118+
assert "INTERNAL_ADDRESS_AND_PORT:7:{}".format(NODE1_40_LISTEN_ADDRESS) in out
119+
assert "INTERNAL_ADDRESS_AND_PORT:7:{}".format(NODE1_40_LISTEN_ADDRESS) in out
119120

120121
class TestDynamicEndpointSnitch(Tester):
121122
@pytest.mark.resource_intensive

super_column_cache_test.py

+25-25
Original file line numberDiff line numberDiff line change
@@ -61,56 +61,56 @@ def test_sc_with_row_cache(self):
6161

6262
client.system_add_column_family(cfdef)
6363

64-
column = Column(name='name', value='Mina', timestamp=100)
64+
column = Column(name='name'.encode(), value='Mina'.encode(), timestamp=100)
6565
client.batch_mutate(
66-
{'mina': {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs', [column])))]}},
66+
{'mina'.encode(): {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs'.encode(), [column])))]}},
6767
ThriftConsistencyLevel.ONE)
6868

6969
column_parent = ColumnParent(column_family='Users')
70-
predicate = SlicePredicate(slice_range=SliceRange("", "", False, 100))
71-
super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE)
70+
predicate = SlicePredicate(slice_range=SliceRange("".encode(), "".encode(), False, 100))
71+
super_columns = client.get_slice('mina'.encode(), column_parent, predicate, ThriftConsistencyLevel.ONE)
7272
assert 1 == len(super_columns)
7373
super_column = super_columns[0].super_column
74-
assert 'attrs' == super_column.name
74+
assert 'attrs'.encode() == super_column.name
7575
assert 1 == len(super_column.columns)
76-
assert 'name' == super_column.columns[0].name
77-
assert 'Mina' == super_column.columns[0].value
76+
assert 'name'.encode() == super_column.columns[0].name
77+
assert 'Mina'.encode() == super_column.columns[0].value
7878

7979
# add a 'country' subcolumn
80-
column = Column(name='country', value='Canada', timestamp=100)
80+
column = Column(name='country'.encode(), value='Canada'.encode(), timestamp=100)
8181
client.batch_mutate(
82-
{'mina': {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs', [column])))]}},
82+
{'mina'.encode(): {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs'.encode(), [column])))]}},
8383
ThriftConsistencyLevel.ONE)
8484

85-
super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE)
85+
super_columns = client.get_slice('mina'.encode(), column_parent, predicate, ThriftConsistencyLevel.ONE)
8686
assert 1 == len(super_columns)
8787
super_column = super_columns[0].super_column
88-
assert 'attrs' == super_column.name
88+
assert 'attrs'.encode() == super_column.name
8989
assert 2 == len(super_column.columns)
9090

91-
assert 'country' == super_column.columns[0].name
92-
assert 'Canada' == super_column.columns[0].value
91+
assert 'country'.encode() == super_column.columns[0].name
92+
assert 'Canada'.encode() == super_column.columns[0].value
9393

94-
assert 'name' == super_column.columns[1].name
95-
assert 'Mina' == super_column.columns[1].value
94+
assert 'name'.encode() == super_column.columns[1].name
95+
assert 'Mina'.encode() == super_column.columns[1].value
9696

9797
# add a 'region' subcolumn
98-
column = Column(name='region', value='Quebec', timestamp=100)
98+
column = Column(name='region'.encode(), value='Quebec'.encode(), timestamp=100)
9999
client.batch_mutate(
100-
{'mina': {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs', [column])))]}},
100+
{'mina'.encode(): {'Users': [Mutation(ColumnOrSuperColumn(super_column=SuperColumn('attrs'.encode(), [column])))]}},
101101
ThriftConsistencyLevel.ONE)
102102

103-
super_columns = client.get_slice('mina', column_parent, predicate, ThriftConsistencyLevel.ONE)
103+
super_columns = client.get_slice('mina'.encode(), column_parent, predicate, ThriftConsistencyLevel.ONE)
104104
assert 1 == len(super_columns)
105105
super_column = super_columns[0].super_column
106-
assert 'attrs' == super_column.name
106+
assert 'attrs'.encode() == super_column.name
107107
assert 3 == len(super_column.columns)
108108

109-
assert 'country' == super_column.columns[0].name
110-
assert 'Canada' == super_column.columns[0].value
109+
assert 'country'.encode() == super_column.columns[0].name
110+
assert 'Canada'.encode() == super_column.columns[0].value
111111

112-
assert 'name' == super_column.columns[1].name
113-
assert 'Mina' == super_column.columns[1].value
112+
assert 'name'.encode() == super_column.columns[1].name
113+
assert 'Mina'.encode() == super_column.columns[1].value
114114

115-
assert 'region' == super_column.columns[2].name
116-
assert 'Quebec' == super_column.columns[2].value
115+
assert 'region'.encode() == super_column.columns[2].name
116+
assert 'Quebec'.encode() == super_column.columns[2].value

super_counter_test.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ def test_functional(self):
5454
for subcol in range(NUM_SUBCOLS):
5555
for add in range(NUM_ADDS):
5656
column_parent = ColumnParent(column_family='cf',
57-
super_column='subcol_%d' % subcol)
58-
counter_column = CounterColumn('col_0', 1)
59-
thrift_conn.add('row_0', column_parent, counter_column,
57+
super_column=('subcol_%d' % subcol).encode())
58+
counter_column = CounterColumn('col_0'.encode(), 1)
59+
thrift_conn.add('row_0'.encode(), column_parent, counter_column,
6060
ConsistencyLevel.QUORUM)
6161
time.sleep(1)
6262
cluster.flush()
@@ -75,9 +75,9 @@ def test_functional(self):
7575
from_db = []
7676

7777
for i in range(NUM_SUBCOLS):
78-
column_path = ColumnPath(column_family='cf', column='col_0',
79-
super_column='subcol_%d' % i)
80-
column_or_super_column = thrift_conn.get('row_0', column_path,
78+
column_path = ColumnPath(column_family='cf', column='col_0'.encode(),
79+
super_column=(('subcol_%d' % i).encode()))
80+
column_or_super_column = thrift_conn.get('row_0'.encode(), column_path,
8181
ConsistencyLevel.QUORUM)
8282
val = column_or_super_column.counter_column.value
8383
logger.debug(str(val)),

thrift_hsha_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def make_connection():
7676

7777
with JolokiaAgent(node1) as jmx:
7878
num_clients = jmx.read_attribute(connected_thrift_clients, "Value")
79-
assert int(num_clients), 0 == "There are still open Thrift connections after stopping service"
79+
assert int(num_clients) == 0, "There are still open Thrift connections after stopping service " + str(num_clients)
8080

8181
@unittest.skipIf(not os.path.exists(ATTACK_JAR), "No attack jar found")
8282
@unittest.skipIf(not os.path.exists(JNA_PATH), "No JNA jar found")

0 commit comments

Comments
 (0)