All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
To: Andrew Jones <andrew.jones@linux.dev>,
	Thomas Huth <thuth@redhat.com>,
	Colton Lewis <coltonlewis@google.com>,
	Nikos Nikoleris <nikos.nikoleris@arm.com>,
	Ricardo Koller <ricarkol@google.com>,
	Nina Schoetterl-Glausch <nsg@linux.ibm.com>,
	Nico Boehr <nrb@linux.ibm.com>,
	Sean Christopherson <seanjc@google.com>
Cc: linux-s390@vger.kernel.org,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	David Hildenbrand <david@redhat.com>,
	kvm@vger.kernel.org, Janosch Frank <frankja@linux.ibm.com>
Subject: [kvm-unit-tests PATCH v3 09/10] scripts: Implement multiline strings for extra_params
Date: Mon, 30 Oct 2023 17:03:48 +0100	[thread overview]
Message-ID: <20231030160349.458764-10-nsg@linux.ibm.com> (raw)
In-Reply-To: <20231030160349.458764-1-nsg@linux.ibm.com>

Implement a rudimentary form only.
extra_params can get long when passing a lot of arguments to qemu.
Multiline strings help with readability of the .cfg file.
Multiline strings begin and end with """, which must occur on separate
lines.

For example:
extra_params = """-cpu max,ctop=on -smp cpus=1,cores=16,maxcpus=128 \
-append '-drawers 2 -books 2 -sockets 2 -cores 16' \
-device max-s390x-cpu,core-id=31,drawer-id=0,book-id=0,socket-id=0"""

The command string built with extra_params is eval'ed by the runtime
script, so the newlines need to be escaped with \.

Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
---
 scripts/common.bash  | 16 ++++++++++++++++
 scripts/runtime.bash |  4 ++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/scripts/common.bash b/scripts/common.bash
index 7b983f7d..b9413d68 100644
--- a/scripts/common.bash
+++ b/scripts/common.bash
@@ -36,6 +36,22 @@ function for_each_unittest()
 			kernel=$TEST_DIR/${BASH_REMATCH[1]}
 		elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then
 			smp=${BASH_REMATCH[1]}
+		elif [[ $line =~ ^extra_params\ *=\ *'"""'(.*)$ ]]; then
+			opts=${BASH_REMATCH[1]}$'\n'
+			while read -r -u $fd; do
+				#escape backslash newline, but not double backslash
+				if [[ $opts =~ [^\\]*(\\*)$'\n'$ ]]; then
+					if (( ${#BASH_REMATCH[1]} % 2 == 1 )); then
+						opts=${opts%\\$'\n'}
+					fi
+				fi
+				if [[ "$REPLY" =~ ^(.*)'"""'[:blank:]*$ ]]; then
+					opts+=${BASH_REMATCH[1]}
+					break
+				else
+					opts+=$REPLY$'\n'
+				fi
+			done
 		elif [[ $line =~ ^extra_params\ *=\ *(.*)$ ]]; then
 			opts=${BASH_REMATCH[1]}
 		elif [[ $line =~ ^groups\ *=\ *(.*)$ ]]; then
diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index ada8ffd7..fc156f2f 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -15,7 +15,7 @@ extract_summary()
 # We assume that QEMU is going to work if it tried to load the kernel
 premature_failure()
 {
-    local log="$(eval $(get_cmdline _NO_FILE_4Uhere_) 2>&1)"
+    local log="$(eval "$(get_cmdline _NO_FILE_4Uhere_)" 2>&1)"
 
     echo "$log" | grep "_NO_FILE_4Uhere_" |
         grep -q -e "could not \(load\|open\) kernel" -e "error loading" &&
@@ -168,7 +168,7 @@ function run()
     # extra_params in the config file may contain backticks that need to be
     # expanded, so use eval to start qemu.  Use "> >(foo)" instead of a pipe to
     # preserve the exit status.
-    summary=$(eval $cmdline 2> >(RUNTIME_log_stderr $testname) \
+    summary=$(eval "$cmdline" 2> >(RUNTIME_log_stderr $testname) \
                              > >(tee >(RUNTIME_log_stdout $testname $kernel) | extract_summary))
     ret=$?
     [ "$KUT_STANDALONE" != "yes" ] && echo > >(RUNTIME_log_stdout $testname $kernel)
-- 
2.41.0


  parent reply	other threads:[~2023-10-30 16:04 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-30 16:03 [kvm-unit-tests PATCH v3 00/10] s390x: topology: Fixes and extension Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 01/10] s390x: topology: Introduce enums for polarization & cpu type Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 02/10] s390x: topology: Fix report message Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 03/10] s390x: topology: Use function parameter in stsi_get_sysib Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 04/10] s390x: topology: Fix parsing loop Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 05/10] s390x: topology: Make some report messages unique Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 06/10] s390x: topology: Refine stsi header test Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 07/10] s390x: topology: Rename topology_core to topology_cpu Nina Schoetterl-Glausch
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 08/10] s390x: topology: Rewrite topology list test Nina Schoetterl-Glausch
2023-10-30 16:03 ` Nina Schoetterl-Glausch [this message]
2023-10-30 16:03 ` [kvm-unit-tests PATCH v3 10/10] s390x: topology: Add complex topology test Nina Schoetterl-Glausch
2023-11-07  9:04 ` [kvm-unit-tests PATCH v3 00/10] s390x: topology: Fixes and extension Nico Boehr

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=20231030160349.458764-10-nsg@linux.ibm.com \
    --to=nsg@linux.ibm.com \
    --cc=andrew.jones@linux.dev \
    --cc=coltonlewis@google.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=nikos.nikoleris@arm.com \
    --cc=nrb@linux.ibm.com \
    --cc=ricarkol@google.com \
    --cc=seanjc@google.com \
    --cc=thuth@redhat.com \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.