public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: passt-dev@passt.top
Subject: [PATCH v5 13/14] test: Move video processing files to $STATEBASE
Date: Tue, 13 Sep 2022 14:35:28 +1000	[thread overview]
Message-ID: <20220913043529.3079003-14-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20220913043529.3079003-1-david@gibson.dropbear.id.au>

[-- Attachment #1: Type: text/plain, Size: 6476 bytes --]

The asciinema video handling creates a number of temporary files (.uncat,
.start, .stop) which currently go into the source tree.  Put them in the
temporary state directory to avoid clutter.

The final processed output is now placed into test_logs/web/ along with the
corresponding .js file with links, since they're essentially test
artefacts.  hooks/pre-push is updated to look for those files in the new
location when updating the web site.

Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au>
---
 hooks/pre-push  | 12 ++++++------
 test/.gitignore |  4 ----
 test/lib/term   |  8 ++++----
 test/lib/video  | 37 +++++++++++++++++++++----------------
 4 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/hooks/pre-push b/hooks/pre-push
index 1060802..1c221e7 100755
--- a/hooks/pre-push
+++ b/hooks/pre-push
@@ -34,15 +34,15 @@ ssh "${USER_HOST}" 				"mkdir -p ${WEB} ${TEST} ${BIN}"
 cd test
 
 ./ci
-gzip -fk9 perf.js ci.js
-scp perf.js perf.js.gz ci.js ci.js.gz		"${USER_HOST}:${WEB}/"
+gzip -fk9 perf.js
+scp perf.js perf.js.gz				"${USER_HOST}:${WEB}/"
 scp test_logs/* 				"${USER_HOST}:${TEST}/"
 ./run_demo
 
-for cast in ci demo_pasta demo_podman demo_passt; do
-	gzip -fk9 "${cast}.cast"
-	scp "${cast}.cast"		 	"${USER_HOST}:${WEB}/"
-	scp "${cast}.cast.gz"		 	"${USER_HOST}:${WEB}/"
+for f in test_logs/web/*.cast test_logs/web/*.js; do
+	gzip -fk9 "${f}"
+	scp "${f}"			 	"${USER_HOST}:${WEB}/"
+	scp "${f}.gz"			 	"${USER_HOST}:${WEB}/"
 done
 
 cd ..
diff --git a/test/.gitignore b/test/.gitignore
index 0f91c7d..2e75cb5 100644
--- a/test/.gitignore
+++ b/test/.gitignore
@@ -6,10 +6,6 @@ QEMU_EFI.fd
 *.qcow2
 *.raw
 *.raw.xz
-*.uncut
-*.start
-*.stop
-*.js
 nsholder
 guest-key
 guest-key.pub
diff --git a/test/lib/term b/test/lib/term
index c9720be..b31deac 100755
--- a/test/lib/term
+++ b/test/lib/term
@@ -643,12 +643,12 @@ run_term() {
 
 	if [ ${CI} -eq 1 ]; then
 		printf '\e[8;50;240t'
-		asciinema rec --overwrite ci.uncut -c "$TMUX /bin/sh -c './ci from_term'"
-		video_postprocess ci.uncut
+		asciinema rec --overwrite "${STATEBASE}/ci.uncut" -c "$TMUX /bin/sh -c './ci from_term'"
+		video_postprocess "${STATEBASE}/ci.uncut"
 	elif [ ${DEMO} -eq 1 ]; then
 		printf '\e[8;40;130t'
-		asciinema rec --overwrite demo.uncut -c "$TMUX /bin/sh -c './run_demo from_term'"
-		video_postprocess demo.uncut
+		asciinema rec --overwrite "${STATEBASE}/demo.uncut" -c "$TMUX /bin/sh -c './run_demo from_term'"
+		video_postprocess "${STATEBASE}/demo.uncut"
 	else
 		$TMUX /bin/sh -c './run from_term'
 	fi
diff --git a/test/lib/video b/test/lib/video
index f609abf..0ed6a3e 100755
--- a/test/lib/video
+++ b/test/lib/video
@@ -60,7 +60,8 @@ VIDEO_LINKS_COUNT=0
 # video_append_links() - Append generic string to JavaScript links file
 video_append_links()
 {
-	printf "${@}" >> "${BASEPATH}/${VIDEO_NAME}.js"
+        __web="${LOGDIR}/web"
+	printf "${@}" >> "${__web}/${VIDEO_NAME}.js"
 }
 
 # video_append_links() - Append generic string to buffer for links
@@ -72,13 +73,14 @@ video_append_links_js()
 # video_start() - Mark start of a test in capture, record start timestamp
 video_start() {
 	VIDEO_NAME="${1}"
-
-	echo "${VIDEO_LINKS_TEMPLATE}" > "${BASEPATH}/${VIDEO_NAME}.js"
+        __web="${LOGDIR}/web"
+        mkdir -p "${__web}"
+	echo "${VIDEO_LINKS_TEMPLATE}" > "${__web}/${VIDEO_NAME}.js"
 	VIDEO_START_SECONDS=$(sed -n 's/\([0-9]*\).[0-9]* [0-9]*.[0-9]*/\1/p' /proc/uptime)
 
 	sync
-	[ ${DEMO} -eq 1 ] && tail -1 "${BASEPATH}/demo.uncut" > "${BASEPATH}/${VIDEO_NAME}.start"
-	[ ${CI} -eq 1 ] && tail -1 "${BASEPATH}/ci.uncut" > "${BASEPATH}/${VIDEO_NAME}.start"
+	[ ${DEMO} -eq 1 ] && tail -1 "${STATEBASE}/demo.uncut" > "${STATEBASE}/${VIDEO_NAME}.start"
+	[ ${CI} -eq 1 ] && tail -1 "${STATEBASE}/ci.uncut" > "${STATEBASE}/${VIDEO_NAME}.start"
 	sync
 
 	tmux refresh-client
@@ -86,34 +88,37 @@ video_start() {
 
 # video_stop() - Mark stop of a test in capture, finalise JavaScript fragments
 video_stop() {
+        __web="${LOGDIR}/web"
 	tmux refresh-client
 
 	sync
-	[ ${DEMO} -eq 1 ] && tail -1 "${BASEPATH}/demo.uncut" > "${BASEPATH}/${VIDEO_NAME}.stop"
-	[ ${CI} -eq 1 ] && tail -1 "${BASEPATH}/ci.uncut" > "${BASEPATH}/${VIDEO_NAME}.stop"
+	[ ${DEMO} -eq 1 ] && tail -1 "${STATEBASE}/demo.uncut" > "${STATEBASE}/${VIDEO_NAME}.stop"
+	[ ${CI} -eq 1 ] && tail -1 "${STATEBASE}/ci.uncut" > "${STATEBASE}/${VIDEO_NAME}.stop"
 	sync
 
-	sed -i 's/^.*$/&\\/g' "${BASEPATH}/${VIDEO_NAME}.js"
-	echo "${VIDEO_LINKS_TEMPLATE_JS}" | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${BASEPATH}/${VIDEO_NAME}.js"
-	echo "${VIDEO_LINKS_BUF}" >> "${BASEPATH}/${VIDEO_NAME}.js"
-	echo "${VIDEO_LINKS_TEMPLATE_POST}"  | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${BASEPATH}/${VIDEO_NAME}.js"
+	sed -i 's/^.*$/&\\/g' "${__web}/${VIDEO_NAME}.js"
+	echo "${VIDEO_LINKS_TEMPLATE_JS}" | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${__web}/${VIDEO_NAME}.js"
+	echo "${VIDEO_LINKS_BUF}" >> "${__web}/${VIDEO_NAME}.js"
+	echo "${VIDEO_LINKS_TEMPLATE_POST}"  | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${__web}/${VIDEO_NAME}.js"
 }
 
 # video_postprocess() - Cut terminal recordings based on .start and .stop files
 video_postprocess() {
 	IFS='
 '
+        __web="${LOGDIR}/web"
 	__cast_name=
 	for __l in $(cat ${1}); do
 		[ -z "${__header}" ] && __header="${__l}" && continue
 
 		if [ -z "${__cast_name}" ]; then
-			for __cast_cut in *.start; do
+		        for __cast_cut in "${STATEBASE}/"*.start; do
 				[ "${__l}" != "$(cat "${__cast_cut}")" ] && continue
-				__cast_name="${__cast_cut%.start}"
+				__cast_name="$(basename "${__cast_cut}")"
+                                __cast_name="${__cast_name%.start}"
 				__cast_offset=
-				__stop_line="$(cat ${__cast_name}.stop)"
-				echo "${__header}" > "${__cast_name}.cast"
+				__stop_line="$(cat "${STATEBASE}/${__cast_name}.stop")"
+				echo "${__header}" > "${__web}/${__cast_name}.cast"
 				break
 			done
 			continue
@@ -125,7 +130,7 @@ video_postprocess() {
 		__l_rest="${__l#*.}"
 		[ -z "${__cast_offset}" ] && __cast_offset=${__l_offset}
 		__l_offset=$((__l_offset - __cast_offset))
-		printf '[%s.%s\n' "${__l_offset}" "${__l_rest}" >> "${__cast_name}".cast
+		printf '[%s.%s\n' "${__l_offset}" "${__l_rest}" >> "${__web}/${__cast_name}".cast
 	done
 	unset IFS
 }
-- 
@@ -60,7 +60,8 @@ VIDEO_LINKS_COUNT=0
 # video_append_links() - Append generic string to JavaScript links file
 video_append_links()
 {
-	printf "${@}" >> "${BASEPATH}/${VIDEO_NAME}.js"
+        __web="${LOGDIR}/web"
+	printf "${@}" >> "${__web}/${VIDEO_NAME}.js"
 }
 
 # video_append_links() - Append generic string to buffer for links
@@ -72,13 +73,14 @@ video_append_links_js()
 # video_start() - Mark start of a test in capture, record start timestamp
 video_start() {
 	VIDEO_NAME="${1}"
-
-	echo "${VIDEO_LINKS_TEMPLATE}" > "${BASEPATH}/${VIDEO_NAME}.js"
+        __web="${LOGDIR}/web"
+        mkdir -p "${__web}"
+	echo "${VIDEO_LINKS_TEMPLATE}" > "${__web}/${VIDEO_NAME}.js"
 	VIDEO_START_SECONDS=$(sed -n 's/\([0-9]*\).[0-9]* [0-9]*.[0-9]*/\1/p' /proc/uptime)
 
 	sync
-	[ ${DEMO} -eq 1 ] && tail -1 "${BASEPATH}/demo.uncut" > "${BASEPATH}/${VIDEO_NAME}.start"
-	[ ${CI} -eq 1 ] && tail -1 "${BASEPATH}/ci.uncut" > "${BASEPATH}/${VIDEO_NAME}.start"
+	[ ${DEMO} -eq 1 ] && tail -1 "${STATEBASE}/demo.uncut" > "${STATEBASE}/${VIDEO_NAME}.start"
+	[ ${CI} -eq 1 ] && tail -1 "${STATEBASE}/ci.uncut" > "${STATEBASE}/${VIDEO_NAME}.start"
 	sync
 
 	tmux refresh-client
@@ -86,34 +88,37 @@ video_start() {
 
 # video_stop() - Mark stop of a test in capture, finalise JavaScript fragments
 video_stop() {
+        __web="${LOGDIR}/web"
 	tmux refresh-client
 
 	sync
-	[ ${DEMO} -eq 1 ] && tail -1 "${BASEPATH}/demo.uncut" > "${BASEPATH}/${VIDEO_NAME}.stop"
-	[ ${CI} -eq 1 ] && tail -1 "${BASEPATH}/ci.uncut" > "${BASEPATH}/${VIDEO_NAME}.stop"
+	[ ${DEMO} -eq 1 ] && tail -1 "${STATEBASE}/demo.uncut" > "${STATEBASE}/${VIDEO_NAME}.stop"
+	[ ${CI} -eq 1 ] && tail -1 "${STATEBASE}/ci.uncut" > "${STATEBASE}/${VIDEO_NAME}.stop"
 	sync
 
-	sed -i 's/^.*$/&\\/g' "${BASEPATH}/${VIDEO_NAME}.js"
-	echo "${VIDEO_LINKS_TEMPLATE_JS}" | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${BASEPATH}/${VIDEO_NAME}.js"
-	echo "${VIDEO_LINKS_BUF}" >> "${BASEPATH}/${VIDEO_NAME}.js"
-	echo "${VIDEO_LINKS_TEMPLATE_POST}"  | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${BASEPATH}/${VIDEO_NAME}.js"
+	sed -i 's/^.*$/&\\/g' "${__web}/${VIDEO_NAME}.js"
+	echo "${VIDEO_LINKS_TEMPLATE_JS}" | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${__web}/${VIDEO_NAME}.js"
+	echo "${VIDEO_LINKS_BUF}" >> "${__web}/${VIDEO_NAME}.js"
+	echo "${VIDEO_LINKS_TEMPLATE_POST}"  | sed "s/__VIDEO_NAME__/${VIDEO_NAME}/g" >> "${__web}/${VIDEO_NAME}.js"
 }
 
 # video_postprocess() - Cut terminal recordings based on .start and .stop files
 video_postprocess() {
 	IFS='
 '
+        __web="${LOGDIR}/web"
 	__cast_name=
 	for __l in $(cat ${1}); do
 		[ -z "${__header}" ] && __header="${__l}" && continue
 
 		if [ -z "${__cast_name}" ]; then
-			for __cast_cut in *.start; do
+		        for __cast_cut in "${STATEBASE}/"*.start; do
 				[ "${__l}" != "$(cat "${__cast_cut}")" ] && continue
-				__cast_name="${__cast_cut%.start}"
+				__cast_name="$(basename "${__cast_cut}")"
+                                __cast_name="${__cast_name%.start}"
 				__cast_offset=
-				__stop_line="$(cat ${__cast_name}.stop)"
-				echo "${__header}" > "${__cast_name}.cast"
+				__stop_line="$(cat "${STATEBASE}/${__cast_name}.stop")"
+				echo "${__header}" > "${__web}/${__cast_name}.cast"
 				break
 			done
 			continue
@@ -125,7 +130,7 @@ video_postprocess() {
 		__l_rest="${__l#*.}"
 		[ -z "${__cast_offset}" ] && __cast_offset=${__l_offset}
 		__l_offset=$((__l_offset - __cast_offset))
-		printf '[%s.%s\n' "${__l_offset}" "${__l_rest}" >> "${__cast_name}".cast
+		printf '[%s.%s\n' "${__l_offset}" "${__l_rest}" >> "${__web}/${__cast_name}".cast
 	done
 	unset IFS
 }
-- 
2.37.3


  parent reply	other threads:[~2022-09-13  4:35 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-13  4:35 [PATCH v5 00/14] Improve handling of test temporary files David Gibson
2022-09-13  4:35 ` [PATCH v5 01/14] test: Group tests by mode then protocol, rather than the reverse David Gibson
2022-09-13  4:35 ` [PATCH v5 02/14] test: Remove unused variable FFMPEG_PID_FILE David Gibson
2022-09-13  4:35 ` [PATCH v5 03/14] test: Actually run cleanup function David Gibson
2022-09-13  4:35 ` [PATCH v5 04/14] test: Create common state directories for temporary files David Gibson
2022-09-13  4:35 ` [PATCH v5 05/14] test: Move passt_test_log_pipe to state directory David Gibson
2022-09-13  4:35 ` [PATCH v5 06/14] test: Move context temporary files to state dir David Gibson
2022-09-13  4:35 ` [PATCH v5 07/14] test: Don't redundantly regenerate small test file in pasta/tcp David Gibson
2022-09-13  4:35 ` [PATCH v5 08/14] test: Use paths in __STATEDIR__ instead of 'temp' and 'tempdir' directives David Gibson
2022-09-13  4:35 ` [PATCH v5 09/14] test: Move pause temporary file to state directory David Gibson
2022-09-13  4:35 ` [PATCH v5 10/14] test: Store pcap files in $LOGDIR instead of /tmp David Gibson
2022-09-13  4:35 ` [PATCH v5 11/14] test: Move pidfiles and nsholder sockets into state directory David Gibson
2022-09-13  4:35 ` [PATCH v5 12/14] demo: Move pidfiles to " David Gibson
2022-09-13  4:35 ` David Gibson [this message]
2022-09-13  4:35 ` [PATCH v5 14/14] test: Move perf.js report file to $LOGDIR/web David Gibson

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=20220913043529.3079003-14-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --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).