From: Stefano Brivio <sbrivio@redhat.com>
To: passt-dev@passt.top
Subject: [PATCH 06/12] tests: Improve control character filtering in pane_parse
Date: Tue, 17 May 2022 14:36:08 +0200 [thread overview]
Message-ID: <20220517123614.1892316-7-sbrivio@redhat.com> (raw)
In-Reply-To: <20220517123614.1892316-1-sbrivio@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 1904 bytes --]
From: David Gibson <david(a)gibson.dropbear.id.au>
pane_parse() attempts to grab the output from the last command issued
into a tmux pane. It strips out control characters using tr, which in
particular includes the final \r\n. However, this won't fully strip
out terminal escape sequences. In particular this breaks if the shell
in the pane is bash, with enable-bracketed-paste enabled in readline.
That issues terminal sequences to enable and disable bracketed paste
mode around every shell prompt.
We can work around this because these escapes are followed by a \r
(CR). More generally, it seems reasonable to assume that any terminal
shenanigans followed by a CR, but not an LF is supposed to be hidden.
So, use sed to strip everything before the second last CR. We still
need the tr to remove the final \r\n from the string (sed processes a
line at a time, and doesn't consider the CRLF part of the buffer it's
processing).
Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au>
[sbrivio: modify regexp to keep foo\r\r\n unchanged, by matching on at
least one CR and a non-CR afterwards: that's the usual output pattern
for bash on Debian 8 and Debian 9]
Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
---
test/lib/term | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/lib/term b/test/lib/term
index 7dd9826..0093f90 100755
--- a/test/lib/term
+++ b/test/lib/term
@@ -221,7 +221,7 @@ pane_wait() {
pane_parse() {
__pane_lc="$(echo "${1}" | tr [A-Z] [a-z])"
- __buf="$(tail -n2 ${LOGDIR}/pane_${__pane_lc}.log | head -n1 | tr -d -c [:print:])"
+ __buf="$(tail -n2 ${LOGDIR}/pane_${__pane_lc}.log | head -n1 | sed 's/^[^\r]*\r\([^\r]\)/\1/' | tr -d '\r\n')"
[ "# $(eval printf '%s' \"\$${1}_LAST_CMD\")" != "${__buf}" ] && \
[ "$ $(eval printf '%s' \"\$${1}_LAST_CMD\")" != "${__buf}" ] &&
--
@@ -221,7 +221,7 @@ pane_wait() {
pane_parse() {
__pane_lc="$(echo "${1}" | tr [A-Z] [a-z])"
- __buf="$(tail -n2 ${LOGDIR}/pane_${__pane_lc}.log | head -n1 | tr -d -c [:print:])"
+ __buf="$(tail -n2 ${LOGDIR}/pane_${__pane_lc}.log | head -n1 | sed 's/^[^\r]*\r\([^\r]\)/\1/' | tr -d '\r\n')"
[ "# $(eval printf '%s' \"\$${1}_LAST_CMD\")" != "${__buf}" ] && \
[ "$ $(eval printf '%s' \"\$${1}_LAST_CMD\")" != "${__buf}" ] &&
--
2.35.1
next prev parent reply other threads:[~2022-05-17 12:36 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-17 12:36 [PATCH 00/12] Tests fixes and clean-ups Stefano Brivio
2022-05-17 12:36 ` [PATCH 01/12] tests: Update mbuto git URLs Stefano Brivio
2022-05-17 12:36 ` [PATCH 02/12] tests: Remove unused XVFB variable Stefano Brivio
2022-05-17 12:36 ` [PATCH 03/12] tests: Add some debugging output for the test scripts themselves Stefano Brivio
2022-05-17 12:36 ` [PATCH 04/12] tests: Don't use tmux update-environment Stefano Brivio
2022-05-17 12:36 ` [PATCH 05/12] tests: Don't globally set tmux default-shell Stefano Brivio
2022-05-17 12:36 ` Stefano Brivio [this message]
2022-05-17 12:36 ` [PATCH 07/12] tests: Don't ignore errors during script Stefano Brivio
2022-05-17 12:36 ` [PATCH 08/12] tests: Add pane_status command to check for success of issued commands Stefano Brivio
2022-05-17 12:36 ` [PATCH 09/12] tests: Simplify *tools commands using pane_status Stefano Brivio
2022-05-17 12:36 ` [PATCH 10/12] tests: Simplify explicit checks for command success Stefano Brivio
2022-05-17 12:36 ` [PATCH 11/12] test/perf/pasta_udp: Drop redundant assignment of ::1 to loopback interface Stefano Brivio
2022-05-17 12:36 ` [PATCH 12/12] test/run: Return 0 from run(), exit value already reflects failures Stefano Brivio
2022-05-18 3:17 ` [PATCH 00/12] Tests fixes and clean-ups David Gibson
2022-05-18 5:40 ` Stefano Brivio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220517123614.1892316-7-sbrivio@redhat.com \
--to=sbrivio@redhat.com \
--cc=passt-dev@passt.top \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).