mirror of
https://github.com/ceph/ceph
synced 2024-12-28 14:34:13 +00:00
test_cephfs_shell: add new test for shell cmd at invocation
Test passing each CephFS shell command at invocation of shell. The test replaces run_cephfs_shell_cmd (and other related methods) by it's own version of the same method that runs each shell command as "cephfs-shell -c ceph.conf shellcmd" instead of "cephfs-shell -c ceph.conf -- shellcmd" and then run each test_cephfs_shell.py. Signed-off-by: Rishabh Dave <ridave@redhat.com>
This commit is contained in:
parent
2d5201fdba
commit
d0be1f9f07
@ -926,6 +926,128 @@ class TestMisc(TestCephFSShell):
|
||||
"expected_output -\n{}\ndu_output -\n{}\n".format(
|
||||
dirname, output)
|
||||
|
||||
def _test_every_shell_cmd_at_invocation(self):
|
||||
"""
|
||||
Runs every test in this suite with
|
||||
``cephfs-shell -c ceph.conf <cephfs-shell-command>``
|
||||
instead of ``cephfs-shell -c ceph.conf -- <cephfs-shell-command>``
|
||||
"""
|
||||
from sys import stdout as sys_stdout
|
||||
from sys import modules as sys_modules
|
||||
from inspect import isclass as inspect_isclass
|
||||
from inspect import ismethod as inspect_ismethod
|
||||
from inspect import getmembers as inspect_getmembers
|
||||
from traceback import print_exc as traceback_print_exc
|
||||
|
||||
def fake_run_cephfs_shell_cmd(cmd, mount_x=None, opts=None,
|
||||
config_path=None, stdin=None):
|
||||
if not mount_x:
|
||||
mount_x = self.mount_a
|
||||
if not config_path:
|
||||
config_path = self.mount_a.config_path
|
||||
|
||||
cmd = " ".join(cmd) if isinstance(cmd, list) else cmd
|
||||
|
||||
args = ["cephfs-shell", "-c", self.mount_a.config_path]
|
||||
|
||||
if opts is not None:
|
||||
args.extend(opts)
|
||||
|
||||
args.append(cmd)
|
||||
|
||||
log.info("Running command: {}".format(" ".join(args)))
|
||||
return mount_x.client_remote.run(args=args, stdout=StringIO(),
|
||||
stderr=StringIO(), stdin=stdin)
|
||||
|
||||
def fake_get_cephfs_shell_cmd_output(cmd, mount_x=None, opts=None,
|
||||
stdin=None, config_path=None):
|
||||
return fake_run_cephfs_shell_cmd(cmd=cmd, mount_x=mount_x,
|
||||
opts=opts, stdin=stdin,
|
||||
config_path=config_path).\
|
||||
stdout.getvalue().strip()
|
||||
|
||||
def fake_get_cephfs_shell_cmd_error(cmd, mount_x=None, opts=None,
|
||||
stdin=None, config_path=None):
|
||||
return fake_run_cephfs_shell_cmd(cmd=cmd, mount_x=mount_x,
|
||||
opts=opts, stdin=stdin,
|
||||
config_path=config_path).\
|
||||
stderr.getvalue().strip()
|
||||
|
||||
def fetch_classes_and_run_tests():
|
||||
unreqd_classes = ['CephFSTestCase', 'TestCephFSShell', 'TestMisc',
|
||||
'StringIO']
|
||||
for class_tuple in inspect_getmembers(sys_modules[__name__],
|
||||
inspect_isclass):
|
||||
if class_tuple[0] in unreqd_classes:
|
||||
continue
|
||||
|
||||
# NOTE: for debugging
|
||||
#if class_tuple[0] != 'TestGetAndPut':
|
||||
# continue
|
||||
|
||||
log.info('Running tests from class ' + class_tuple[0] + ' '+\
|
||||
'now...')
|
||||
if not fetch_and_run_tests(class_tuple):
|
||||
return False
|
||||
log.info('Completed running ' + class_tuple[0])
|
||||
|
||||
return True
|
||||
|
||||
def fetch_and_run_tests(class_tuple):
|
||||
test_count, tests_execd_count = (0, 0)
|
||||
|
||||
for method_tuple in inspect_getmembers(class_tuple[1],
|
||||
inspect_ismethod):
|
||||
if method_tuple[0].find('test_') != 0:
|
||||
continue
|
||||
|
||||
# NOTE: for debugging
|
||||
#if method_tuple[0] != 'test_get_to_console':
|
||||
# continue
|
||||
|
||||
test_count += 1
|
||||
obj = class_tuple[1](methodName=method_tuple[0])
|
||||
# XXX: with out this, this test is useless!
|
||||
obj.run_cephfs_shell_cmd = fake_run_cephfs_shell_cmd
|
||||
obj.get_cephfs_shell_cmd_output = \
|
||||
fake_get_cephfs_shell_cmd_output
|
||||
obj.get_cephfs_shell_cmd_error = \
|
||||
fake_get_cephfs_shell_cmd_error
|
||||
|
||||
obj.mount_a = self.mount_a
|
||||
obj.mount_b = self.mount_b
|
||||
obj.fs = self.fs
|
||||
obj.mounts = self.mounts
|
||||
obj.mds_cluster = self.mds_cluster
|
||||
obj.mgr_cluster = self.mgr_cluster
|
||||
obj.mon_manager = self.mon_manager
|
||||
|
||||
# execute test method.
|
||||
log.info('Running test ' + method_tuple[0] + 'now...')
|
||||
try:
|
||||
self.setUp()
|
||||
# this line runs the test method.
|
||||
self.assertIsNot(method_tuple[1](obj), False)
|
||||
self.tearDown()
|
||||
except AssertionError as e:
|
||||
print('\n' + '=' * 78)
|
||||
print('Error occurred in test %s.%s' % (class_tuple,
|
||||
method_tuple))
|
||||
traceback_print_exc(file=sys_stdout)
|
||||
print('=' * 78 + '\n')
|
||||
return False
|
||||
|
||||
log.info('Completed running test ' + method_tuple[0])
|
||||
tests_execd_count += 1
|
||||
|
||||
return test_count == tests_execd_count
|
||||
|
||||
# NOTE: this method begins executing here.
|
||||
self.assertTrue(fetch_classes_and_run_tests())
|
||||
log.info('=' * 76)
|
||||
log.info('test_every_shell_cmd_at_invocation was successful')
|
||||
log.info('=' * 76)
|
||||
|
||||
def test_help(self):
|
||||
"""
|
||||
Test that help outputs commands.
|
||||
|
Loading…
Reference in New Issue
Block a user