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