salt/tests/integration/client/standard.py
Thomas Jackson d9fdc06742 Ensure that timeout will happen for jobs that don't target any alive minions
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)
2014-09-30 10:11:55 -07:00

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)