Internal
Public Access
Adds two kinds of coverage, continuing #1's remaining scope: 1. Pure-function tests for mapSshError() and escapeForShellSingleQuotes(), promoted from private members to public statics purely so tests can call them without spinning up a process. escapeForShellSingleQuotes() is the actual security boundary for password auth (it's what stops a password containing a single quote from breaking out of the askpass script's quoting), so it gets a real adversarial test, not just a happy-path one. 2. State-machine tests (connect -> Connected, auth failure -> Failed with the right mapped message, connection refused -> Failed, input round-tripping, reconnect) driven against tests/fixtures/fake_ssh.sh, a small controllable stand-in for the real ssh binary, instead of a real network/SSH server. This needed one small testability seam: a new constructor overload that overrides the launched program ("ssh" in production, the fixture script in tests). POSIX-only for now: the fixture is a shell script, so the state-machine tests QSKIP on Windows until an equivalent fixture exists there; the pure-function tests run everywhere. RdpSessionBackend coverage is still open -- it's a bigger lift again (FreeRDP's own event loop, not just a QProcess), left for a follow-up. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
30 lines
1.0 KiB
Bash
Executable File
30 lines
1.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# Minimal, deterministic stand-in for the real `ssh` binary, used by
|
|
# SshSessionBackend's state-machine tests so they never touch a real
|
|
# network or SSH server. Behavior is selected by which fixture hostname
|
|
# appears among argv (SshSessionBackend always passes the profile's
|
|
# host, optionally as user@host, as the final argument).
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
*@succeed|succeed)
|
|
echo "Welcome to the fake host."
|
|
# Stay alive echoing stdin back (simulates an interactive
|
|
# session) until the backend terminates us.
|
|
while IFS= read -r line; do
|
|
echo "$line"
|
|
done
|
|
exit 0
|
|
;;
|
|
*@fail-auth|fail-auth)
|
|
echo "Permission denied (publickey,password)." >&2
|
|
exit 255
|
|
;;
|
|
*@refuse|refuse)
|
|
echo "ssh: connect to host refuse port 22: Connection refused" >&2
|
|
exit 255
|
|
;;
|
|
esac
|
|
done
|
|
echo "fake_ssh.sh: no recognized fixture host in arguments: $*" >&2
|
|
exit 1
|