PYTHON-69 Simple litmus tests for AddressTranslation
This commit is contained in:
		| @@ -27,11 +27,11 @@ from cassandra.cluster import Cluster, NoHostAvailable | |||||||
| from cassandra.concurrent import execute_concurrent | from cassandra.concurrent import execute_concurrent | ||||||
| from cassandra.policies import (RoundRobinPolicy, ExponentialReconnectionPolicy, | from cassandra.policies import (RoundRobinPolicy, ExponentialReconnectionPolicy, | ||||||
|                                 RetryPolicy, SimpleConvictionPolicy, HostDistance, |                                 RetryPolicy, SimpleConvictionPolicy, HostDistance, | ||||||
|                                 WhiteListRoundRobinPolicy) |                                 WhiteListRoundRobinPolicy, AddressTranslator) | ||||||
| from cassandra.protocol import MAX_SUPPORTED_VERSION | from cassandra.protocol import MAX_SUPPORTED_VERSION | ||||||
| from cassandra.query import SimpleStatement, TraceUnavailable | from cassandra.query import SimpleStatement, TraceUnavailable | ||||||
|  |  | ||||||
| from tests.integration import use_singledc, PROTOCOL_VERSION, get_server_versions, get_node, CASSANDRA_VERSION, execute_until_pass, execute_with_long_wait_retry | from tests.integration import use_singledc, PROTOCOL_VERSION, get_server_versions, get_node, CASSANDRA_VERSION, execute_until_pass, execute_with_long_wait_retry, BasicExistingKeyspaceUnitTestCase, get_node | ||||||
| from tests.integration.util import assert_quiescent_pool_state | from tests.integration.util import assert_quiescent_pool_state | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -41,6 +41,7 @@ def setup_module(): | |||||||
|  |  | ||||||
| class ClusterTests(unittest.TestCase): | class ClusterTests(unittest.TestCase): | ||||||
|  |  | ||||||
|  |  | ||||||
|     def test_host_resolution(self): |     def test_host_resolution(self): | ||||||
|         """ |         """ | ||||||
|         Test to insure A records are resolved appropriately. |         Test to insure A records are resolved appropriately. | ||||||
| @@ -617,3 +618,54 @@ class ClusterTests(unittest.TestCase): | |||||||
|         cluster.shutdown() |         cluster.shutdown() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class LocalHostAdressTranslator(AddressTranslator): | ||||||
|  |  | ||||||
|  |     def __init__(self, addr_map=None): | ||||||
|  |         self.addr_map = addr_map | ||||||
|  |  | ||||||
|  |     def translate(self, addr): | ||||||
|  |         new_addr = self.addr_map.get(addr) | ||||||
|  |         return new_addr | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestAddressTranslation(unittest.TestCase): | ||||||
|  |  | ||||||
|  |     def test_address_translator_basic(self): | ||||||
|  |         """ | ||||||
|  |         Test host address translation | ||||||
|  |  | ||||||
|  |         Uses a custom Address Translator to map all ip back to one. | ||||||
|  |         Validates AddressTranslator invocation by ensuring that only meta data associated with single | ||||||
|  |         host is populated | ||||||
|  |  | ||||||
|  |         @since 3.3 | ||||||
|  |         @jira_ticket PYTHON-69 | ||||||
|  |         @expected_result only one hosts' metadata will be populeated | ||||||
|  |  | ||||||
|  |         @test_category metadata | ||||||
|  |         """ | ||||||
|  |         lh_ad = LocalHostAdressTranslator({'127.0.0.1': '127.0.0.1', '127.0.0.2': '127.0.0.1', '127.0.0.3': '127.0.0.1'}) | ||||||
|  |         c = Cluster(address_translator=lh_ad) | ||||||
|  |         c.connect() | ||||||
|  |         self.assertEqual(len(c.metadata.all_hosts()), 1) | ||||||
|  |         c.shutdown() | ||||||
|  |  | ||||||
|  |     def test_address_translator_with_mixed_nodes(self): | ||||||
|  |         """ | ||||||
|  |         Test host address translation | ||||||
|  |  | ||||||
|  |         Uses a custom Address Translator to map ip's of non control_connection nodes to each other | ||||||
|  |         Validates AddressTranslator invocation by ensuring that metadata for mapped hosts is also mapped | ||||||
|  |  | ||||||
|  |         @since 3.3 | ||||||
|  |         @jira_ticket PYTHON-69 | ||||||
|  |         @expected_result metadata for crossed hosts will also be crossed | ||||||
|  |  | ||||||
|  |         @test_category metadata | ||||||
|  |         """ | ||||||
|  |         adder_map = {'127.0.0.1': '127.0.0.1', '127.0.0.2': '127.0.0.3', '127.0.0.3': '127.0.0.2'} | ||||||
|  |         lh_ad = LocalHostAdressTranslator(adder_map) | ||||||
|  |         c = Cluster(address_translator=lh_ad) | ||||||
|  |         c.connect() | ||||||
|  |         for host in c.metadata.all_hosts(): | ||||||
|  |             self.assertEqual(adder_map.get(str(host)), host.broadcast_address) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 GregBestland
					GregBestland