Skip to content

Commit 82df9cf

Browse files
committed
Conditional test around C* list prepend bug, which is not in 1.2.x
1 parent fa2e4c7 commit 82df9cf

3 files changed

Lines changed: 28 additions & 12 deletions

File tree

tests/integration/cqlengine/__init__.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from cassandra.cqlengine import connection
1919
from cassandra.cqlengine.management import create_keyspace_simple, CQLENG_ALLOW_SCHEMA_MANAGEMENT
2020

21-
from tests.integration import use_single_node, PROTOCOL_VERSION
21+
from tests.integration import get_server_versions, use_single_node, PROTOCOL_VERSION
2222

2323

2424
def setup_package():
@@ -29,7 +29,13 @@ def setup_package():
2929

3030
keyspace = 'cqlengine_test'
3131
connection.setup(['localhost'],
32-
protocol_version=PROTOCOL_VERSION,
33-
default_keyspace=keyspace)
32+
protocol_version=PROTOCOL_VERSION,
33+
default_keyspace=keyspace)
3434

3535
create_keyspace_simple(keyspace, 1)
36+
37+
38+
def is_prepend_reversed():
39+
# do we have https://issues.apache.org/jira/browse/CASSANDRA-8733 ?
40+
ver, _ = get_server_versions()
41+
return not (ver >= (2, 0, 13) or ver >= (2, 1, 3))

tests/integration/cqlengine/columns/test_container_columns.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from cassandra.cqlengine.models import Model, ValidationError
2121
import cassandra.cqlengine.columns as columns
2222
from cassandra.cqlengine.management import sync_table, drop_table
23+
from tests.integration.cqlengine import is_prepend_reversed
2324
from tests.integration.cqlengine.base import BaseCassEngTestCase
2425

2526

@@ -240,15 +241,21 @@ def test_element_count_validation(self):
240241

241242
def test_partial_updates(self):
242243
""" Tests that partial udpates work as expected """
243-
final = list(range(10))
244-
initial = final[3:7]
244+
full = list(range(10))
245+
initial = full[3:7]
246+
245247
m1 = TestListModel.create(int_list=initial)
246248

247-
m1.int_list = final
249+
m1.int_list = full
248250
m1.save()
249251

252+
if is_prepend_reversed():
253+
expected = full[2::-1] + full[3:]
254+
else:
255+
expected = full
256+
250257
m2 = TestListModel.get(partition=m1.partition)
251-
assert list(m2.int_list) == final
258+
self.assertEqual(list(m2.int_list), expected)
252259

253260
def test_instantiation_with_column_class(self):
254261
"""

tests/integration/cqlengine/query/test_updates.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414

1515
from uuid import uuid4
1616
from cassandra.cqlengine import ValidationError
17-
from cassandra.cqlengine.query import QueryException
1817

19-
from tests.integration.cqlengine.base import BaseCassEngTestCase
2018
from cassandra.cqlengine.models import Model
2119
from cassandra.cqlengine.management import sync_table, drop_table
2220
from cassandra.cqlengine import columns
21+
from tests.integration.cqlengine import is_prepend_reversed
22+
from tests.integration.cqlengine.base import BaseCassEngTestCase
2323

2424

2525
class TestQueryUpdateModel(Model):
@@ -192,13 +192,16 @@ def test_list_prepend_updates(self):
192192
""" Prepend two things since order is reversed by default by CQL """
193193
partition = uuid4()
194194
cluster = 1
195+
original = ["foo"]
195196
TestQueryUpdateModel.objects.create(
196-
partition=partition, cluster=cluster, text_list=["foo"])
197+
partition=partition, cluster=cluster, text_list=original)
198+
prepended = ['bar', 'baz']
197199
TestQueryUpdateModel.objects(
198200
partition=partition, cluster=cluster).update(
199-
text_list__prepend=['bar', 'baz'])
201+
text_list__prepend=prepended)
200202
obj = TestQueryUpdateModel.objects.get(partition=partition, cluster=cluster)
201-
self.assertEqual(obj.text_list, ["bar", "baz", "foo"])
203+
expected = (prepended[::-1] if is_prepend_reversed() else prepended) + original
204+
self.assertEqual(obj.text_list, expected)
202205

203206
def test_map_update_updates(self):
204207
""" Merge a dictionary into existing value """

0 commit comments

Comments
 (0)