summaryrefslogtreecommitdiff
path: root/test/unit/proxy/test_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/proxy/test_server.py')
-rw-r--r--test/unit/proxy/test_server.py80
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