def test_parse_args_help(capsys): """Calling cumin with -h/--help should return its help message.""" with pytest.raises(SystemExit) as e: cli.parse_args(['-h']) out, _ = capsys.readouterr() assert e.value.code == 0 assert 'Cumin CLI - Automation and orchestration framework written in Python' in out
def test_run(stderr, transport): """Calling run() should query the hosts and execute the commands on the transport.""" args = cli.parse_args(['--force', 'D{host1}', 'command1']) config = {'backend': 'direct', 'transport': 'clustershell'} cli.run(args, config) assert transport.new.call_args[0][0] is config assert isinstance(transport.new.call_args[0][1], transports.Target) assert stderr.called
def test_get_hosts_no_tty_force(isatty, stderr): """Calling get_hosts() with or without a TTY with --force should return the list of hosts.""" args = cli.parse_args(['--force', 'D{host1}', 'command1']) config = {'backend': 'direct'} assert cli.get_hosts(args, config) == nodeset('host1') isatty.return_value = True assert cli.get_hosts(args, config) == nodeset('host1') assert stderr.called
def test_get_hosts_no_tty_dry_run(isatty, stderr): """Calling get_hosts() with or without a TTY with --dry-run should return an empty list.""" args = cli.parse_args(['--dry-run', 'D{host1}', 'command1']) config = {'backend': 'direct'} assert cli.get_hosts(args, config) == [] isatty.return_value = True assert cli.get_hosts(args, config) == [] assert stderr.called
def test_get_hosts_no_tty_ko(isatty, stderr): """Calling get_hosts() without a TTY should raise CuminError if --dry-run or --force are not specified.""" args = cli.parse_args(['D{host1}', 'command1']) config = {'backend': 'direct'} isatty.return_value = False with pytest.raises( CuminError, match= 'Not in a TTY but neither DRY-RUN nor FORCE mode were specified'): cli.get_hosts(args, config) assert stderr.called
def test_get_hosts_ok(isatty, mocked_input, stderr): """Calling get_hosts() should query the backend and return the list of hosts.""" args = cli.parse_args(['D{host1}', 'command1']) config = {'backend': 'direct'} isatty.return_value = True mocked_input.return_value = 'y' assert cli.get_hosts(args, config) == nodeset('host1') mocked_input.return_value = 'n' with pytest.raises(cli.KeyboardInterruptError): cli.get_hosts(args, config) mocked_input.return_value = 'invalid_answer' with pytest.raises(cli.KeyboardInterruptError): cli.get_hosts(args, config) mocked_input.return_value = '' with pytest.raises(cli.KeyboardInterruptError): cli.get_hosts(args, config) assert stderr.called
def test_parse_args_no_mode(): """If mode is not specified with multiple commands, parsing the args should raise a parser error.""" index = _ARGV.index('-m') with pytest.raises(SystemExit): cli.parse_args(_ARGV[:index] + _ARGV[index + 1:])
def test_parse_args_no_commands(): """If no commands are specified, dry-run mode should be implied.""" args = cli.parse_args(_ARGV[:-2]) _validate_parsed_args(args, no_commands=True)
def test_parse_args_ok(): """A standard set of command line parameters should be properly parsed into their respective variables.""" args = cli.parse_args(_ARGV) _validate_parsed_args(args)