# encoding: utf-8 # Import Python libs from __future__ import absolute_import import os import time # Import Salt Testing libs from tests.support.paths import TMP_CONF_DIR from tests.support.unit import TestCase, skipIf # Import Salt libs import salt.config import salt.netapi class NetapiClientTest(TestCase): eauth_creds = { 'username': 'saltdev_auto', 'password': 'saltdev', 'eauth': 'auto', } def setUp(self): ''' Set up a NetapiClient instance ''' opts = salt.config.client_config(os.path.join(TMP_CONF_DIR, 'master')) self.netapi = salt.netapi.NetapiClient(opts) def tearDown(self): del self.netapi def test_local(self): low = {'client': 'local', 'tgt': '*', 'fun': 'test.ping'} low.update(self.eauth_creds) ret = self.netapi.run(low) self.assertEqual(ret, {'minion': True, 'sub_minion': True}) def test_local_async(self): low = {'client': 'local_async', 'tgt': '*', 'fun': 'test.ping'} low.update(self.eauth_creds) ret = self.netapi.run(low) # Remove all the volatile values before doing the compare. self.assertIn('jid', ret) ret.pop('jid', None) ret['minions'] = sorted(ret['minions']) self.assertEqual(ret, {'minions': sorted(['minion', 'sub_minion'])}) def test_wheel(self): low = {'client': 'wheel', 'fun': 'key.list_all'} low.update(self.eauth_creds) ret = self.netapi.run(low) # Remove all the volatile values before doing the compare. self.assertIn('tag', ret) ret.pop('tag') data = ret.get('data', {}) self.assertIn('jid', data) data.pop('jid', None) self.assertIn('tag', data) data.pop('tag', None) ret.pop('_stamp', None) data.pop('_stamp', None) self.maxDiff = None self.assertTrue(set(['master.pem', 'master.pub']).issubset(set(ret['data']['return']['local']))) def test_wheel_async(self): # Give this test a little breathing room time.sleep(3) low = {'client': 'wheel_async', 'fun': 'key.list_all'} low.update(self.eauth_creds) ret = self.netapi.run(low) self.assertIn('jid', ret) self.assertIn('tag', ret) @skipIf(True, 'This is not testing anything. Skipping for now.') def test_runner(self): # TODO: fix race condition in init of event-- right now the event class # will finish init even if the underlying zmq socket hasn't connected yet # this is problematic for the runnerclient's master_call method if the # runner is quick #low = {'client': 'runner', 'fun': 'cache.grains'} low = {'client': 'runner', 'fun': 'test.sleep', 'arg': [2]} low.update(self.eauth_creds) ret = self.netapi.run(low) @skipIf(True, 'This is not testing anything. Skipping for now.') def test_runner_async(self): low = {'client': 'runner', 'fun': 'cache.grains'} low.update(self.eauth_creds) ret = self.netapi.run(low)