Merge "Fix swift-object-info to show policy index at deep working directory"

This commit is contained in:
Jenkins 2015-07-24 18:12:05 +00:00 committed by Gerrit Code Review
commit 2d39102b66
2 changed files with 43 additions and 1 deletions

View File

@ -365,7 +365,13 @@ def print_obj(datafile, check_etag=True, swift_dir='/etc/swift',
datadir = DATADIR_BASE
# try to extract policy index from datafile disk path
policy_index = int(extract_policy(datafile) or POLICIES.legacy)
fullpath = os.path.abspath(datafile)
try:
# obj_path should be device-relative path of an object
obj_path = fullpath[fullpath.rindex('objects'):]
except ValueError:
obj_path = fullpath
policy_index = int(extract_policy(obj_path) or POLICIES.legacy)
try:
if policy_index:

View File

@ -386,6 +386,24 @@ class TestPrintObjFullMeta(TestCliInfoBase):
print_obj(self.datafile, swift_dir=self.testdir)
self.assertTrue('/objects-1/' in out.getvalue())
def test_print_obj_policy_index(self):
# Check an output of policy index when current directory is in
# object-* directory
out = StringIO()
hash_dir = os.path.dirname(self.datafile)
file_name = os.path.basename(self.datafile)
# Change working directory to object hash dir
cwd = os.getcwd()
try:
os.chdir(hash_dir)
with mock.patch('sys.stdout', out):
print_obj(file_name, swift_dir=self.testdir)
os.chdir(cwd)
except OSError: # Failure case of os.chdir
self.fail("Unexpected exception raised")
self.assertTrue('X-Backend-Storage-Policy-Index: 1' in out.getvalue())
def test_print_obj_meta_and_ts_files(self):
# verify that print_obj will also read from meta and ts files
base = os.path.splitext(self.datafile)[0]
@ -610,3 +628,21 @@ Other Metadata:
No metadata found'''
self.assertEquals(out.getvalue().strip(), exp_out)
class TestPrintObjWeirdPath(TestPrintObjFullMeta):
def setUp(self):
super(TestPrintObjWeirdPath, self).setUp()
# device name is objects-0 instead of sda, this is weird.
self.datafile = os.path.join(self.testdir,
'objects-0', 'objects-1',
'1', 'ea8',
'db4449e025aca992307c7c804a67eea8',
'1402017884.18202.data')
utils.mkdirs(os.path.dirname(self.datafile))
with open(self.datafile, 'wb') as fp:
md = {'name': '/AUTH_admin/c/obj',
'Content-Type': 'application/octet-stream',
'ETag': 'd41d8cd98f00b204e9800998ecf8427e',
'Content-Length': 0}
write_metadata(fp, md)