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):
|
||||
if not isinstance(other, ShardRange):
|
||||
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
|
||||
|
||||
def __ne__(self, other):
|
||||
|
||||
@@ -42,6 +42,16 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
replicator_daemon = replicator.ContainerReplicator
|
||||
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):
|
||||
broker = self._get_broker('a', 'c', node_index=0)
|
||||
broker.initialize(Timestamp(1).internal, int(POLICIES.default))
|
||||
@@ -1167,10 +1177,9 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
info = broker.get_replication_info()
|
||||
success = daemon._repl_to_node(node, from_broker, part, info)
|
||||
self.assertTrue(success)
|
||||
self.assertEqual(
|
||||
[dict(sr) for sr in expected_shard_ranges],
|
||||
[dict(sr) for sr in to_broker.get_shard_ranges(
|
||||
include_deleted=True)]
|
||||
self.assertShardRangesEqual(
|
||||
expected_shard_ranges,
|
||||
to_broker.get_shard_ranges(include_deleted=True)
|
||||
)
|
||||
self.assertEqual(1, daemon.stats['diff'])
|
||||
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
|
||||
broker.update_shard_range(shard_ranges[2])
|
||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
||||
[dict(sr) for sr in broker_ranges])
|
||||
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||
check_replicate(broker_ranges, broker, remote_broker)
|
||||
|
||||
# update one shard range
|
||||
@@ -1207,8 +1215,7 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
broker.update_shard_range(shard_ranges[1])
|
||||
# sanity check
|
||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
||||
[dict(sr) for sr in broker_ranges])
|
||||
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||
check_replicate(broker_ranges, broker, remote_broker)
|
||||
|
||||
# delete one shard range
|
||||
@@ -1217,8 +1224,7 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
broker.update_shard_range(shard_ranges[0])
|
||||
# sanity check
|
||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
||||
[dict(sr) for sr in broker_ranges])
|
||||
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||
check_replicate(broker_ranges, broker, remote_broker)
|
||||
|
||||
# put a shard range again
|
||||
@@ -1227,8 +1233,7 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
broker.update_shard_range(shard_ranges[2])
|
||||
# sanity check
|
||||
broker_ranges = broker.get_shard_ranges(include_deleted=True)
|
||||
self.assertEqual([dict(sr) for sr in shard_ranges],
|
||||
[dict(sr) for sr in broker_ranges])
|
||||
self.assertShardRangesEqual(shard_ranges, broker_ranges)
|
||||
check_replicate(broker_ranges, broker, remote_broker)
|
||||
|
||||
# update same shard range on local and remote, remote later
|
||||
@@ -1243,8 +1248,8 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
# sanity check
|
||||
remote_broker_ranges = remote_broker.get_shard_ranges(
|
||||
include_deleted=True)
|
||||
self.assertEqual([dict(sr) for sr in remote_shard_ranges],
|
||||
[dict(sr) for sr in remote_broker_ranges])
|
||||
self.assertShardRangesEqual(remote_shard_ranges,
|
||||
remote_broker_ranges)
|
||||
self.assertNotEqual([dict(sr) for sr in shard_ranges],
|
||||
[dict(sr) for sr in remote_shard_ranges])
|
||||
check_replicate(remote_shard_ranges, broker, remote_broker)
|
||||
@@ -1258,8 +1263,8 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
# sanity check
|
||||
remote_broker_ranges = remote_broker.get_shard_ranges(
|
||||
include_deleted=True)
|
||||
self.assertEqual([dict(sr) for sr in remote_shard_ranges],
|
||||
[dict(sr) for sr in remote_broker_ranges])
|
||||
self.assertShardRangesEqual(remote_shard_ranges,
|
||||
remote_broker_ranges)
|
||||
self.assertNotEqual([dict(sr) for sr in shard_ranges],
|
||||
[dict(sr) for sr in remote_shard_ranges])
|
||||
check_replicate(remote_shard_ranges, broker, remote_broker)
|
||||
@@ -1291,10 +1296,9 @@ class TestReplicatorSync(test_db_replicator.TestReplicatorSync):
|
||||
for i in range(1, 3):
|
||||
remote_broker = self._get_broker('a', 'c', node_index=i)
|
||||
self.assertTrue(os.path.exists(remote_broker.db_file))
|
||||
self.assertEqual(
|
||||
[dict(sr) for sr in expected_ranges],
|
||||
[dict(sr) for sr in remote_broker.get_shard_ranges(
|
||||
include_deleted=True)]
|
||||
self.assertShardRangesEqual(
|
||||
expected_ranges,
|
||||
remote_broker.get_shard_ranges(include_deleted=True)
|
||||
)
|
||||
remote_info = remote_broker.get_info()
|
||||
local_info = self._get_broker(
|
||||
|
||||
@@ -114,6 +114,11 @@ class TestContainerController(unittest.TestCase):
|
||||
self.assertEqual(str(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):
|
||||
# later config should be extended to assert more config options
|
||||
replicator = container_server.ContainerController(
|
||||
@@ -2081,10 +2086,7 @@ class TestContainerController(unittest.TestCase):
|
||||
self._put_shard_range(shard_range)
|
||||
|
||||
broker = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||
actual_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])
|
||||
self._assertShardRangesEqual(shard_ranges, broker.get_shard_ranges())
|
||||
|
||||
# sanity check - no shard ranges when GET is only for objects
|
||||
def check_object_GET(path):
|
||||
@@ -2200,10 +2202,8 @@ class TestContainerController(unittest.TestCase):
|
||||
resp = req.get_response(self.controller)
|
||||
self.assertEqual(204, resp.status_int)
|
||||
|
||||
actual_shard_ranges = broker.get_shard_ranges()
|
||||
self.assertEqual(
|
||||
[dict(sr) for sr in shard_ranges[1:]],
|
||||
[dict(actual_sr) for actual_sr in actual_shard_ranges])
|
||||
self._assertShardRangesEqual(shard_ranges[1:],
|
||||
broker.get_shard_ranges())
|
||||
|
||||
check_shard_GET(shard_ranges[1:], 'a/c')
|
||||
check_shard_GET(shard_ranges[1:2], 'a/c/jam')
|
||||
|
||||
Reference in New Issue
Block a user