Add unit tests to cover print_item_locations
Add unit tests to cover all code paths in print_item_locations function in cli/info.py. Update comment to match what's tested for invalid/missing policy. Update tests to verify output of print_item_locations Corrected PEP8 compliance violations. Change-Id: I84958cb70205ee8d7ea246826dd56201fa642da9
This commit is contained in:
parent
0453730f93
commit
331382e192
@ -25,7 +25,8 @@ from swift.common import ring, utils
|
||||
from swift.common.swob import Request
|
||||
from swift.common.storage_policy import StoragePolicy, POLICIES
|
||||
from swift.cli.info import print_db_info_metadata, print_ring_locations, \
|
||||
print_info, print_obj_metadata, print_obj, InfoSystemExit
|
||||
print_info, print_obj_metadata, print_obj, InfoSystemExit, \
|
||||
print_item_locations
|
||||
from swift.account.server import AccountController
|
||||
from swift.container.server import ContainerController
|
||||
from swift.obj.diskfile import write_metadata
|
||||
@ -231,6 +232,171 @@ No user metadata found in db file''' % POLICIES[0].name
|
||||
self.assertTrue(exp_obj1 in out.getvalue())
|
||||
self.assertTrue(exp_obj2 in out.getvalue())
|
||||
|
||||
def test_print_item_locations_invalid_args(self):
|
||||
# No target specified
|
||||
self.assertRaises(InfoSystemExit, print_item_locations,
|
||||
None)
|
||||
# Need a ring or policy
|
||||
self.assertRaises(InfoSystemExit, print_item_locations,
|
||||
None, account='account', obj='object')
|
||||
# No account specified
|
||||
self.assertRaises(InfoSystemExit, print_item_locations,
|
||||
None, container='con')
|
||||
# No policy named 'xyz' (unrecognized policy)
|
||||
self.assertRaises(InfoSystemExit, print_item_locations,
|
||||
None, obj='object', policy_name='xyz')
|
||||
# No container specified
|
||||
objring = ring.Ring(self.testdir, ring_name='object')
|
||||
self.assertRaises(InfoSystemExit, print_item_locations,
|
||||
objring, account='account', obj='object')
|
||||
|
||||
def test_print_item_locations_ring_policy_mismatch_no_target(self):
|
||||
out = StringIO()
|
||||
with mock.patch('sys.stdout', out):
|
||||
objring = ring.Ring(self.testdir, ring_name='object')
|
||||
# Test mismatch of ring and policy name (valid policy)
|
||||
self.assertRaises(InfoSystemExit, print_item_locations,
|
||||
objring, policy_name='zero')
|
||||
self.assertTrue('Warning: mismatch between ring and policy name!'
|
||||
in out.getvalue())
|
||||
self.assertTrue('No target specified' in out.getvalue())
|
||||
|
||||
def test_print_item_locations_invalid_policy_no_target(self):
|
||||
out = StringIO()
|
||||
policy_name = 'nineteen'
|
||||
with mock.patch('sys.stdout', out):
|
||||
objring = ring.Ring(self.testdir, ring_name='object')
|
||||
self.assertRaises(InfoSystemExit, print_item_locations,
|
||||
objring, policy_name=policy_name)
|
||||
exp_msg = 'Warning: Policy %s is not valid' % policy_name
|
||||
self.assertTrue(exp_msg in out.getvalue())
|
||||
self.assertTrue('No target specified' in out.getvalue())
|
||||
|
||||
def test_print_item_locations_policy_object(self):
|
||||
out = StringIO()
|
||||
part = '1'
|
||||
with mock.patch('sys.stdout', out):
|
||||
print_item_locations(None, partition=part, policy_name='zero',
|
||||
swift_dir=self.testdir)
|
||||
exp_part_msg = 'Partition\t%s' % part
|
||||
exp_acct_msg = 'Account \tNone'
|
||||
exp_cont_msg = 'Container\tNone'
|
||||
exp_obj_msg = 'Object \tNone'
|
||||
self.assertTrue(exp_part_msg in out.getvalue())
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_item_locations_dashed_ring_name_partition(self):
|
||||
out = StringIO()
|
||||
part = '1'
|
||||
with mock.patch('sys.stdout', out):
|
||||
print_item_locations(None, policy_name='one',
|
||||
ring_name='foo-bar', partition=part,
|
||||
swift_dir=self.testdir)
|
||||
exp_part_msg = 'Partition\t%s' % part
|
||||
exp_acct_msg = 'Account \tNone'
|
||||
exp_cont_msg = 'Container\tNone'
|
||||
exp_obj_msg = 'Object \tNone'
|
||||
self.assertTrue(exp_part_msg in out.getvalue())
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_item_locations_account_with_ring(self):
|
||||
out = StringIO()
|
||||
account = 'account'
|
||||
with mock.patch('sys.stdout', out):
|
||||
account_ring = ring.Ring(self.testdir, ring_name=account)
|
||||
print_item_locations(account_ring, account=account)
|
||||
exp_msg = 'Account \t%s' % account
|
||||
self.assertTrue(exp_msg in out.getvalue())
|
||||
exp_warning = 'Warning: account specified ' + \
|
||||
'but ring not named "account"'
|
||||
self.assertTrue(exp_warning in out.getvalue())
|
||||
exp_acct_msg = 'Account \t%s' % account
|
||||
exp_cont_msg = 'Container\tNone'
|
||||
exp_obj_msg = 'Object \tNone'
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_item_locations_account_no_ring(self):
|
||||
out = StringIO()
|
||||
account = 'account'
|
||||
with mock.patch('sys.stdout', out):
|
||||
print_item_locations(None, account=account,
|
||||
swift_dir=self.testdir)
|
||||
exp_acct_msg = 'Account \t%s' % account
|
||||
exp_cont_msg = 'Container\tNone'
|
||||
exp_obj_msg = 'Object \tNone'
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_item_locations_account_container_ring(self):
|
||||
out = StringIO()
|
||||
account = 'account'
|
||||
container = 'container'
|
||||
with mock.patch('sys.stdout', out):
|
||||
container_ring = ring.Ring(self.testdir, ring_name='container')
|
||||
print_item_locations(container_ring, account=account,
|
||||
container=container)
|
||||
exp_acct_msg = 'Account \t%s' % account
|
||||
exp_cont_msg = 'Container\t%s' % container
|
||||
exp_obj_msg = 'Object \tNone'
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_item_locations_account_container_no_ring(self):
|
||||
out = StringIO()
|
||||
account = 'account'
|
||||
container = 'container'
|
||||
with mock.patch('sys.stdout', out):
|
||||
print_item_locations(None, account=account,
|
||||
container=container, swift_dir=self.testdir)
|
||||
exp_acct_msg = 'Account \t%s' % account
|
||||
exp_cont_msg = 'Container\t%s' % container
|
||||
exp_obj_msg = 'Object \tNone'
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_item_locations_account_container_object_ring(self):
|
||||
out = StringIO()
|
||||
account = 'account'
|
||||
container = 'container'
|
||||
obj = 'object'
|
||||
with mock.patch('sys.stdout', out):
|
||||
object_ring = ring.Ring(self.testdir, ring_name='object')
|
||||
print_item_locations(object_ring, ring_name='object',
|
||||
account=account, container=container,
|
||||
obj=obj)
|
||||
exp_acct_msg = 'Account \t%s' % account
|
||||
exp_cont_msg = 'Container\t%s' % container
|
||||
exp_obj_msg = 'Object \t%s' % obj
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_item_locations_account_container_object_dashed_ring(self):
|
||||
out = StringIO()
|
||||
account = 'account'
|
||||
container = 'container'
|
||||
obj = 'object'
|
||||
with mock.patch('sys.stdout', out):
|
||||
object_ring = ring.Ring(self.testdir, ring_name='object-1')
|
||||
print_item_locations(object_ring, ring_name='object-1',
|
||||
account=account, container=container,
|
||||
obj=obj)
|
||||
exp_acct_msg = 'Account \t%s' % account
|
||||
exp_cont_msg = 'Container\t%s' % container
|
||||
exp_obj_msg = 'Object \t%s' % obj
|
||||
self.assertTrue(exp_acct_msg in out.getvalue())
|
||||
self.assertTrue(exp_cont_msg in out.getvalue())
|
||||
self.assertTrue(exp_obj_msg in out.getvalue())
|
||||
|
||||
def test_print_info(self):
|
||||
db_file = 'foo'
|
||||
self.assertRaises(InfoSystemExit, print_info, 'object', db_file)
|
||||
|
Loading…
Reference in New Issue
Block a user