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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
from itertools import chain
import pytest
from conftest import assert_bash_exec
LIVE_HOST = "bash_completion"
class TestScp:
@pytest.mark.complete("scp -F config ", cwd="scp")
def test_basic(self, hosts, completion):
expected = sorted(
chain(
(
"%s:" % x
for x in chain(
hosts,
# From fixtures/scp/config
"gee hut".split(),
# From fixtures/scp/known_hosts
"blah doo ike".split(),
)
),
# Local filenames
["config", "known_hosts", r"spaced\ \ conf"],
)
)
assert completion == expected
@pytest.mark.complete("scp -F 'spaced conf' ", cwd="scp")
def test_basic_spaced_conf(self, hosts, completion):
expected = sorted(
chain(
(
"%s:" % x
for x in chain(
hosts,
# From "fixtures/scp/spaced conf"
"gee jar".split(),
# From fixtures/scp/known_hosts
"blah doo ike".split(),
)
),
# Local filenames
["config", "known_hosts", r"spaced\ \ conf"],
)
)
assert completion == expected
@pytest.mark.complete("scp -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.fixture(scope="class")
def live_pwd(self, bash):
try:
return assert_bash_exec(
bash,
"ssh -o 'Batchmode yes' -o 'ConnectTimeout 1' "
"%s pwd 2>/dev/null" % LIVE_HOST,
want_output=True,
).strip()
except AssertionError:
pytest.skip("Live host %s not available" % LIVE_HOST)
@pytest.mark.complete("scp %s:" % LIVE_HOST, sleep_after_tab=2)
def test_live(self, live_pwd, completion):
"""
To support this test, configure a HostName entry for LIVE_HOST
in ssh's configs, e.g. ~/.ssh/config or /etc/ssh/ssh_config.
Connection to it must open sufficiently quickly for the
ConnectTimeout and sleep_after_tab settings.
"""
assert completion == "%s:%s/" % (LIVE_HOST, live_pwd)
|