1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
import pytest
from conftest import assert_complete, partialize
class TestSsh:
@pytest.mark.complete("ssh -Fsp", cwd="ssh")
def test_1(self, completion):
assert completion == r"aced\ \ conf"
@pytest.mark.complete("ssh -F config ls", cwd="ssh")
def test_2(self, completion):
"""Should complete both commands and hostname."""
assert all(x in completion for x in "ls ls_known_host".split())
@pytest.mark.complete("ssh bash", cwd="ssh")
def test_3(self, completion):
"""
First arg should not complete with commands.
Assumes there's no "bash" known host.
"""
assert "bash" not in completion
@pytest.mark.complete("ssh -vo AddressFamily=")
def test_4(self, completion):
assert completion
@pytest.mark.xfail # TODO our test facilities don't support case change?
@pytest.mark.complete("ssh -vo userknownhostsf")
def test_5(self, completion):
assert "UserKnownHostsFile=" in completion
@pytest.mark.complete("ssh -", require_cmd=True)
def test_6(self, completion):
assert completion
@pytest.mark.complete("ssh -F")
def test_capital_f_without_space(self, completion):
assert completion
assert not any(
"option requires an argument -- F" in x for x in completion
)
@pytest.mark.complete("ssh -F nonexistent ")
def test_capital_f_nonexistent(self, completion):
assert completion
def test_partial_hostname(self, bash, known_hosts):
first_char, partial_hosts = partialize(bash, known_hosts)
completion = assert_complete(bash, "ssh %s" % first_char)
if len(completion) == 1:
assert completion == partial_hosts[0][1:]
else:
assert completion == sorted(x for x in partial_hosts)
@pytest.mark.parametrize("protocol", "4 6 9".split())
def test_protocol_option_bundling(self, bash, protocol):
completion = assert_complete(bash, "ssh -%sF ssh/" % protocol)
assert "config" in completion
|