Merge pull request #125372 from Synthetica9/shell_interact

nixos/tests/test-driver: add shell_interact
This commit is contained in:
Domen Kožar 2021-06-03 11:46:01 +02:00 committed by GitHub
commit f88be6e55c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 0 deletions

View File

@ -436,6 +436,18 @@ machine.systemctl("list-jobs --no-pager", "any-user") # spawns a shell for `any-
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>shell_interact</methodname>
</term>
<listitem>
<para>
Allows you to directly interact with the guest shell.
This should only be used during test development, not in production tests.
Killing the interactive session with <literal>Ctrl-d</literal> or <literal>Ctrl-c</literal> also ends the guest session.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>

View File

@ -21,6 +21,7 @@ import shutil
import socket
import subprocess
import sys
import telnetlib
import tempfile
import time
import traceback
@ -455,6 +456,16 @@ class Machine:
return (status_code, output)
output += chunk
def shell_interact(self) -> None:
"""Allows you to interact with the guest shell
Should only be used during test development, not in the production test."""
self.connect()
self.log("Terminal is ready (there is no prompt):")
telnet = telnetlib.Telnet()
telnet.sock = self.shell # type: ignore
telnet.interact()
def succeed(self, *commands: str) -> str:
"""Execute each command and check that it succeeds."""
output = ""