mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
d9fdc06742
Instead of checking if all returns are in, we should check that the job is not running anywhere then enforce the per-minion timeout. I've added a test case for the instance where there is a job fired to a minion that will never return (before it would stall forever)
118 lines
3.1 KiB
Python
118 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Import Salt Testing libs
|
|
from salttesting.helpers import ensure_in_syspath
|
|
ensure_in_syspath('../../')
|
|
|
|
# Import salt libs
|
|
import integration
|
|
import os
|
|
|
|
|
|
class StdTest(integration.ModuleCase):
|
|
'''
|
|
Test standard client calls
|
|
'''
|
|
|
|
def test_cli(self):
|
|
'''
|
|
Test cli function
|
|
'''
|
|
cmd_iter = self.client.cmd_cli(
|
|
'minion',
|
|
'test.ping',
|
|
)
|
|
for ret in cmd_iter:
|
|
self.assertTrue(ret['minion'])
|
|
|
|
# make sure that the iter waits for long running jobs too
|
|
cmd_iter = self.client.cmd_cli(
|
|
'minion',
|
|
'test.sleep',
|
|
[6]
|
|
)
|
|
num_ret = 0
|
|
for ret in cmd_iter:
|
|
num_ret += 1
|
|
self.assertTrue(ret['minion'])
|
|
assert num_ret > 0
|
|
|
|
# ping a minion that doesnt exist, to make sure that it doesnt hang forever
|
|
# create fake mininion
|
|
key_file = os.path.join(self.master_opts['pki_dir'], 'minions', 'footest')
|
|
# touch the file
|
|
open(key_file, 'a').close()
|
|
# ping that minion and ensure it times out
|
|
try:
|
|
cmd_iter = self.client.cmd_cli(
|
|
'footest',
|
|
'test.ping',
|
|
)
|
|
num_ret = 0
|
|
for ret in cmd_iter:
|
|
num_ret += 1
|
|
self.assertTrue(ret['minion'])
|
|
assert num_ret == 0
|
|
finally:
|
|
os.unlink(key_file)
|
|
|
|
def test_iter(self):
|
|
'''
|
|
test cmd_iter
|
|
'''
|
|
cmd_iter = self.client.cmd_iter(
|
|
'minion',
|
|
'test.ping',
|
|
)
|
|
for ret in cmd_iter:
|
|
self.assertTrue(ret['minion'])
|
|
|
|
def test_iter_no_block(self):
|
|
'''
|
|
test cmd_iter_no_block
|
|
'''
|
|
cmd_iter = self.client.cmd_iter_no_block(
|
|
'minion',
|
|
'test.ping',
|
|
)
|
|
for ret in cmd_iter:
|
|
if ret is None:
|
|
continue
|
|
self.assertTrue(ret['minion'])
|
|
|
|
def test_full_returns(self):
|
|
'''
|
|
test cmd_iter
|
|
'''
|
|
ret = self.client.cmd_full_return(
|
|
'minion',
|
|
'test.ping',
|
|
)
|
|
self.assertIn('minion', ret)
|
|
self.assertEqual({'ret': True, 'success': True}, ret['minion'])
|
|
|
|
ret = self.client.cmd_full_return(
|
|
'minion',
|
|
'test.pong',
|
|
)
|
|
self.assertIn('minion', ret)
|
|
|
|
if self.master_opts['transport'] == 'zeromq':
|
|
self.assertEqual(
|
|
{
|
|
'out': 'nested',
|
|
'ret': '\'test.pong\' is not available.',
|
|
'success': False
|
|
},
|
|
ret['minion']
|
|
)
|
|
elif self.master_opts['transport'] == 'raet':
|
|
self.assertEqual(
|
|
{'success': False, 'ret': '\'test.pong\' is not available.'},
|
|
ret['minion']
|
|
)
|
|
|
|
if __name__ == '__main__':
|
|
from integration import run_tests
|
|
run_tests(StdTest)
|