Fix (un)patch_policies

Due to the refactoring of TestObjectController (related-change),
all of BaseTestECObjectController test methods are not being
needed to be unpatched because they are expected to run for test
setup-ed policies.

This patch works for items as follows:

- Move part of setUp/tearDown routines at BaseTestObjectController
  needed by only TestReplicatedObjectController which affects
  patch_policies

- Remove all unpatch_policies from BaseTestECObjectController

- Set up self.ec_policy to avoid to set policy index and
  retrieve the policy for each test method.

The reason why I didn't squash this up to the related parent patch is
to clarify what was changed at those patches. The parent is for just
clustering the tests for each test class and this one attempts to
improve.

Related-Change: Idd155401982a2c48110c30b480966a863f6bd305
Change-Id: I25a3f8fc837706d78dca226fe282d9e5ead65a0d
This commit is contained in:
Kota Tsuyuzaki 2017-03-02 21:16:35 -08:00
parent 9627bcbc94
commit 381640cf90

@ -1149,20 +1149,9 @@ class BaseTestObjectController(object):
TestObjControllers.
"""
def setUp(self):
self.app = proxy_server.Application(
None, FakeMemcache(),
logger=debug_logger('proxy-ut'),
account_ring=FakeRing(),
container_ring=FakeRing())
# clear proxy logger result for each test
_test_servers[0].logger._clear()
def tearDown(self):
self.app.account_ring.set_replicas(3)
self.app.container_ring.set_replicas(3)
for policy in POLICIES:
policy.object_ring = FakeRing(base_port=3000)
def assert_status_map(self, method, statuses, expected, raise_exc=False):
with save_globals():
kwargs = {}
@ -1314,6 +1303,20 @@ class TestReplicatedObjectController(
"""
Test suite for replication policy
"""
def setUp(self):
self.app = proxy_server.Application(
None, FakeMemcache(),
logger=debug_logger('proxy-ut'),
account_ring=FakeRing(),
container_ring=FakeRing())
super(TestReplicatedObjectController, self).setUp()
def tearDown(self):
self.app.account_ring.set_replicas(3)
self.app.container_ring.set_replicas(3)
for policy in POLICIES:
policy.object_ring = FakeRing(base_port=3000)
@unpatch_policies
def test_policy_IO(self):
def check_file(policy, cont, devs, check_val):
@ -4812,11 +4815,8 @@ class TestReplicatedObjectController(
class BaseTestECObjectController(BaseTestObjectController):
@unpatch_policies
def test_PUT_ec(self):
policy = POLICIES[self.ec_policy_index]
self.put_container(policy.name, policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
obj = 'abCD' * 10 # small, so we don't get multiple EC stripes
prolis = _test_sockets[0]
@ -4829,28 +4829,29 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (policy.name, md5(obj).hexdigest(),
'\r\n%s' % (self.ec_policy.name, md5(obj).hexdigest(),
len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 201'
self.assertEqual(headers[:len(exp)], exp)
ecd = policy.pyeclib_driver
ecd = self.ec_policy.pyeclib_driver
expected_pieces = set(ecd.encode(obj))
# go to disk to make sure it's there and all erasure-coded
partition, nodes = policy.object_ring.get_nodes('a', policy.name, 'o1')
partition, nodes = self.ec_policy.object_ring.get_nodes(
'a', self.ec_policy.name, 'o1')
conf = {'devices': _testdir, 'mount_check': 'false'}
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[policy]
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[self.ec_policy]
got_pieces = set()
got_indices = set()
got_durable = []
for node_index, node in enumerate(nodes):
df = df_mgr.get_diskfile(node['device'], partition,
'a', policy.name, 'o1',
policy=policy)
'a', self.ec_policy.name, 'o1',
policy=self.ec_policy)
with df.open():
meta = df.get_metadata()
contents = ''.join(df.reader())
@ -4883,8 +4884,8 @@ class BaseTestECObjectController(BaseTestObjectController):
'#d.data')
durable_file = os.path.join(
_testdir, node['device'], storage_directory(
diskfile.get_data_dir(policy),
partition, hash_path('a', policy.name, 'o1')),
diskfile.get_data_dir(self.ec_policy),
partition, hash_path('a', self.ec_policy.name, 'o1')),
durable_file)
if os.path.isfile(durable_file):
got_durable.append(True)
@ -4897,13 +4898,11 @@ class BaseTestECObjectController(BaseTestObjectController):
num_durable_puts = sum(d is True for d in got_durable)
self.assertGreaterEqual(num_durable_puts, 2)
@unpatch_policies
def test_PUT_ec_multiple_segments(self):
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
pyeclib_header_size = len(ec_policy.pyeclib_driver.encode("")[0])
segment_size = ec_policy.ec_segment_size
pyeclib_header_size = len(self.ec_policy.pyeclib_driver.encode("")[0])
segment_size = self.ec_policy.ec_segment_size
# Big enough to have multiple segments. Also a multiple of the
# segment size to get coverage of that path too.
@ -4918,7 +4917,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, len(obj), obj))
'\r\n%s' % (self.ec_policy.name, len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 201'
@ -4929,18 +4928,18 @@ class BaseTestECObjectController(BaseTestObjectController):
# things (one per segment)
expected_length = (len(obj) / 2 + pyeclib_header_size * 3)
partition, nodes = ec_policy.object_ring.get_nodes(
'a', ec_policy.name, 'o2')
partition, nodes = self.ec_policy.object_ring.get_nodes(
'a', self.ec_policy.name, 'o2')
conf = {'devices': _testdir, 'mount_check': 'false'}
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[ec_policy]
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[self.ec_policy]
got_durable = []
fragment_archives = []
for node in nodes:
df = df_mgr.get_diskfile(
node['device'], partition, 'a',
ec_policy.name, 'o2', policy=ec_policy)
self.ec_policy.name, 'o2', policy=self.ec_policy)
with df.open():
meta = df.get_metadata()
contents = ''.join(df.reader())
@ -4953,15 +4952,15 @@ class BaseTestECObjectController(BaseTestObjectController):
'#d.data')
durable_file = os.path.join(
_testdir, node['device'], storage_directory(
diskfile.get_data_dir(ec_policy),
partition, hash_path('a', ec_policy.name, 'o2')),
diskfile.get_data_dir(self.ec_policy),
partition, hash_path('a', self.ec_policy.name, 'o2')),
durable_file)
if os.path.isfile(durable_file):
got_durable.append(True)
# Verify that we can decode each individual fragment and that they
# are all the correct size
fragment_size = ec_policy.fragment_size
fragment_size = self.ec_policy.fragment_size
nfragments = int(
math.ceil(float(len(fragment_archives[0])) / fragment_size))
@ -4972,7 +4971,7 @@ class BaseTestECObjectController(BaseTestObjectController):
try:
frags = [fa[fragment_start:fragment_end]
for fa in fragment_archives]
seg = ec_policy.pyeclib_driver.decode(frags)
seg = self.ec_policy.pyeclib_driver.decode(frags)
except ECDriverError:
self.fail("Failed to decode fragments %d; this probably "
"means the fragments are not the sizes they "
@ -4988,10 +4987,8 @@ class BaseTestECObjectController(BaseTestObjectController):
num_durable_puts = sum(d is True for d in got_durable)
self.assertGreaterEqual(num_durable_puts, 2)
@unpatch_policies
def test_PUT_ec_object_etag_mismatch(self):
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
obj = '90:6A:02:60:B1:08-96da3e706025537fc42464916427727e'
prolis = _test_sockets[0]
@ -5005,7 +5002,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name,
'\r\n%s' % (self.ec_policy.name,
md5('something else').hexdigest(),
len(obj), obj))
fd.flush()
@ -5015,26 +5012,25 @@ class BaseTestECObjectController(BaseTestObjectController):
# nothing should have made it to disk on the object servers
partition, nodes = prosrv.get_object_ring(
int(ec_policy)).get_nodes('a', ec_policy.name, 'o3')
int(self.ec_policy)).get_nodes('a', self.ec_policy.name, 'o3')
conf = {'devices': _testdir, 'mount_check': 'false'}
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[ec_policy]
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[self.ec_policy]
for node in nodes:
df = df_mgr.get_diskfile(node['device'], partition,
'a', ec_policy.name, 'o3',
policy=ec_policy)
'a', self.ec_policy.name, 'o3',
policy=self.ec_policy)
self.assertRaises(DiskFileNotExist, df.open)
@unpatch_policies
def test_PUT_ec_fragment_archive_etag_mismatch(self):
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
# Cause a hash mismatch by feeding one particular MD5 hasher some
# extra data. The goal here is to get exactly more than one of the
# hashers in an object server.
count = (ec_policy.object_ring.replica_count - ec_policy.ec_ndata)
count = (
self.ec_policy.object_ring.replica_count - self.ec_policy.ec_ndata)
countdown = [count]
def busted_md5_constructor(initial_str=""):
@ -5057,7 +5053,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, md5(obj).hexdigest(),
'\r\n%s' % (self.ec_policy.name, md5(obj).hexdigest(),
len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
@ -5067,16 +5063,16 @@ class BaseTestECObjectController(BaseTestObjectController):
# replica count - 1 of the fragment archives should have
# landed on disk
partition, nodes = prosrv.get_object_ring(
int(ec_policy)).get_nodes('a', ec_policy.name, 'pimento')
int(self.ec_policy)).get_nodes('a', self.ec_policy.name, 'pimento')
conf = {'devices': _testdir, 'mount_check': 'false'}
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[ec_policy]
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[self.ec_policy]
found = 0
for node in nodes:
df = df_mgr.get_diskfile(node['device'], partition,
'a', ec_policy.name, 'pimento',
policy=ec_policy)
'a', self.ec_policy.name, 'pimento',
policy=self.ec_policy)
try:
# diskfile open won't succeed because no durable was written,
# so look under the hood for data files.
@ -5091,11 +5087,9 @@ class BaseTestECObjectController(BaseTestObjectController):
found += 1
except OSError:
pass
self.assertEqual(found, ec_policy.ec_ndata)
self.assertEqual(found, self.ec_policy.ec_ndata)
@unpatch_policies
def test_PUT_ec_fragment_quorum_archive_etag_mismatch(self):
ec_policy = POLICIES[self.ec_policy_index]
self.put_container("ec", "ec-con")
def busted_md5_constructor(initial_str=""):
@ -5139,18 +5133,16 @@ class BaseTestECObjectController(BaseTestObjectController):
'a', 'ec-con', 'quorum')
conf = {'devices': _testdir, 'mount_check': 'false'}
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[ec_policy]
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[self.ec_policy]
for node in nodes:
df = df_mgr.get_diskfile(node['device'], partition,
'a', 'ec-con', 'quorum',
policy=ec_policy)
policy=self.ec_policy)
if os.path.exists(df._datadir):
self.assertFalse(os.listdir(df._datadir)) # should be empty
@unpatch_policies
def test_PUT_ec_fragment_quorum_bad_request(self):
ec_policy = POLICIES[self.ec_policy_index]
self.put_container("ec", "ec-con")
obj = 'uvarovite-esurience-cerated-symphysic'
@ -5198,19 +5190,17 @@ class BaseTestECObjectController(BaseTestObjectController):
'a', 'ec-con', 'quorum')
conf = {'devices': _testdir, 'mount_check': 'false'}
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[ec_policy]
df_mgr = diskfile.DiskFileRouter(conf, FakeLogger())[self.ec_policy]
for node in nodes:
df = df_mgr.get_diskfile(node['device'], partition,
'a', 'ec-con', 'quorum',
policy=ec_policy)
policy=self.ec_policy)
if os.path.exists(df._datadir):
self.assertFalse(os.listdir(df._datadir)) # should be empty
@unpatch_policies
def test_PUT_ec_if_none_match(self):
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
obj = 'ananepionic-lepidophyllous-ropewalker-neglectful'
prolis = _test_sockets[0]
@ -5223,7 +5213,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, md5(obj).hexdigest(),
'\r\n%s' % (self.ec_policy.name, md5(obj).hexdigest(),
len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
@ -5240,20 +5230,18 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, md5(obj).hexdigest(),
'\r\n%s' % (self.ec_policy.name, md5(obj).hexdigest(),
len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 412'
self.assertEqual(headers[:len(exp)], exp)
@unpatch_policies
def test_GET_ec(self):
prolis = _test_sockets[0]
prosrv = _test_servers[0]
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
obj = '0123456' * 11 * 17
@ -5266,7 +5254,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'X-Storage-Token: t\r\n'
'X-Object-Meta-Color: chartreuse\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, len(obj), obj))
'\r\n%s' % (self.ec_policy.name, len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 201'
@ -5278,7 +5266,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Host: localhost\r\n'
'Connection: close\r\n'
'X-Storage-Token: t\r\n'
'\r\n' % ec_policy.name)
'\r\n' % self.ec_policy.name)
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 200'
@ -5301,25 +5289,22 @@ class BaseTestECObjectController(BaseTestObjectController):
self.assertEqual(len(error_lines), 0) # sanity
self.assertEqual(len(warn_lines), 0) # sanity
@unpatch_policies
def test_conditional_GET_ec(self):
policy = POLICIES[self.ec_policy_index]
self.assertEqual('erasure_coding', policy.policy_type) # sanity
self._test_conditional_GET(policy)
# sanity
self.assertEqual('erasure_coding', self.ec_policy.policy_type)
self._test_conditional_GET(self.ec_policy)
@unpatch_policies
def test_GET_ec_big(self):
prolis = _test_sockets[0]
prosrv = _test_servers[0]
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
# our EC segment size is 4 KiB, so this is multiple (3) segments;
# we'll verify that with a sanity check
obj = 'a moose once bit my sister' * 400
self.assertGreater(
len(obj), ec_policy.ec_segment_size * 2,
len(obj), self.ec_policy.ec_segment_size * 2,
"object is too small for proper testing")
sock = connect_tcp(('localhost', prolis.getsockname()[1]))
@ -5330,7 +5315,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, len(obj), obj))
'\r\n%s' % (self.ec_policy.name, len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 201'
@ -5342,7 +5327,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Host: localhost\r\n'
'Connection: close\r\n'
'X-Storage-Token: t\r\n'
'\r\n' % ec_policy.name)
'\r\n' % self.ec_policy.name)
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 200'
@ -5368,10 +5353,8 @@ class BaseTestECObjectController(BaseTestObjectController):
self.assertEqual(len(error_lines), 0) # sanity
self.assertEqual(len(warn_lines), 0) # sanity
@unpatch_policies
def test_GET_ec_failure_handling(self):
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
obj = 'look at this object; it is simply amazing ' * 500
prolis = _test_sockets[0]
@ -5383,7 +5366,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Content-Length: %d\r\n'
'X-Storage-Token: t\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, len(obj), obj))
'\r\n%s' % (self.ec_policy.name, len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 201'
@ -5424,7 +5407,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Host: localhost\r\n'
'Connection: close\r\n'
'X-Storage-Token: t\r\n'
'\r\n' % ec_policy.name)
'\r\n' % self.ec_policy.name)
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 200'
@ -5450,13 +5433,11 @@ class BaseTestECObjectController(BaseTestObjectController):
# get out of date without anyone noticing
self.assertTrue(0 < len(gotten_obj) < len(obj))
@unpatch_policies
def test_HEAD_ec(self):
prolis = _test_sockets[0]
prosrv = _test_servers[0]
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
obj = '0123456' * 11 * 17
@ -5469,7 +5450,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'X-Storage-Token: t\r\n'
'X-Object-Meta-Color: chartreuse\r\n'
'Content-Type: application/octet-stream\r\n'
'\r\n%s' % (ec_policy.name, len(obj), obj))
'\r\n%s' % (self.ec_policy.name, len(obj), obj))
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 201'
@ -5481,7 +5462,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Host: localhost\r\n'
'Connection: close\r\n'
'X-Storage-Token: t\r\n'
'\r\n' % ec_policy.name)
'\r\n' % self.ec_policy.name)
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 200'
@ -5497,13 +5478,11 @@ class BaseTestECObjectController(BaseTestObjectController):
self.assertEqual(len(error_lines), 0) # sanity
self.assertEqual(len(warn_lines), 0) # sanity
@unpatch_policies
def test_GET_ec_404(self):
prolis = _test_sockets[0]
prosrv = _test_servers[0]
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
sock = connect_tcp(('localhost', prolis.getsockname()[1]))
fd = sock.makefile()
@ -5511,7 +5490,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Host: localhost\r\n'
'Connection: close\r\n'
'X-Storage-Token: t\r\n'
'\r\n' % ec_policy.name)
'\r\n' % self.ec_policy.name)
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 404'
@ -5522,13 +5501,11 @@ class BaseTestECObjectController(BaseTestObjectController):
self.assertEqual(len(error_lines), 0) # sanity
self.assertEqual(len(warn_lines), 0) # sanity
@unpatch_policies
def test_HEAD_ec_404(self):
prolis = _test_sockets[0]
prosrv = _test_servers[0]
ec_policy = POLICIES[self.ec_policy_index]
self.put_container(ec_policy.name, ec_policy.name)
self.put_container(self.ec_policy.name, self.ec_policy.name)
sock = connect_tcp(('localhost', prolis.getsockname()[1]))
fd = sock.makefile()
@ -5536,7 +5513,7 @@ class BaseTestECObjectController(BaseTestObjectController):
'Host: localhost\r\n'
'Connection: close\r\n'
'X-Storage-Token: t\r\n'
'\r\n' % ec_policy.name)
'\r\n' % self.ec_policy.name)
fd.flush()
headers = readuntil2crlfs(fd)
exp = 'HTTP/1.1 404'
@ -5547,16 +5524,14 @@ class BaseTestECObjectController(BaseTestObjectController):
self.assertEqual(len(error_lines), 0) # sanity
self.assertEqual(len(warn_lines), 0) # sanity
@unpatch_policies
def test_reload_ring_ec(self):
policy = POLICIES[self.ec_policy_index]
self.put_container("ec", "ec-con")
orig_rtime = policy.object_ring._rtime
orig_replica_count = policy.object_ring.replica_count
orig_rtime = self.ec_policy.object_ring._rtime
orig_replica_count = self.ec_policy.object_ring.replica_count
# save original file as back up
copyfile(policy.object_ring.serialized_path,
policy.object_ring.serialized_path + '.bak')
copyfile(self.ec_policy.object_ring.serialized_path,
self.ec_policy.object_ring.serialized_path + '.bak')
try:
# overwrite with 2 replica, 2 devices ring
@ -5567,12 +5542,12 @@ class BaseTestECObjectController(BaseTestObjectController):
obj_devs.append(
{'port': _test_sockets[-2].getsockname()[1],
'device': 'sdh1'})
write_fake_ring(policy.object_ring.serialized_path,
write_fake_ring(self.ec_policy.object_ring.serialized_path,
*obj_devs)
def get_ring_reloaded_response(method):
# force to reload at the request
policy.object_ring._rtime = 0
self.ec_policy.object_ring._rtime = 0
trans_data = ['%s /v1/a/ec-con/o2 HTTP/1.1\r\n' % method,
'Host: localhost\r\n',
@ -5610,7 +5585,7 @@ class BaseTestECObjectController(BaseTestObjectController):
# proxy didn't load newest ring, use older one
self.assertEqual(orig_replica_count,
policy.object_ring.replica_count)
self.ec_policy.object_ring.replica_count)
if method == 'POST':
# Take care fast post here!
@ -5633,25 +5608,25 @@ class BaseTestECObjectController(BaseTestObjectController):
self.assertEqual(headers[:len(exp)], exp)
# sanity
self.assertEqual(orig_replica_count,
policy.object_ring.replica_count)
self.ec_policy.object_ring.replica_count)
finally:
policy.object_ring._rtime = orig_rtime
os.rename(policy.object_ring.serialized_path + '.bak',
policy.object_ring.serialized_path)
self.ec_policy.object_ring._rtime = orig_rtime
os.rename(self.ec_policy.object_ring.serialized_path + '.bak',
self.ec_policy.object_ring.serialized_path)
@patch_policies([StoragePolicy(0, 'zero', True,
object_ring=FakeRing(base_port=3000))])
class TestECObjectController(BaseTestECObjectController, unittest.TestCase):
ec_policy_index = 3
def setUp(self):
self.ec_policy = POLICIES[3]
super(TestECObjectController, self).setUp()
@patch_policies([StoragePolicy(0, 'zero', True,
object_ring=FakeRing(base_port=3000))])
class TestECDuplicationObjectController(
BaseTestECObjectController, unittest.TestCase):
ec_policy_index = 4
def setUp(self):
self.ec_policy = POLICIES[4]
super(TestECDuplicationObjectController, self).setUp()
class TestECMismatchedFA(unittest.TestCase):