aboutgitcodelistschat:MatrixIRC
diff options
context:
space:
mode:
-rwxr-xr-xweb/demo_connect.sh189
1 files changed, 189 insertions, 0 deletions
diff --git a/web/demo_connect.sh b/web/demo_connect.sh
new file mode 100755
index 0000000..ee6ffb0
--- /dev/null
+++ b/web/demo_connect.sh
@@ -0,0 +1,189 @@
+#!/bin/sh -ef
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# web/demo_connect.sh: Prepare asciinema(1) demo for connect example
+#
+# Copyright (c) 2023 Red Hat GmbH
+# Author: Stefano Brivio <sbrivio@redhat.com>
+# Alice Frosi <afrosi@redhat.com>
+
+SEITAN_DIR=$(pwd)
+SESSION=demo
+VIDEO=seitan-connect
+PSEITAN=1
+PEATER=2
+PSERVER=3
+
+setup_common() {
+ tmux new-session -d -s $SESSION
+ tmux send-keys -t $SESSION 'PS1="$ "'
+ tmux send-keys -t $SESSION C-m
+ tmux send-keys -t $SESSION clear
+ tmux send-keys -t $SESSION C-m
+
+ tmux set -t $SESSION window-status-format '#W'
+ tmux set -t $SESSION window-status-current-format '#W'
+ tmux set -t $SESSION status-left ''
+ tmux set -t $SESSION window-status-separator ''
+
+ tmux set -t $SESSION window-status-style 'bg=colour1 fg=colour15 bold'
+ tmux set -t $SESSION status-right ''
+ tmux set -t $SESSION status-style 'bg=colour1 fg=colour15 bold'
+ tmux set -t $SESSION status-right-style 'bg=colour1 fg=colour15 bold'
+ tmux send-keys -t $SESSION "cd ${SEITAN_DIR}" ENTER
+ sleep 1
+}
+
+split_panes() {
+ tmux split-window -h
+ tmux send-keys -t $SESSION 'PS1="$ " && clear' ENTER
+ tmux split-window -v
+ tmux send-keys -t $SESSION 'PS1="$ " && clear' ENTER
+}
+
+SCRIPT_cooker='
+cat demo/connect.hjson
+###
+clear
+./seitan-cooker demo/connect.hjson demo/connect.gluten demo/connect.bpf
+###
+clear
+'
+
+SCRIPT_socat='
+#
+socat UNIX-LISTEN:/tmp/demo.sock -
+#
+'
+
+SCRIPT_eater_connect='
+#
+./seitan-eater -i demo/connect.bpf -- socat OPEN:abcd UNIX-CONNECT:/var/run/pr-helper.sock
+#
+'
+
+SCRIPT_eater_connect_fake='
+#
+./seitan-eater -i demo/connect.bpf -- socat - UNIX-CONNECT:/fake.sock
+#
+'
+
+SCRIPT_eater_connect_error='
+#
+./seitan-eater -i demo/connect.bpf -- socat OPEN:abcd UNIX-CONNECT:/error.sock
+#
+'
+
+SCRIPT_seitan='
+#
+./seitan -p $(pgrep seitan-eater) -i demo/connect.gluten
+'
+
+cmd_write() {
+ __str="${@}"
+ while [ -n "${__str}" ]; do
+ __rem="${__str#?}"
+ __first="${__str%"$__rem"}"
+ if [ "${__first}" = ";" ]; then
+ tmux send-keys -t $SESSION -l '\;'
+ else
+ tmux send-keys -t $SESSION -l "${__first}"
+ fi
+ sleep 0.05 || :
+ __str="${__rem}"
+ done
+ sleep 2
+ tmux send-keys -t $SESSION "C-m"
+}
+
+script() {
+ IFS='
+'
+ for line in $(eval printf '%s\\\n' \$SCRIPT_${1}); do
+ unset IFS
+ case ${line} in
+ "@") tmux send-keys -t $SESSION C-m ;;
+ "#"*) sleep ${#line} ;;
+ *) cmd_write "${line}" ;;
+ esac
+ IFS='
+'
+ done
+ unset IFS
+}
+
+wait_seitan_exit() {
+ while [ "$(pgrep seitan)" != "" ] ; do sleep 1; done
+}
+
+clear_panes() {
+ wait_seitan_exit
+ panes=$(tmux list-panes |awk '{ print $1 }' | sed 's/://')
+ for p in $panes
+ do
+ tmux select-pane -t $p
+ tmux send-keys -t $SESSION clear
+ tmux send-keys -t $SESSION C-m
+ done
+ sleep 1
+}
+
+teardown_common() {
+ sleep 5
+ tmux kill-session -t $SESSION
+ sleep 5
+}
+
+printf '\e[8;22;80t'
+
+setup_common
+
+tmux send-keys -t $SESSION -l 'reset'
+tmux send-keys -t $SESSION C-m
+tmux rename-window -t $SESSION 'Seitan demo: generate input files'
+
+asciinema rec --overwrite ${VIDEO}.cast -c 'tmux attach -t $SESSION' &
+sleep 1
+tmux refresh-client
+
+# Input generation
+tmux select-pane -t $PSEITAN
+script cooker
+
+# First part
+split_panes
+
+tmux select-pane -t $PSERVER
+tmux rename-window -t $SESSION 'Seitan demo: connect to another path'
+script socat
+
+tmux select-pane -t $PEATER
+script eater_connect
+tmux select-pane -t $PSEITAN
+script seitan
+sleep 4
+
+# Use only 2 panes
+clear_panes
+tmux kill-pane -t $PSERVER
+
+# Second part
+tmux rename-window -t $SESSION 'Seitan demo: mock connect syscall'
+tmux select-pane -t $PEATER
+script eater_connect_fake
+tmux select-pane -t $PSEITAN
+script seitan
+
+sleep 4
+clear_panes
+
+# Third part
+tmux rename-window -t $SESSION 'Seitan demo: error injection (EPERM)'
+tmux select-pane -t $PEATER
+script eater_connect_error
+tmux select-pane -t $PSEITAN
+script seitan
+
+teardown_common
+gzip -fk9 ${VIDEO}.cast