diff options
Diffstat (limited to 'test/unit/proxy/test_server.py')
-rw-r--r-- | test/unit/proxy/test_server.py | 80 |
1 files changed, 48 insertions, 32 deletions
diff --git a/test/unit/proxy/test_server.py b/test/unit/proxy/test_server.py index e6de59552..50b1fcd1d 100644 --- a/test/unit/proxy/test_server.py +++ b/test/unit/proxy/test_server.py @@ -71,7 +71,7 @@ from swift.common import utils, constraints, registry from swift.common.utils import hash_path, storage_directory, \ parse_content_type, parse_mime_headers, StatsdClient, \ iter_multipart_mime_documents, public, mkdirs, NullLogger, md5, \ - node_to_string + node_to_string, NamespaceBoundList from swift.common.wsgi import loadapp, ConfigString from swift.common.http_protocol import SwiftHttpProtocol from swift.proxy.controllers import base as proxy_base @@ -4370,13 +4370,16 @@ class TestReplicatedObjectController( params={'states': 'updating'}, headers={'X-Backend-Record-Type': 'shard'}) - cache_key = 'shard-updating/a/c' + cache_key = 'shard-updating-v2/a/c' self.assertIn(cache_key, req.environ['swift.cache'].store) - self.assertEqual(req.environ['swift.cache'].store[cache_key], - [dict(sr) for sr in shard_ranges]) + cached_namespaces = NamespaceBoundList.parse(shard_ranges) + self.assertEqual( + req.environ['swift.cache'].store[cache_key], + cached_namespaces.bounds) self.assertIn(cache_key, req.environ.get('swift.infocache')) - self.assertEqual(req.environ['swift.infocache'][cache_key], - tuple(dict(sr) for sr in shard_ranges)) + self.assertEqual( + req.environ['swift.infocache'][cache_key].bounds, + cached_namespaces.bounds) # make sure backend requests included expected container headers container_headers = {} @@ -4433,8 +4436,11 @@ class TestReplicatedObjectController( '.shards_a/c_nope', utils.Timestamp.now(), 'u', ''), ] cache = FakeMemcache() - cache.set('shard-updating/a/c', tuple( - dict(shard_range) for shard_range in shard_ranges)) + cache.set( + 'shard-updating-v2/a/c', + tuple( + [shard_range.lower_str, str(shard_range.name)] + for shard_range in shard_ranges)) req = Request.blank('/v1/a/c/o', {'swift.cache': cache}, method=method, body='', headers={'Content-Type': 'text/plain'}) @@ -4467,10 +4473,11 @@ class TestReplicatedObjectController( container_request, method='HEAD', path='/sda/0/a/c') # infocache gets populated from memcache - cache_key = 'shard-updating/a/c' + cache_key = 'shard-updating-v2/a/c' self.assertIn(cache_key, req.environ.get('swift.infocache')) - self.assertEqual(req.environ['swift.infocache'][cache_key], - tuple(dict(sr) for sr in shard_ranges)) + self.assertEqual( + req.environ['swift.infocache'][cache_key].bounds, + NamespaceBoundList.parse(shard_ranges).bounds) # make sure backend requests included expected container headers container_headers = {} @@ -4527,8 +4534,8 @@ class TestReplicatedObjectController( '.shards_a/c_nope', utils.Timestamp.now(), 'u', ''), ] infocache = { - 'shard-updating/a/c': - tuple(dict(shard_range) for shard_range in shard_ranges)} + 'shard-updating-v2/a/c': + NamespaceBoundList.parse(shard_ranges)} req = Request.blank('/v1/a/c/o', {'swift.infocache': infocache}, method=method, body='', headers={'Content-Type': 'text/plain'}) @@ -4560,10 +4567,11 @@ class TestReplicatedObjectController( container_request, method='HEAD', path='/sda/0/a/c') # verify content in infocache. - cache_key = 'shard-updating/a/c' + cache_key = 'shard-updating-v2/a/c' self.assertIn(cache_key, req.environ.get('swift.infocache')) - self.assertEqual(req.environ['swift.infocache'][cache_key], - tuple(dict(sr) for sr in shard_ranges)) + self.assertEqual( + req.environ['swift.infocache'][cache_key].bounds, + NamespaceBoundList.parse(shard_ranges).bounds) # make sure backend requests included expected container headers container_headers = {} @@ -4621,8 +4629,10 @@ class TestReplicatedObjectController( '.shards_a/c_no_way', utils.Timestamp.now(), 'u', ''), ] cache = FakeMemcache() - cache.set('shard-updating/a/c', tuple( - dict(shard_range) for shard_range in cached_shard_ranges)) + cache.set('shard-updating-v2/a/c', + tuple( + [sr.lower_str, str(sr.name)] + for sr in cached_shard_ranges)) # sanity check: we can get the old shard from cache req = Request.blank( @@ -4636,7 +4646,7 @@ class TestReplicatedObjectController( 'x-backend-sharding-state': sharding_state, 'X-Backend-Record-Type': 'shard'} with mock.patch('random.random', return_value=1), \ - mocked_http_conn(*status_codes, headers=resp_headers): + mocked_http_conn(*status_codes, headers=resp_headers): resp = req.get_response(self.app) self.assertEqual(resp.status_int, 202) @@ -4646,13 +4656,16 @@ class TestReplicatedObjectController( 'object.shard_updating.cache.hit': 1}, stats) # cached shard ranges are still there - cache_key = 'shard-updating/a/c' + cache_key = 'shard-updating-v2/a/c' self.assertIn(cache_key, req.environ['swift.cache'].store) - self.assertEqual(req.environ['swift.cache'].store[cache_key], - [dict(sr) for sr in cached_shard_ranges]) + cached_namespaces = NamespaceBoundList.parse(cached_shard_ranges) + self.assertEqual( + req.environ['swift.cache'].store[cache_key], + cached_namespaces.bounds) self.assertIn(cache_key, req.environ.get('swift.infocache')) - self.assertEqual(req.environ['swift.infocache'][cache_key], - tuple(dict(sr) for sr in cached_shard_ranges)) + self.assertEqual( + req.environ['swift.infocache'][cache_key].bounds, + cached_namespaces.bounds) # ...but we have some chance to skip cache req = Request.blank( @@ -4675,8 +4688,8 @@ class TestReplicatedObjectController( dict(shard_range) for shard_range in shard_ranges]).encode('ascii') with mock.patch('random.random', return_value=0), \ - mocked_http_conn(*status_codes, headers=resp_headers, - body=body) as fake_conn: + mocked_http_conn(*status_codes, headers=resp_headers, + body=body) as fake_conn: resp = req.get_response(self.app) self.assertEqual(resp.status_int, 202) @@ -4698,13 +4711,16 @@ class TestReplicatedObjectController( headers={'X-Backend-Record-Type': 'shard'}) # and skipping cache will refresh it - cache_key = 'shard-updating/a/c' + cache_key = 'shard-updating-v2/a/c' self.assertIn(cache_key, req.environ['swift.cache'].store) - self.assertEqual(req.environ['swift.cache'].store[cache_key], - [dict(sr) for sr in shard_ranges]) + cached_namespaces = NamespaceBoundList.parse(shard_ranges) + self.assertEqual( + req.environ['swift.cache'].store[cache_key], + cached_namespaces.bounds) self.assertIn(cache_key, req.environ.get('swift.infocache')) - self.assertEqual(req.environ['swift.infocache'][cache_key], - tuple(dict(sr) for sr in shard_ranges)) + self.assertEqual( + req.environ['swift.infocache'][cache_key].bounds, + cached_namespaces.bounds) # make sure backend requests included expected container headers container_headers = {} @@ -4805,7 +4821,7 @@ class TestReplicatedObjectController( headers={'X-Backend-Record-Type': 'shard'}) # infocache does not get populated from memcache - cache_key = 'shard-updating/a/c' + cache_key = 'shard-updating-v2/a/c' self.assertNotIn(cache_key, req.environ.get('swift.infocache')) # make sure backend requests included expected container headers |