class NpmStateTest(ModuleCase, SaltReturnAssertsMixin): @requires_network() @destructiveTest def test_npm_installed_removed(self): ''' Basic test to determine if NPM module was successfully installed and removed. ''' ret = self.run_state('npm.installed', name='[email protected]', registry="http://registry.npmjs.org/") self.assertSaltTrueReturn(ret) ret = self.run_state('npm.removed', name='pm2') self.assertSaltTrueReturn(ret) @requires_network() @destructiveTest def test_npm_install_url_referenced_package(self): ''' Determine if URL-referenced NPM module can be successfully installed. ''' if LooseVersion(cmd.run('npm -v')) >= LooseVersion(MAX_NPM_VERSION): user = os.environ.get('SUDO_USER', 'root') npm_dir = os.path.join(RUNTIME_VARS.TMP, 'git-install-npm') self.run_state('file.directory', name=npm_dir, user=user, dir_mode='755') else: user = None npm_dir = None ret = self.run_state('npm.installed', name='request/request#v2.81.1', runas=user, dir=npm_dir, registry="http://registry.npmjs.org/") self.assertSaltTrueReturn(ret) ret = self.run_state('npm.removed', name='git://github.com/request/request', runas=user, dir=npm_dir) self.assertSaltTrueReturn(ret) if npm_dir is not None: self.run_state('file.absent', name=npm_dir) @requires_network() @destructiveTest def test_npm_installed_pkgs(self): ''' Basic test to determine if NPM module successfully installs multiple packages. ''' ret = self.run_state('npm.installed', name='unused', pkgs=['[email protected]', '[email protected]'], registry="http://registry.npmjs.org/") self.assertSaltTrueReturn(ret) @skipIf(salt.utils.path.which('npm') and LooseVersion(cmd.run('npm -v')) >= LooseVersion(MAX_NPM_VERSION), 'Skip with npm >= 5.0.0 until #41770 is fixed') @destructiveTest def test_npm_cache_clean(self): ''' Basic test to determine if NPM successfully cleans its cached packages. ''' ret = self.run_state('npm.cache_cleaned', name='unused', force=True) self.assertSaltTrueReturn(ret)
def test_run_no_vt_os_error(self): """ Tests error raised when not useing vt and OSError is provided """ expected_error = "expect error" with patch("salt.modules.cmdmod._is_valid_shell", MagicMock(return_value=True)): with patch("salt.utils.platform.is_windows", MagicMock(return_value=False)): with patch("os.path.isfile", MagicMock(return_value=True)): with patch("os.access", MagicMock(return_value=True)): with patch( "salt.utils.timed_subprocess.TimedProc", MagicMock(side_effect=OSError(expected_error)), ): with self.assertRaises(CommandExecutionError) as error: cmdmod.run("foo", cwd="/") assert error.exception.args[0].endswith( expected_error ), repr(error.exception.args[0])
def enable_console_out(enable=True): ''' .. note:: Enable or disable ConsoleOut :param enable: If true enable ConsoleOut else disable ConsoleOut. Default is True. CLI Example: .. code-block:: bash salt '*' startup.enable_console_out ''' cmd.run('{0} --set section=systemsettings,token={1},value={2}'.format( NIRTCFG_PATH, 'ConsoleOut.enabled', enable)) cmd.run('{0} consoleoutenable={1}'.format(FWSETENV_PATH, enable)) system_settings = _nisysmgmt_grains.get_last_known_startup_settings( __grains__) system_settings['ConsoleOut'] = str(enable) __salt__['event.fire']({'force_refresh': True}, 'grains_refresh') return True
def test_run_no_vt_io_error(self): ''' Tests error raised when not useing vt and IOError is provided ''' expected_error = "expect error" with patch('salt.modules.cmdmod._is_valid_shell', MagicMock(return_value=True)): with patch('salt.utils.platform.is_windows', MagicMock(return_value=False)): with patch('os.path.isfile', MagicMock(return_value=True)): with patch('os.access', MagicMock(return_value=True)): with patch( 'salt.utils.timed_subprocess.TimedProc', MagicMock( side_effect=IOError(expected_error))): with self.assertRaises( CommandExecutionError) as error: cmdmod.run('foo') assert error.exception.args[0].endswith( expected_error), repr(error.exception.args[0])
def __virtual__(): ''' Only load the module if iptables is installed ''' global HAS_CHECK if '--check' in salt_cmd.run('iptables --help', output_loglevel='quiet'): HAS_CHECK = True if salt.utils.which('iptables'): return True return False
class NpmStateTest(ModuleCase, SaltReturnAssertsMixin): @requires_network() @destructiveTest def test_npm_installed_removed(self): ''' Basic test to determine if NPM module was successfully installed and removed. ''' ret = self.run_state('npm.installed', name='pm2') self.assertSaltTrueReturn(ret) ret = self.run_state('npm.removed', name='pm2') self.assertSaltTrueReturn(ret) @requires_network() @destructiveTest def test_npm_install_url_referenced_package(self): ''' Determine if URL-referenced NPM module can be successfully installed. ''' ret = self.run_state('npm.installed', name='request/request#v2.81.1') self.assertSaltTrueReturn(ret) ret = self.run_state('npm.removed', name='git://github.com/request/request') self.assertSaltTrueReturn(ret) @requires_network() @destructiveTest def test_npm_installed_pkgs(self): ''' Basic test to determine if NPM module successfully installs multiple packages. ''' ret = self.run_state('npm.installed', name='unused', pkgs=['pm2', 'grunt']) self.assertSaltTrueReturn(ret) @skipIf( salt.utils.path.which('npm') and LooseVersion(cmd.run('npm -v')) >= LooseVersion(MAX_NPM_VERSION), 'Skip with npm >= 5.0.0 until #41770 is fixed') @destructiveTest def test_npm_cache_clean(self): ''' Basic test to determine if NPM successfully cleans its cached packages. ''' ret = self.run_state('npm.cache_cleaned', name='unused', force=True) self.assertSaltTrueReturn(ret)
def check(table='filter', chain=None, rule=None, family='ipv4'): ''' Check for the existence of a rule in the table and chain This function accepts a rule in a standard iptables command format, starting with the chain. Trying to force users to adapt to a new method of creating rules would be irritating at best, and we already have a parser that can handle it. CLI Example: .. code-block:: bash salt '*' iptables.check filter INPUT \\ rule='-m state --state RELATED,ESTABLISHED -j ACCEPT' IPv6: salt '*' iptables.check filter INPUT \\ rule='-m state --state RELATED,ESTABLISHED -j ACCEPT' \\ family=ipv6 ''' if not chain: return 'Error: Chain needs to be specified' if not rule: return 'Error: Rule needs to be specified' HAS_CHECK = False if '--check' in salt_cmd.run('iptables --help', output_loglevel='quiet'): HAS_CHECK = True if HAS_CHECK is False: cmd = '{0}-save' . format(_iptables_cmd(family)) out = __salt__['cmd.run'](cmd).find('-A {1} {2}'.format( table, chain, rule, )) if out != -1: out = '' else: return False else: cmd = '{0} -t {1} -C {2} {3}'.format(_iptables_cmd(family), table, chain, rule) out = __salt__['cmd.run'](cmd) if not out: return True return out
def _mock_ssh_keyscan(*args, **kwargs): if 'ssh-keyscan' in args[0]: if '-H' in args[0]: return dedent(''' # home.waynewerner.com:55555 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u3 |1|0yq63FhgFbcGawJwr7XyBPEL2Fs=|HkqTDf6bE0p2CMLHyCY7fdH5Uo0= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCY7tcbLrsTFPb2je3VFiH9cC9+ac04H0X8BQG7croyqvdUY5zTLmIidXJe6R1zUS7Jqpy/pXwHSB5HWpsMu+ytovPZ/LKl6AiYlcdcpS//QASb7TbcDzHFIlcdCoL5C5TOHXdRKrgIa64akuPMxvXxbgXAHjud+2jK1FhGTBbTkbrWA4xhDukWkswLpCRyHhsNzJd/seP651UDd/3rkrbgFSN9o/4LXZtsEfV3xRfJOaZq5/SW+sDVNlArFgg9EXXOzrKKWkSjS9BnN0hBaK3IyJfUAwppLYHgF0LvcNl4jF38EAU00pkNX5mknGbAFF7OMkcQI9/vkl+jaajv8Q3 # home.waynewerner.com:55555 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u3 |1|F1wCSzHHJMMPw/DAuRJGMKeTwFk=|GKQ9FyLzHqe0n+WaWKWHzzmS5/c= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIOEPebJNvI/rqc0ttSuow97J6i8k3YLRF69v1GhF1+gCvM9NW1UQs1gzwB/cLPds9PuwCgyKzUxVqpP7ua41WU= # home.waynewerner.com:55555 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u3 |1|SZAE/yAB5UH3OOJvkU6ks1yfHO8=|lay+ajhv8yXZ9kke2j86F7RJunw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBGI17y+DW7z4q4r13Ewd/WnrorEwQWqaE2unjU1TS7G ''').lstrip() else: return dedent(''' [example.com]:12345 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCY7tcbLrsTFPb2je3VFiH9cC9+ac04H0X8BQG7croyqvdUY5zTLmIidXJe6R1zUS7Jqpy/pXwHSB5HWpsMu+ytovPZ/LKl6AiYlcdcpS//QASb7TbcDzHFIlcdCoL5C5TOHXdRKrgIa64akuPMxvXxbgXAHjud+2jK1FhGTBbTkbrWA4xhDukWkswLpCRyHhsNzJd/seP651UDd/3rkrbgFSN9o/4LXZtsEfV3xRfJOaZq5/SW+sDVNlArFgg9EXXOzrKKWkSjS9BnN0hBaK3IyJfUAwppLYHgF0LvcNl4jF38EAU00pkNX5mknGbAFF7OMkcQI9/vkl+jaajv8Q3 [example.com]:12345 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIOEPebJNvI/rqc0ttSuow97J6i8k3YLRF69v1GhF1+gCvM9NW1UQs1gzwB/cLPds9PuwCgyKzUxVqpP7ua41WU= [example.com]:12345 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBGI17y+DW7z4q4r13Ewd/WnrorEwQWqaE2unjU1TS7G ''').lstrip() else: return cmd.run(*args, **kwargs)
def test_npm_install_url_referenced_package(self): ''' Determine if URL-referenced NPM module can be successfully installed. ''' if LooseVersion(cmd.run('npm -v')) >= LooseVersion(MAX_NPM_VERSION): user = os.environ.get('SUDO_USER', 'root') npm_dir = os.path.join(RUNTIME_VARS.TMP, 'git-install-npm') self.run_state('file.directory', name=npm_dir, user=user, dir_mode='755') else: user = None npm_dir = None ret = self.run_state('npm.installed', name='request/request#v2.81.1', runas=user, dir=npm_dir, registry="http://registry.npmjs.org/") self.assertSaltTrueReturn(ret) ret = self.run_state('npm.removed', name='git://github.com/request/request', runas=user, dir=npm_dir) self.assertSaltTrueReturn(ret) if npm_dir is not None: self.run_state('file.absent', name=npm_dir)