Merge "Add helper methods to assert shard range equality" into feature/deep
This commit is contained in:
@@ -4325,6 +4325,8 @@ class ShardRange(object):
|
|||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
if not isinstance(other, ShardRange):
|
if not isinstance(other, ShardRange):
|
||||||
return False
|
return False
|
||||||
|
# TODO: consider comparing other attributes (object_count, bytes_used)
|
||||||
|
# but it may prove useful to be able to test for equality of range only
|
||||||
return self.lower == other.lower and self.upper == other.upper
|
return self.lower == other.lower and self.upper == other.upper
|
||||||
|
|
||||||
def __ne__(self, other):
|
def __ne__(self, other):
|
||||||
|
|||||||
@@ -42,6 +42,16 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
replicator_daemon = replicator.ContainerReplicator
|
replicator_daemon = replicator.ContainerReplicator
|
||||||
replicator_rpc = replicator.ContainerReplicatorRpc
|
replicator_rpc = replicator.ContainerReplicatorRpc
|
||||||
|
|
||||||
|
def assertShardRangesEqual(self, x, y):
|
||||||
|
# ShardRange.__eq__ only compares lower and upper; here we generate
|
||||||
|
# dict representations to compare all attributes
|
||||||
|
self.assertEqual([dict(sr) for sr in x], [dict(sr) for sr in y])
|
||||||
|
|
||||||
|
def assertShardRangesNotEqual(self, x, y):
|
||||||
|
# ShardRange.__eq__ only compares lower and upper; here we generate
|
||||||
|
# dict representations to compare all attributes
|
||||||
|
self.assertNotEqual([dict(sr) for sr in x], [dict(sr) for sr in y])
|
||||||
|
|
||||||
def test_report_up_to_date(self):
|
def test_report_up_to_date(self):
|
||||||
broker = self._get_broker('a', 'c', node_index=0)
|
broker = self._get_broker('a', 'c', node_index=0)
|
||||||
broker.initialize(Timestamp(1).internal, int(POLICIES.default))
|
broker.initialize(Timestamp(1).internal, int(POLICIES.default))
|
||||||
@@ -1167,10 +1177,9 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
info = broker.get_replication_info()
|
info = broker.get_replication_info()
|
||||||
success = daemon._repl_to_node(node, from_broker, part, info)
|
success = daemon._repl_to_node(node, from_broker, part, info)
|
||||||
self.assertTrue(success)
|
self.assertTrue(success)
|
||||||
self.assertEqual(
|
self.assertShardRangesEqual(
|
||||||
[dict(sr) for sr in expected_shard_ranges],
|
expected_shard_ranges,
|
||||||
[dict(sr) for sr in to_broker.get_shard_ranges(
|
to_broker.get_shard_ranges(include_deleted=True)
|
||||||
include_deleted=True)]
|
|
||||||
)
|
)
|
||||||
self.assertEqual(1, daemon.stats['diff'])
|
self.assertEqual(1, daemon.stats['diff'])
|
||||||
local_info = self._get_broker(
|
local_info = self._get_broker(
|
||||||
@@ -1197,8 +1206,7 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
# now add a shard range to the "local" broker only
|
# now add a shard range to the "local" broker only
|
||||||
broker.update_shard_range(shard_ranges[2])
|
broker.update_shard_range(shard_ranges[2])
|
||||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||||
[dict(sr) for sr in broker_ranges])
|
|
||||||
check_replicate(broker_ranges, broker, remote_broker)
|
check_replicate(broker_ranges, broker, remote_broker)
|
||||||
|
|
||||||
# update one shard range
|
# update one shard range
|
||||||
@@ -1207,8 +1215,7 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
broker.update_shard_range(shard_ranges[1])
|
broker.update_shard_range(shard_ranges[1])
|
||||||
# sanity check
|
# sanity check
|
||||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||||
[dict(sr) for sr in broker_ranges])
|
|
||||||
check_replicate(broker_ranges, broker, remote_broker)
|
check_replicate(broker_ranges, broker, remote_broker)
|
||||||
|
|
||||||
# delete one shard range
|
# delete one shard range
|
||||||
@@ -1217,8 +1224,7 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
broker.update_shard_range(shard_ranges[0])
|
broker.update_shard_range(shard_ranges[0])
|
||||||
# sanity check
|
# sanity check
|
||||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||||
[dict(sr) for sr in broker_ranges])
|
|
||||||
check_replicate(broker_ranges, broker, remote_broker)
|
check_replicate(broker_ranges, broker, remote_broker)
|
||||||
|
|
||||||
# put a shard range again
|
# put a shard range again
|
||||||
@@ -1227,8 +1233,7 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
broker.update_shard_range(shard_ranges[2])
|
broker.update_shard_range(shard_ranges[2])
|
||||||
# sanity check
|
# sanity check
|
||||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||||
[dict(sr) for sr in broker_ranges])
|
|
||||||
check_replicate(broker_ranges, broker, remote_broker)
|
check_replicate(broker_ranges, broker, remote_broker)
|
||||||
|
|
||||||
# update same shard range on local and remote, remote later
|
# update same shard range on local and remote, remote later
|
||||||
@@ -1243,8 +1248,8 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
# sanity check
|
# sanity check
|
||||||
remote_broker_ranges = remote_broker.get_shard_ranges(
|
remote_broker_ranges = remote_broker.get_shard_ranges(
|
||||||
include_deleted=True)
|
include_deleted=True)
|
||||||
self.assertEqual([dict(sr) for sr in remote_shard_ranges],
|
self.assertShardRangesEqual(remote_shard_ranges,
|
||||||
[dict(sr) for sr in remote_broker_ranges])
|
remote_broker_ranges)
|
||||||
self.assertNotEqual([dict(sr) for sr in shard_ranges],
|
self.assertNotEqual([dict(sr) for sr in shard_ranges],
|
||||||
[dict(sr) for sr in remote_shard_ranges])
|
[dict(sr) for sr in remote_shard_ranges])
|
||||||
check_replicate(remote_shard_ranges, broker, remote_broker)
|
check_replicate(remote_shard_ranges, broker, remote_broker)
|
||||||
@@ -1258,8 +1263,8 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
# sanity check
|
# sanity check
|
||||||
remote_broker_ranges = remote_broker.get_shard_ranges(
|
remote_broker_ranges = remote_broker.get_shard_ranges(
|
||||||
include_deleted=True)
|
include_deleted=True)
|
||||||
self.assertEqual([dict(sr) for sr in remote_shard_ranges],
|
self.assertShardRangesEqual(remote_shard_ranges,
|
||||||
[dict(sr) for sr in remote_broker_ranges])
|
remote_broker_ranges)
|
||||||
self.assertNotEqual([dict(sr) for sr in shard_ranges],
|
self.assertNotEqual([dict(sr) for sr in shard_ranges],
|
||||||
[dict(sr) for sr in remote_shard_ranges])
|
[dict(sr) for sr in remote_shard_ranges])
|
||||||
check_replicate(remote_shard_ranges, broker, remote_broker)
|
check_replicate(remote_shard_ranges, broker, remote_broker)
|
||||||
@@ -1291,10 +1296,9 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
|||||||
for i in range(1, 3):
|
for i in range(1, 3):
|
||||||
remote_broker = self._get_broker('a', 'c', node_index=i)
|
remote_broker = self._get_broker('a', 'c', node_index=i)
|
||||||
self.assertTrue(os.path.exists(remote_broker.db_file))
|
self.assertTrue(os.path.exists(remote_broker.db_file))
|
||||||
self.assertEqual(
|
self.assertShardRangesEqual(
|
||||||
[dict(sr) for sr in expected_ranges],
|
expected_ranges,
|
||||||
[dict(sr) for sr in remote_broker.get_shard_ranges(
|
remote_broker.get_shard_ranges(include_deleted=True)
|
||||||
include_deleted=True)]
|
|
||||||
)
|
)
|
||||||
remote_info = remote_broker.get_info()
|
remote_info = remote_broker.get_info()
|
||||||
local_info = self._get_broker(
|
local_info = self._get_broker(
|
||||||
|
|||||||
@@ -114,6 +114,11 @@ class TestContainerController(unittest.TestCase):
|
|||||||
self.assertEqual(str(policy_index),
|
self.assertEqual(str(policy_index),
|
||||||
resp.headers['X-Backend-Storage-Policy-Index'])
|
resp.headers['X-Backend-Storage-Policy-Index'])
|
||||||
|
|
||||||
|
def _assertShardRangesEqual(self, x, y):
|
||||||
|
# ShardRange.__eq__ only compares lower and upper; here we generate
|
||||||
|
# dict representations to compare all attributes
|
||||||
|
self.assertEqual([dict(sr) for sr in x], [dict(sr) for sr in y])
|
||||||
|
|
||||||
def test_creation(self):
|
def test_creation(self):
|
||||||
# later config should be extended to assert more config options
|
# later config should be extended to assert more config options
|
||||||
replicator = container_server.ContainerController(
|
replicator = container_server.ContainerController(
|
||||||
@@ -2081,10 +2086,7 @@ class TestContainerController(unittest.TestCase):
|
|||||||
self._put_shard_range(shard_range)
|
self._put_shard_range(shard_range)
|
||||||
|
|
||||||
broker = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
broker = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||||
actual_shard_ranges = broker.get_shard_ranges()
|
self._assertShardRangesEqual(shard_ranges, broker.get_shard_ranges())
|
||||||
self.assertEqual(
|
|
||||||
[dict(sr) for sr in shard_ranges],
|
|
||||||
[dict(actual_sr) for actual_sr in actual_shard_ranges])
|
|
||||||
|
|
||||||
# sanity check - no shard ranges when GET is only for objects
|
# sanity check - no shard ranges when GET is only for objects
|
||||||
def check_object_GET(path):
|
def check_object_GET(path):
|
||||||
@@ -2200,10 +2202,8 @@ class TestContainerController(unittest.TestCase):
|
|||||||
resp = req.get_response(self.controller)
|
resp = req.get_response(self.controller)
|
||||||
self.assertEqual(204, resp.status_int)
|
self.assertEqual(204, resp.status_int)
|
||||||
|
|
||||||
actual_shard_ranges = broker.get_shard_ranges()
|
self._assertShardRangesEqual(shard_ranges[1:],
|
||||||
self.assertEqual(
|
broker.get_shard_ranges())
|
||||||
[dict(sr) for sr in shard_ranges[1:]],
|
|
||||||
[dict(actual_sr) for actual_sr in actual_shard_ranges])
|
|
||||||
|
|
||||||
check_shard_GET(shard_ranges[1:], 'a/c')
|
check_shard_GET(shard_ranges[1:], 'a/c')
|
||||||
check_shard_GET(shard_ranges[1:2], 'a/c/jam')
|
check_shard_GET(shard_ranges[1:2], 'a/c/jam')
|
||||||
|
|||||||
Reference in New Issue
Block a user