2013-11-27 11:19:24 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
2014-11-26 17:39:49 +00:00
|
|
|
# Import python libs
|
2014-11-21 19:05:13 +00:00
|
|
|
from __future__ import absolute_import
|
2014-11-26 17:39:49 +00:00
|
|
|
import os
|
|
|
|
|
2013-06-27 10:45:40 +00:00
|
|
|
# Import Salt Testing libs
|
2017-04-03 16:04:09 +00:00
|
|
|
from tests.support.case import ModuleCase
|
2012-05-05 14:09:23 +00:00
|
|
|
|
2012-04-04 03:57:41 +00:00
|
|
|
# Import salt libs
|
2014-11-26 17:39:49 +00:00
|
|
|
import salt.utils
|
2012-05-05 14:09:23 +00:00
|
|
|
|
2012-04-04 03:57:41 +00:00
|
|
|
|
2017-04-03 16:04:09 +00:00
|
|
|
class StdTest(ModuleCase):
|
2012-04-04 03:57:41 +00:00
|
|
|
'''
|
|
|
|
Test standard client calls
|
|
|
|
'''
|
2012-05-05 14:09:23 +00:00
|
|
|
|
2012-04-04 03:57:41 +00:00
|
|
|
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'])
|
|
|
|
|
2014-09-29 23:37:53 +00:00
|
|
|
# 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
|
|
|
|
|
2014-10-28 15:12:10 +00:00
|
|
|
# ping a minion that doesn't exist, to make sure that it doesn't hang forever
|
2016-06-16 20:07:05 +00:00
|
|
|
# create fake minion
|
2014-09-30 17:11:55 +00:00
|
|
|
key_file = os.path.join(self.master_opts['pki_dir'], 'minions', 'footest')
|
|
|
|
# touch the file
|
2016-08-11 16:45:24 +00:00
|
|
|
with salt.utils.fopen(key_file, 'a'):
|
|
|
|
pass
|
2014-09-30 17:11:55 +00:00
|
|
|
# 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)
|
|
|
|
|
2012-04-04 03:57:41 +00:00
|
|
|
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'])
|
|
|
|
|
2016-11-11 01:20:51 +00:00
|
|
|
def test_batch(self):
|
|
|
|
'''
|
|
|
|
test cmd_batch
|
|
|
|
'''
|
|
|
|
cmd_batch = self.client.cmd_batch(
|
|
|
|
'minion',
|
|
|
|
'test.ping',
|
|
|
|
)
|
|
|
|
for ret in cmd_batch:
|
|
|
|
self.assertTrue(ret['minion'])
|
|
|
|
|
|
|
|
def test_batch_raw(self):
|
|
|
|
'''
|
|
|
|
test cmd_batch with raw option
|
|
|
|
'''
|
|
|
|
cmd_batch = self.client.cmd_batch(
|
|
|
|
'minion',
|
|
|
|
'test.ping',
|
|
|
|
raw=True,
|
|
|
|
)
|
|
|
|
for ret in cmd_batch:
|
|
|
|
self.assertTrue(ret['data']['success'])
|
|
|
|
|
2012-04-04 03:57:41 +00:00
|
|
|
def test_full_returns(self):
|
|
|
|
'''
|
|
|
|
test cmd_iter
|
|
|
|
'''
|
|
|
|
ret = self.client.cmd_full_return(
|
|
|
|
'minion',
|
|
|
|
'test.ping',
|
|
|
|
)
|
2013-06-06 00:07:18 +00:00
|
|
|
self.assertIn('minion', ret)
|
2014-03-24 17:05:53 +00:00
|
|
|
self.assertEqual({'ret': True, 'success': True}, ret['minion'])
|
2013-06-24 22:53:59 +00:00
|
|
|
|
2016-06-16 20:07:05 +00:00
|
|
|
def test_disconnected_return(self):
|
|
|
|
'''
|
|
|
|
Test return/messaging on a disconnected minion
|
|
|
|
'''
|
2016-07-27 17:05:31 +00:00
|
|
|
test_ret = {'ret': 'Minion did not return. [No response]', 'out': 'no_return'}
|
2016-06-16 20:07:05 +00:00
|
|
|
|
|
|
|
# Create a minion key, but do not start the "fake" minion. This mimics
|
|
|
|
# a disconnected minion.
|
|
|
|
key_file = os.path.join(self.master_opts['pki_dir'], 'minions', 'disconnected')
|
2016-08-11 16:45:24 +00:00
|
|
|
with salt.utils.fopen(key_file, 'a'):
|
|
|
|
pass
|
2016-06-16 20:07:05 +00:00
|
|
|
|
|
|
|
# ping disconnected minion and ensure it times out and returns with correct message
|
|
|
|
try:
|
|
|
|
cmd_iter = self.client.cmd_cli(
|
|
|
|
'disconnected',
|
|
|
|
'test.ping',
|
|
|
|
show_timeout=True
|
|
|
|
)
|
|
|
|
num_ret = 0
|
|
|
|
for ret in cmd_iter:
|
|
|
|
num_ret += 1
|
|
|
|
self.assertEqual(ret['disconnected']['ret'], test_ret['ret'])
|
|
|
|
self.assertEqual(ret['disconnected']['out'], test_ret['out'])
|
|
|
|
|
|
|
|
# Ensure that we entered the loop above
|
|
|
|
self.assertEqual(num_ret, 1)
|
|
|
|
|
|
|
|
finally:
|
|
|
|
os.unlink(key_file)
|