Skip to content

Commit

Permalink
Fix manager() adding extra quotes
Browse files Browse the repository at this point in the history
  • Loading branch information
vstumpf committed May 13, 2019
1 parent ade931e commit e433c5b
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 24 deletions.
35 changes: 32 additions & 3 deletions test/fw/ptl/lib/pbs_testlib.py
Expand Up @@ -6527,11 +6527,40 @@ def manager(self, cmd, obj_type, attrib=None, id=None, extend=None,
v = v[1]
else:
op = '='
# handle string arrays as double quotes if
# not already set:
if isinstance(v, list) and not isinstance(v, str):
# handle string arrays with strings
# that contain special characters
# with multiple manager calls
if any((c in vv) for c in set(', \'\n"')
for vv in v):
if op == '+=' or op == '=':
oper = INCR
else:
oper = DECR
for vv in v:
a = {k: (oper, vv)}
rc = self.manager(cmd=cmd,
obj_type=obj_type,
attrib=a, id=id,
extend=extend,
level=level,
sudo=sudo,
runas=runas,
logerr=logerr)
if rc:
return rc
return 0
# if there are no special characters, then
# join the list and parse it normally.
v = ','.join(v)
if isinstance(v, str):
if ',' in v and v[0] != '"':
# don't quote if already quoted
if v[0] == v[-1] and v[0] in set('"\''):
pass
# handle string arrays
elif ',' in v and v[0] != '"':
v = '"' + v + '"'
# handle strings that need to be quoted
elif any((c in v) for c in set(', \'\n"')):
if '"' in v:
v = "'%s'" % v
Expand Down
18 changes: 9 additions & 9 deletions test/tests/functional/pbs_cgroups_hook.py
Expand Up @@ -844,9 +844,9 @@ def load_hook(self, filename):
script = fd.read()
except IOError:
self.assertTrue(False, 'Failed to open hook file %s' % filename)
events = '"execjob_begin,execjob_launch,execjob_attach,'
events += 'execjob_epilogue,execjob_end,exechost_startup,'
events += 'exechost_periodic,execjob_resize,execjob_abort"'
events = ['execjob_begin', 'execjob_launch', 'execjob_attach',
'execjob_epilogue', 'execjob_end', 'exechost_startup',
'exechost_periodic', 'execjob_resize', 'execjob_abort']
a = {'enabled': 'True',
'freq': '10',
'alarm': 30,
Expand Down Expand Up @@ -1898,8 +1898,8 @@ def test_cgroup_execjob_end_should_delete_cgroup(self):
self.load_config(self.cfg4 % (self.swapctl))
# remove epilogue and periodic from the list of events
attr = {'enabled': 'True',
'event': '"execjob_begin,execjob_launch,'
'execjob_attach,execjob_end,exechost_startup"'}
'event': ['execjob_begin', 'execjob_launch',
'execjob_attach', 'execjob_end', 'exechost_startup']}
self.server.manager(MGR_CMD_SET, HOOK, attr, self.hook_name)
self.server.expect(NODE, {'state': 'free'}, id=self.nodes_list[0])
j = Job(TEST_USER)
Expand Down Expand Up @@ -2337,7 +2337,7 @@ def test_cgroup_periodic_update_known_jobs(self):
event.reject()
event.accept()
""" % jid1
events = '"execjob_begin,exechost_periodic"'
events = ['execjob_begin', 'exechost_periodic']
hookconf = {'enabled': 'True', 'freq': 2, 'alarm': 30, 'event': events}
self.server.create_import_hook(hookname, hookconf, hookbody,
overwrite=True)
Expand Down Expand Up @@ -2745,9 +2745,9 @@ def tearDown(self):
self.remove_vntype()
for mom in self.moms_list:
mom.delete_vnode_defs()
events = '"execjob_begin,execjob_launch,execjob_attach,'
events += 'execjob_epilogue,execjob_end,exechost_startup,'
events += 'exechost_periodic,execjob_resize,execjob_abort"'
events = ['execjob_begin', 'execjob_launch', 'execjob_attach',
'execjob_epilogue', 'execjob_end', 'exechost_startup',
'exechost_periodic', 'execjob_resize', 'execjob_abort']
# Disable the cgroups hook
conf = {'enabled': 'False', 'freq': 30, 'event': events}
self.server.manager(MGR_CMD_SET, HOOK, conf, self.hook_name)
Expand Down
2 changes: 1 addition & 1 deletion test/tests/functional/pbs_equiv_classes.py
Expand Up @@ -1290,7 +1290,7 @@ def test_mom_hook(self):

# Create vnodes
a = {'resources_available.ncpus': 4,
'resources_available.foo_str': "foo,bar,buba"}
'resources_available.foo_str': "foo,bar,bubba"}
self.server.create_vnodes('vnode', a, 4, self.mom)

# Add resources to sched_config
Expand Down
6 changes: 3 additions & 3 deletions test/tests/functional/pbs_fairshare.py
Expand Up @@ -73,7 +73,7 @@ def test_formula_keyword(self):
self.server.manager(MGR_CMD_SET, SERVER,
{'job_sort_formula': 'fairshare_perc'})

formula = '"pow(2,-(fairshare_tree_usage/fairshare_perc))"'
formula = 'pow(2,-(fairshare_tree_usage/fairshare_perc))'
self.server.manager(MGR_CMD_SET, SERVER, {'job_sort_formula': formula})

formula = 'fairshare_factor'
Expand Down Expand Up @@ -151,7 +151,7 @@ def test_fairshare_formula3(self):
self.set_up_resource_group()
self.scheduler.set_sched_config({'log_filter': 2048})

formula = '"pow(2,-(fairshare_tree_usage/fairshare_perc))"'
formula = 'pow(2,-(fairshare_tree_usage/fairshare_perc))'

self.server.manager(MGR_CMD_SET, SERVER, {'scheduling': 'False'})
self.server.manager(MGR_CMD_SET, SERVER, {'job_sort_formula': formula})
Expand Down Expand Up @@ -263,7 +263,7 @@ def test_fairshare_formula6(self):
self.set_up_resource_group()
self.scheduler.set_sched_config({'log_filter': 2048})

formula = '\"fairshare_factor + (walltime/ncpus)\"'
formula = 'fairshare_factor + (walltime/ncpus)'

self.server.manager(MGR_CMD_SET, SERVER, {'scheduling': 'False'})
self.server.manager(MGR_CMD_SET, SERVER, {'job_sort_formula': formula})
Expand Down
2 changes: 1 addition & 1 deletion test/tests/functional/pbs_hookswig.py
Expand Up @@ -60,7 +60,7 @@ def test_hook(self):
jid = "newjob"
pbs.logjobmsg(jid, "server is %s" % (s.name,))
"""
a = {'event': 'queuejob,execjob_begin', 'enabled': 'True'}
a = {'event': ['queuejob', 'execjob_begin'], 'enabled': 'True'}
self.server.create_import_hook(hook_name, a, hook_body)

j = Job(TEST_USER)
Expand Down
6 changes: 4 additions & 2 deletions test/tests/functional/pbs_python_restart_settings.py
Expand Up @@ -256,8 +256,10 @@ def test_max_hooks(self):
vn = pbs.server().vnode(localnode)
pbs.event().accept()
"""
a = {'event': "queuejob,movejob,modifyjob,runjob", 'enabled': "True"}
a = {'event': ["queuejob", "movejob", "modifyjob", "runjob"],
'enabled': "True"}
self.server.create_import_hook("test", a, hook_body, overwrite=True)
return
# Create workq2
a = {'queue_type': 'e', 'started': 't', 'enabled': 't'}
self.server.manager(MGR_CMD_CREATE, QUEUE, a, "workq2")
Expand Down Expand Up @@ -337,7 +339,7 @@ def test_max_objects(self):
import pbs
pbs.event().accept()
"""
a = {'event': "queuejob,modifyjob", 'enabled': 'True'}
a = {'event': ["queuejob", "modifyjob"], 'enabled': 'True'}
self.server.create_import_hook("test", a, hook_body, overwrite=True)
# Set max_objects and min_interval so that further changes
# will generate a log message.
Expand Down
Expand Up @@ -42,6 +42,7 @@ class TestSchedPreemptEnforceResumption(TestFunctional):
"""
Test sched_preempt_enforce_resumption working
"""

def setUp(self):
TestFunctional.setUp(self)

Expand Down
8 changes: 4 additions & 4 deletions test/tests/functional/pbs_server_periodic_hook.py
Expand Up @@ -259,7 +259,7 @@ def test_sp_with_queuejob(self):
This test case checks that periodic and queuejob
event can be set for the same hook
"""
events = "periodic,queuejob"
events = ["periodic", "queuejob"]
hook_name = "TestHook"
hook_attrib = {'event': events, 'freq': 100}
scr = self.create_hook(True, 10)
Expand Down Expand Up @@ -335,7 +335,7 @@ def test_with_other_hooks(self):
self.server.manager(MGR_CMD_SET, HOOK, attrs, hook_name)
expected_msg = "periodic hook started at "
self.server.log_match(expected_msg, starttime=start_time,
interval=(freq+1))
interval=(freq + 1))
self.check_next_occurances(count=1, freq=freq, hook_run_time=25,
check_for_hook_end=False)
hook_name = "exechost_periodic_hook3"
Expand All @@ -347,10 +347,10 @@ def test_with_other_hooks(self):
self.server.create_import_hook(hook_name, attrs, scr)
start_time = int(time.time())
expected_msg = "periodic hook started at "
self.mom.log_match(expected_msg, interval=(freq+1),
self.mom.log_match(expected_msg, interval=(freq + 1),
starttime=start_time)
expected_msg = "periodic hook ended at "
self.mom.log_match(expected_msg, interval=(hook_run_time+1),
self.mom.log_match(expected_msg, interval=(hook_run_time + 1),
starttime=start_time)

def test_other_pbs_operations_work(self):
Expand Down
2 changes: 1 addition & 1 deletion test/tests/functional/pbs_soft_walltime.py
Expand Up @@ -680,7 +680,7 @@ def test_preempt_order(self):
to calculate percent done and also if the soft_walltime is exceeded,
the percent done should remain at 100%
"""
self.server.manager(MGR_CMD_SET, SCHED, {'preempt_order': '"R 10 S"'},
self.server.manager(MGR_CMD_SET, SCHED, {'preempt_order': 'R 10 '},
runas=ROOT_USER)
a = {'resources_available.ncpus': 2}
self.server.manager(MGR_CMD_SET, NODE, a, id=self.mom.shortname)
Expand Down

0 comments on commit e433c5b

Please sign in to comment.