diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index b007d7627d..a7501467d3 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -37,17 +37,24 @@ jobs: - uses: actions/setup-python@v5 name: Install Python ${{ matrix.python-version }} with: + default: 2.7.14 python-version: ${{ matrix.python-version }} allow-prereleases: true - - name: Test with pytest + - name: Test with scylla run: | export EVENT_LOOP_MANAGER=${{ matrix.event_loop_manager }} export SCYLLA_VERSION='release:6.2' ./scripts/run_integration_test.sh tests/integration/standard/ tests/integration/cqlengine/ - - name: Test tablets + - name: Test with scylla - tablets run: | export EVENT_LOOP_MANAGER=${{ matrix.event_loop_manager }} export SCYLLA_VERSION='release:6.2' ./scripts/run_integration_test.sh tests/integration/experiments/ + + - name: Test with cassandra + run: | + export EVENT_LOOP_MANAGER=${{ matrix.event_loop_manager }} + export CASSANDRA_VERSION='4.1.5' + ./scripts/run_integration_test.sh tests/integration/standard/ diff --git a/scripts/run_integration_test.sh b/scripts/run_integration_test.sh index 017ebcf5b4..cec4b1feb7 100755 --- a/scripts/run_integration_test.sh +++ b/scripts/run_integration_test.sh @@ -30,11 +30,19 @@ pip install awscli pip install https://github.com/scylladb/scylla-ccm/archive/master.zip # download version +if [[ -n "${SCYLLA_VERSION}" ]]; then + ccm create scylla-driver-temp -n 1 --scylla --version ${SCYLLA_VERSION} + ccm remove + export MAPPED_SCYLLA_VERSION=3.11.4 + unset CASSANDRA_VERSION +fi +if [[ -n "${CASSANDRA_VERSION}" ]]; then + ccm create cassandra-driver-temp -n 1 --version ${CASSANDRA_VERSION} + ccm remove + export MAPPED_CASSANDRA_VERSION=$CASSANDRA_VERSION + unset SCYLLA_VERSION +fi -ccm create scylla-driver-temp -n 1 --scylla --version ${SCYLLA_VERSION} -ccm remove - +env # run test - PROTOCOL_VERSION=4 pytest -rf $* - diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py index 693ce4079c..5c5a4b77a9 100644 --- a/tests/integration/__init__.py +++ b/tests/integration/__init__.py @@ -394,12 +394,13 @@ def _id_and_mark(f): reason='Scylla does not support custom payloads. Cassandra requires native protocol v4.0+') xfail_scylla = lambda reason, *args, **kwargs: pytest.mark.xfail(SCYLLA_VERSION is not None, reason=reason, *args, **kwargs) incorrect_test = lambda reason='This test seems to be incorrect and should be fixed', *args, **kwargs: pytest.mark.xfail(reason=reason, *args, **kwargs) +scylla_only = pytest.mark.skipif(SCYLLA_VERSION is None, reason='Scylla only test') pypy = unittest.skipUnless(platform.python_implementation() == "PyPy", "Test is skipped unless it's on PyPy") requiresmallclockgranularity = unittest.skipIf("Windows" in platform.system() or "asyncore" in EVENT_LOOP_MANAGER, "This test is not suitible for environments with large clock granularity") requiressimulacron = unittest.skipIf(SIMULACRON_JAR is None or CASSANDRA_VERSION < Version("2.1"), "Simulacron jar hasn't been specified or C* version is 2.0") -requirecassandra = unittest.skipIf(DSE_VERSION, "Cassandra required") +requirecassandra = unittest.skipIf(DSE_VERSION or SCYLLA_VERSION, "Cassandra required") notdse = unittest.skipIf(DSE_VERSION, "DSE not supported") requiredse = unittest.skipUnless(DSE_VERSION, "DSE required") requirescloudproxy = unittest.skipIf(CLOUD_PROXY_PATH is None, "Cloud Proxy path hasn't been specified") @@ -629,8 +630,16 @@ def use_cluster(cluster_name, nodes, ipformat=None, start=True, workloads=None, else: CCM_CLUSTER = CCMCluster(path, cluster_name, **ccm_options) CCM_CLUSTER.set_configuration_options({'start_native_transport': True}) - if Version(cassandra_version) >= Version('2.2'): - CCM_CLUSTER.set_configuration_options({'enable_user_defined_functions': True}) + if Version(cassandra_version) >= Version('4.1'): + CCM_CLUSTER.set_configuration_options({ + 'user_defined_functions_enabled': True, + 'scripted_user_defined_functions_enabled': True, + 'materialized_views_enabled': True, + 'sasi_indexes_enabled': True, + 'transient_replication_enabled': True, + }) + elif Version(cassandra_version) >= Version('2.2'): + CCM_CLUSTER.set_configuration_options({'user_defined_functions_enabled': True}) if Version(cassandra_version) >= Version('3.0'): CCM_CLUSTER.set_configuration_options({'enable_scripted_user_defined_functions': True}) if Version(cassandra_version) >= Version('4.0-a'): diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 93e0a67518..7d35da0845 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -14,8 +14,9 @@ def cleanup_clusters(): yield if not os.environ.get('DISABLE_CLUSTER_CLEANUP'): - for cluster_name in [CLUSTER_NAME, SINGLE_NODE_CLUSTER_NAME, MULTIDC_CLUSTER_NAME, - 'shared_aware', 'sni_proxy', 'test_ip_change']: + for cluster_name in [CLUSTER_NAME, SINGLE_NODE_CLUSTER_NAME, MULTIDC_CLUSTER_NAME, 'cluster_tests', 'ipv6_test_cluster', + 'shared_aware', 'sni_proxy', 'test_ip_change', 'tablets', 'test_down_then_removed', + 'test_concurrent_schema_change_and_node_kill', 'test_down_then_removed']: try: cluster = CCMClusterFactory.load(ccm_path, cluster_name) logging.debug("Using external CCM cluster {0}".format(cluster.name)) diff --git a/tests/integration/standard/test_cluster.py b/tests/integration/standard/test_cluster.py index 2e51ccf0ca..2dfff2b8f3 100644 --- a/tests/integration/standard/test_cluster.py +++ b/tests/integration/standard/test_cluster.py @@ -14,6 +14,7 @@ import subprocess import unittest +import pytest from collections import deque from copy import copy @@ -42,7 +43,9 @@ from tests.integration import use_cluster, get_server_versions, CASSANDRA_VERSION, \ execute_until_pass, execute_with_long_wait_retry, get_node, MockLoggingHandler, get_unsupported_lower_protocol, \ get_unsupported_upper_protocol, lessthanprotocolv3, protocolv6, local, CASSANDRA_IP, greaterthanorequalcass30, \ - lessthanorequalcass40, DSE_VERSION, TestCluster, PROTOCOL_VERSION, xfail_scylla, incorrect_test + lessthanorequalcass40, DSE_VERSION, TestCluster, PROTOCOL_VERSION, xfail_scylla, incorrect_test, SCYLLA_VERSION, \ + EVENT_LOOP_MANAGER + from tests.integration.util import assert_quiescent_pool_state import sys @@ -752,6 +755,7 @@ def _warning_are_issued_when_auth(self, auth_provider): mock_handler.get_message_count("debug", "Got ReadyMessage on new connection") ) + @pytest.mark.xfail(reason="test not stable on cassandra", condition=EVENT_LOOP_MANAGER=="asyncio" and SCYLLA_VERSION is None, strict=False) def test_idle_heartbeat(self): interval = 2 cluster = TestCluster(idle_heartbeat_interval=interval, @@ -831,6 +835,7 @@ def test_idle_heartbeat_disabled(self): cluster.shutdown() + @pytest.mark.xfail(reason="test not stable on cassandra", condition=EVENT_LOOP_MANAGER=="asyncio" and SCYLLA_VERSION is None, strict=False) def test_pool_management(self): # Ensure that in_flight and request_ids quiesce after cluster operations cluster = TestCluster(idle_heartbeat_interval=0) # no idle heartbeat here, pool management is tested in test_idle_heartbeat @@ -1439,7 +1444,7 @@ def test_session_no_cluster(self): class HostStateTest(unittest.TestCase): - + @pytest.mark.xfail(reason="test not stable on cassandra", condition=EVENT_LOOP_MANAGER=="asyncio" and SCYLLA_VERSION is None, strict=False) def test_down_event_with_active_connection(self): """ Test to ensure that on down calls to clusters with connections still active don't result in diff --git a/tests/integration/standard/test_connection.py b/tests/integration/standard/test_connection.py index bcc1337817..cde4790b29 100644 --- a/tests/integration/standard/test_connection.py +++ b/tests/integration/standard/test_connection.py @@ -13,6 +13,7 @@ # limitations under the License. import unittest +import pytest from functools import partial from mock import patch @@ -38,7 +39,7 @@ from tests import is_monkey_patched from tests.integration import use_singledc, get_node, CASSANDRA_IP, local, \ - requiresmallclockgranularity, greaterthancass20, TestCluster + requiresmallclockgranularity, greaterthancass20, TestCluster, EVENT_LOOP_MANAGER, SCYLLA_VERSION try: from cassandra.io.libevreactor import LibevConnection @@ -127,6 +128,7 @@ def tearDown(self): @local @greaterthancass20 + @pytest.mark.xfail(reason="test not stable on cassandra", condition=EVENT_LOOP_MANAGER=="asyncio" and SCYLLA_VERSION is None, strict=False) def test_heart_beat_timeout(self): # Setup a host listener to ensure the nodes don't go down test_listener = TestHostListener() diff --git a/tests/integration/standard/test_control_connection.py b/tests/integration/standard/test_control_connection.py index b6e0d3ccd3..9abe714e88 100644 --- a/tests/integration/standard/test_control_connection.py +++ b/tests/integration/standard/test_control_connection.py @@ -17,7 +17,7 @@ from cassandra import InvalidRequest import unittest - +import pytest from cassandra.protocol import ConfigurationException from tests.integration import use_singledc, PROTOCOL_VERSION, TestCluster, greaterthanorequalcass40, notdse @@ -101,7 +101,7 @@ def test_get_control_connection_host(self): self.assertNotEqual(host, new_host) # TODO: enable after https://github.com/scylladb/python-driver/issues/121 is fixed - @unittest.skip('Fails on scylla due to the broadcast_rpc_port is None') + @pytest.mark.skip('Fails on scylla due to the broadcast_rpc_port is None') @notdse @greaterthanorequalcass40 def test_control_connection_port_discovery(self): diff --git a/tests/integration/standard/test_custom_protocol_handler.py b/tests/integration/standard/test_custom_protocol_handler.py index 9d9f90e631..000b1d4cf8 100644 --- a/tests/integration/standard/test_custom_protocol_handler.py +++ b/tests/integration/standard/test_custom_protocol_handler.py @@ -120,7 +120,6 @@ def test_custom_raw_row_results_all_types(self): self.assertEqual(len(CustomResultMessageTracked.checked_rev_row_set), len(PRIMITIVE_DATATYPES)-1) cluster.shutdown() - @unittest.expectedFailure @requirecassandra @greaterthanorequalcass40 def test_protocol_divergence_v5_fail_by_continuous_paging(self): @@ -168,7 +167,6 @@ def test_protocol_divergence_v4_fail_by_flag_uses_int(self): self._protocol_divergence_fail_by_flag_uses_int(ProtocolVersion.V4, uses_int_query_flag=False, int_flag=True) - @unittest.expectedFailure @requirecassandra @greaterthanorequalcass40 def test_protocol_v5_uses_flag_int(self): @@ -196,7 +194,6 @@ def test_protocol_dsev1_uses_flag_int(self): self._protocol_divergence_fail_by_flag_uses_int(ProtocolVersion.DSE_V1, uses_int_query_flag=True, int_flag=True) - @unittest.expectedFailure @requirecassandra @greaterthanorequalcass40 def test_protocol_divergence_v5_fail_by_flag_uses_int(self): diff --git a/tests/integration/standard/test_ip_change.py b/tests/integration/standard/test_ip_change.py index e87c14a1df..eca53ad2ab 100644 --- a/tests/integration/standard/test_ip_change.py +++ b/tests/integration/standard/test_ip_change.py @@ -5,7 +5,7 @@ from cassandra.cluster import ExecutionProfile from cassandra.policies import WhiteListRoundRobinPolicy -from tests.integration import use_cluster, get_node, get_cluster, local, TestCluster +from tests.integration import use_cluster, get_node, get_cluster, local, TestCluster, scylla_only from tests.util import wait_until_not_raised LOGGER = logging.getLogger(__name__) @@ -35,7 +35,7 @@ def test_change_address_during_live_session(self): LOGGER.debug("Change IP address for node3") ip_prefix = get_cluster().get_ipprefix() new_ip = f'{ip_prefix}33' - node3.set_configuration_options(values={'listen_address': new_ip, 'rpc_address': new_ip, 'api_address': new_ip}) + node3.set_configuration_options(values={'listen_address': new_ip, 'rpc_address': new_ip}) node3.network_interfaces = {k: (new_ip, v[1]) for k, v in node3.network_interfaces.items()} LOGGER.debug(f"Start node3 again with ip address {new_ip}") node3.start(wait_for_binary_proto=True) diff --git a/tests/integration/standard/test_metadata.py b/tests/integration/standard/test_metadata.py index 18f2d975de..fca1cfaa58 100644 --- a/tests/integration/standard/test_metadata.py +++ b/tests/integration/standard/test_metadata.py @@ -26,13 +26,13 @@ from cassandra import AlreadyExists, SignatureDescriptor, UserFunctionDescriptor, UserAggregateDescriptor from cassandra.connection import Connection - from cassandra.encoder import Encoder from cassandra.metadata import (IndexMetadata, Token, murmur3, Function, Aggregate, protect_name, protect_names, RegisteredTableExtension, _RegisteredExtensionType, get_schema_parser, group_keys_by_replica, NO_VALID_REPLICA) from cassandra.protocol import QueryMessage, ProtocolHandler from cassandra.util import SortedSet +from ccmlib.scylla_cluster import ScyllaCluster from tests.integration import (get_cluster, use_singledc, PROTOCOL_VERSION, execute_until_pass, BasicSegregatedKeyspaceUnitTestCase, BasicSharedKeyspaceUnitTestCase, @@ -42,7 +42,8 @@ greaterthancass21, assert_startswith, greaterthanorequalcass40, greaterthanorequaldse67, lessthancass40, TestCluster, DSE_VERSION, requires_java_udf, requires_composite_type, - requires_collection_indexes, SCYLLA_VERSION, xfail_scylla, xfail_scylla_version_lt) + requires_collection_indexes, SCYLLA_VERSION, xfail_scylla, xfail_scylla_version_lt, + scylla_only, EVENT_LOOP_MANAGER) from tests.util import wait_until @@ -55,7 +56,7 @@ def setup_module(): class HostMetaDataTests(BasicExistingKeyspaceUnitTestCase): # TODO: enable after https://github.com/scylladb/python-driver/issues/121 is fixed - @unittest.skip('Fails on scylla due to the broadcast_rpc_port is None') + @pytest.mark.skip('Fails on scylla due to the broadcast_rpc_port is None') @local def test_host_addresses(self): """ @@ -214,6 +215,7 @@ def get_table_metadata(self): self.cluster.refresh_table_metadata(self.keyspace_name, self.function_table_name) return self.cluster.metadata.keyspaces[self.keyspace_name].tables[self.function_table_name] + @pytest.mark.xfail(reason="test not stable on cassandra", condition=EVENT_LOOP_MANAGER=="asyncio" and SCYLLA_VERSION is None, strict=False) def test_basic_table_meta_properties(self): create_statement = self.make_create_statement(["a"], [], ["b", "c"]) self.session.execute(create_statement) @@ -572,6 +574,7 @@ def test_non_size_tiered_compaction(self): self.assertNotIn("max_threshold", cql) @requires_java_udf + @pytest.mark.xfail(reason="test not stable on cassandra", condition=EVENT_LOOP_MANAGER=="asyncio" and SCYLLA_VERSION is None, strict=False) def test_refresh_schema_metadata(self): """ test for synchronously refreshing all cluster metadata @@ -1061,6 +1064,7 @@ def test_metadata_pagination(self): self.cluster.refresh_schema_metadata() self.assertEqual(len(self.cluster.metadata.keyspaces[self.keyspace_name].tables), 12) + @pytest.mark.xfail(reason="test not stable on cassandra", condition=EVENT_LOOP_MANAGER=="asyncio" and SCYLLA_VERSION is None, strict=False) def test_metadata_pagination_keyspaces(self): """ test for covering @@ -1279,13 +1283,13 @@ def test_already_exists_exceptions(self): cluster.shutdown() @local - @pytest.mark.xfail(reason='AssertionError: \'RAC1\' != \'r1\' - probably a bug in driver or in Scylla') def test_replicas(self): """ Ensure cluster.metadata.get_replicas return correctly when not attached to keyspace """ if murmur3 is None: raise unittest.SkipTest('the murmur3 extension is not available') + is_scylla = isinstance(get_cluster(), ScyllaCluster) cluster = TestCluster() self.assertEqual(cluster.metadata.get_replicas('test3rf', 'key'), []) @@ -1295,7 +1299,7 @@ def test_replicas(self): self.assertNotEqual(list(cluster.metadata.get_replicas('test3rf', b'key')), []) host = list(cluster.metadata.get_replicas('test3rf', b'key'))[0] self.assertEqual(host.datacenter, 'dc1') - self.assertEqual(host.rack, 'r1') + self.assertEqual(host.rack, 'RAC1' if is_scylla else 'r1') cluster.shutdown() def test_token_map(self): @@ -1334,7 +1338,7 @@ def test_token(self): self.assertEqual(expected_node_count, len(tmap.ring)) cluster.shutdown() - +@scylla_only # this is scylla only, since the metadata timeout feature doesn't cover peers_v2 queries that is used by cassandra class MetadataTimeoutTest(unittest.TestCase): """ Test of TokenMap creation and other behavior. diff --git a/tests/integration/standard/test_query.py b/tests/integration/standard/test_query.py index fd9ad1f2e4..e55058065f 100644 --- a/tests/integration/standard/test_query.py +++ b/tests/integration/standard/test_query.py @@ -18,6 +18,8 @@ import unittest import logging import pytest +from packaging.version import Version + from cassandra import ProtocolVersion from cassandra import ConsistencyLevel, Unavailable, InvalidRequest, cluster from cassandra.query import (PreparedStatement, BoundStatement, SimpleStatement, @@ -26,7 +28,7 @@ from cassandra.policies import HostDistance, RoundRobinPolicy, WhiteListRoundRobinPolicy from tests.integration import use_singledc, PROTOCOL_VERSION, BasicSharedKeyspaceUnitTestCase, \ greaterthanprotocolv3, MockLoggingHandler, get_supported_protocol_versions, local, get_cluster, setup_keyspace, \ - USE_CASS_EXTERNAL, greaterthanorequalcass40, DSE_VERSION, TestCluster, requirecassandra, xfail_scylla + USE_CASS_EXTERNAL, greaterthanorequalcass40, DSE_VERSION, TestCluster, requirecassandra, xfail_scylla, CASSANDRA_VERSION from tests import notwindows from tests.integration import greaterthanorequalcass30, get_node @@ -47,7 +49,10 @@ def setup_module(): ccm_cluster.stop() # This is necessary because test_too_many_statements may # timeout otherwise - config_options = {'write_request_timeout_in_ms': '20000'} + if CASSANDRA_VERSION >= Version('4.1'): + config_options = {'write_request_timeout': '20000ms'} + else: + config_options = {'write_request_timeout_in_ms': '20000'} ccm_cluster.set_configuration_options(config_options) ccm_cluster.start(wait_for_binary_proto=True, wait_other_notice=True) @@ -940,7 +945,7 @@ def test_no_connection_refused_on_timeout(self): exception_type = type(result).__name__ if exception_type == "NoHostAvailable": self.fail("PYTHON-91: Disconnected from Cassandra: %s" % result.message) - if exception_type in ["WriteTimeout", "WriteFailure", "ReadTimeout", "ReadFailure", "ErrorMessageSub"]: + if exception_type in ["WriteTimeout", "WriteFailure", "ReadTimeout", "ReadFailure", "ErrorMessageSub", "ErrorMessage"]: if type(result).__name__ in ["WriteTimeout", "WriteFailure"]: received_timeout = True continue diff --git a/tests/integration/standard/test_rack_aware_policy.py b/tests/integration/standard/test_rack_aware_policy.py index 5d7a69642f..773fca449a 100644 --- a/tests/integration/standard/test_rack_aware_policy.py +++ b/tests/integration/standard/test_rack_aware_policy.py @@ -4,13 +4,17 @@ from cassandra.cluster import Cluster from cassandra.policies import ConstantReconnectionPolicy, RackAwareRoundRobinPolicy -from tests.integration import PROTOCOL_VERSION, get_cluster, use_multidc +from tests.integration import PROTOCOL_VERSION, get_cluster, use_multidc, scylla_only LOGGER = logging.getLogger(__name__) def setup_module(): use_multidc({'DC1': {'RC1': 2, 'RC2': 2}, 'DC2': {'RC1': 3}}) +# cassandra is failing in a weird way: +# Token allocation failed: the number of racks 2 in datacenter DC1 is lower than its replication factor 3. +# for now just run it with scylla only +@scylla_only class RackAwareRoundRobinPolicyTests(unittest.TestCase): @classmethod def setup_class(cls): diff --git a/tests/integration/standard/test_rate_limit_exceeded.py b/tests/integration/standard/test_rate_limit_exceeded.py index 280d6426e1..03a1b13f3f 100644 --- a/tests/integration/standard/test_rate_limit_exceeded.py +++ b/tests/integration/standard/test_rate_limit_exceeded.py @@ -4,13 +4,14 @@ from cassandra.cluster import Cluster from cassandra.policies import ConstantReconnectionPolicy, RoundRobinPolicy, TokenAwarePolicy -from tests.integration import PROTOCOL_VERSION, use_cluster +from tests.integration import PROTOCOL_VERSION, use_cluster, scylla_only LOGGER = logging.getLogger(__name__) def setup_module(): use_cluster('rate_limit', [3], start=True) +@scylla_only class TestRateLimitExceededException(unittest.TestCase): @classmethod def setup_class(cls): diff --git a/tests/integration/standard/test_scylla_cloud.py b/tests/integration/standard/test_scylla_cloud.py index d1a22f8826..4dd5178e55 100644 --- a/tests/integration/standard/test_scylla_cloud.py +++ b/tests/integration/standard/test_scylla_cloud.py @@ -4,7 +4,7 @@ from ccmlib.utils.ssl_utils import generate_ssl_stores from ccmlib.utils.sni_proxy import refresh_certs, get_cluster_info, start_sni_proxy, create_cloud_config -from tests.integration import use_cluster +from tests.integration import use_cluster, scylla_only from cassandra.cluster import Cluster, TwistedConnection @@ -23,7 +23,7 @@ # need to run them with specific configuration like `gevent.monkey.patch_all()` or under async functions # unsupported_connection_classes = [GeventConnection, AsyncioConnection, EventletConnection] - +@scylla_only class ScyllaCloudConfigTests(TestCase): def start_cluster_with_proxy(self): ccm_cluster = self.ccm_cluster diff --git a/tests/integration/standard/test_shard_aware.py b/tests/integration/standard/test_shard_aware.py index cf8f17e209..b6aadc5c61 100644 --- a/tests/integration/standard/test_shard_aware.py +++ b/tests/integration/standard/test_shard_aware.py @@ -32,7 +32,7 @@ from cassandra.policies import TokenAwarePolicy, RoundRobinPolicy, ConstantReconnectionPolicy from cassandra import OperationTimedOut, ConsistencyLevel -from tests.integration import use_cluster, get_node, PROTOCOL_VERSION +from tests.integration import use_cluster, get_node, PROTOCOL_VERSION, scylla_only LOGGER = logging.getLogger(__name__) @@ -42,6 +42,7 @@ def setup_module(): use_cluster('shard_aware', [3], start=True) +@scylla_only class TestShardAwareIntegration(unittest.TestCase): @classmethod def setup_class(cls): diff --git a/tests/integration/standard/test_single_interface.py b/tests/integration/standard/test_single_interface.py index e836b5f428..8a4c634153 100644 --- a/tests/integration/standard/test_single_interface.py +++ b/tests/integration/standard/test_single_interface.py @@ -13,6 +13,7 @@ # limitations under the License. import unittest +import pytest from cassandra import ConsistencyLevel from cassandra.query import SimpleStatement @@ -45,7 +46,7 @@ def tearDown(self): self.cluster.shutdown() # TODO: enable after https://github.com/scylladb/python-driver/issues/121 is fixed - @unittest.skip('Fails on scylla due to the broadcast_rpc_port is None') + @pytest.mark.skip('Fails on scylla due to the broadcast_rpc_port is None') def test_single_interface(self): """ Test that we can connect to a multiple hosts bound to a single interface. diff --git a/tests/integration/standard/test_types.py b/tests/integration/standard/test_types.py index 56b2914cec..5a3ab1e4a7 100644 --- a/tests/integration/standard/test_types.py +++ b/tests/integration/standard/test_types.py @@ -31,7 +31,7 @@ from tests.integration import use_singledc, execute_until_pass, notprotocolv1, \ BasicSharedKeyspaceUnitTestCase, greaterthancass21, lessthancass30, greaterthanorequaldse51, \ - DSE_VERSION, greaterthanorequalcass3_10, requiredse, TestCluster, requires_composite_type + DSE_VERSION, greaterthanorequalcass3_10, requiredse, TestCluster, requires_composite_type, scylla_only from tests.integration.datatype_utils import update_datatypes, PRIMITIVE_DATATYPES, COLLECTION_TYPES, PRIMITIVE_DATATYPES_KEYS, \ get_sample, get_all_samples, get_collection_sample @@ -704,6 +704,7 @@ def test_can_insert_tuples_with_nulls(self): self.assertEqual(('', None, None, b''), result.one().t) self.assertEqual(('', None, None, b''), s.execute(read).one().t) + @scylla_only def test_insert_collection_with_null_fails(self): """ NULLs in list / sets / maps are forbidden.