xref: /freebsd-src/sys/contrib/openzfs/.github/workflows/scripts/qemu-6-tests.sh (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
1*7a7741afSMartin Matuska#!/usr/bin/env bash
2*7a7741afSMartin Matuska
3*7a7741afSMartin Matuska######################################################################
4*7a7741afSMartin Matuska# 6) load openzfs module and run the tests
5*7a7741afSMartin Matuska#
6*7a7741afSMartin Matuska# called on runner:  qemu-6-tests.sh
7*7a7741afSMartin Matuska# called on qemu-vm: qemu-6-tests.sh $OS $2/$3
8*7a7741afSMartin Matuska######################################################################
9*7a7741afSMartin Matuska
10*7a7741afSMartin Matuskaset -eu
11*7a7741afSMartin Matuska
12*7a7741afSMartin Matuskafunction prefix() {
13*7a7741afSMartin Matuska  ID="$1"
14*7a7741afSMartin Matuska  LINE="$2"
15*7a7741afSMartin Matuska  CURRENT=$(date +%s)
16*7a7741afSMartin Matuska  TSSTART=$(cat /tmp/tsstart)
17*7a7741afSMartin Matuska  DIFF=$((CURRENT-TSSTART))
18*7a7741afSMartin Matuska  H=$((DIFF/3600))
19*7a7741afSMartin Matuska  DIFF=$((DIFF-(H*3600)))
20*7a7741afSMartin Matuska  M=$((DIFF/60))
21*7a7741afSMartin Matuska  S=$((DIFF-(M*60)))
22*7a7741afSMartin Matuska
23*7a7741afSMartin Matuska  CTR=$(cat /tmp/ctr)
24*7a7741afSMartin Matuska  echo $LINE| grep -q "^Test[: ]" && CTR=$((CTR+1)) && echo $CTR > /tmp/ctr
25*7a7741afSMartin Matuska
26*7a7741afSMartin Matuska  BASE="$HOME/work/zfs/zfs"
27*7a7741afSMartin Matuska  COLOR="$BASE/scripts/zfs-tests-color.sh"
28*7a7741afSMartin Matuska  CLINE=$(echo $LINE| grep "^Test[ :]" | sed -e 's|/usr/local|/usr|g' \
29*7a7741afSMartin Matuska    | sed -e 's| /usr/share/zfs/zfs-tests/tests/| |g' | $COLOR)
30*7a7741afSMartin Matuska  if [ -z "$CLINE" ]; then
31*7a7741afSMartin Matuska    printf "vm${ID}: %s\n" "$LINE"
32*7a7741afSMartin Matuska  else
33*7a7741afSMartin Matuska    # [vm2: 00:15:54  256] Test: functional/checksum/setup (run as root) [00:00] [PASS]
34*7a7741afSMartin Matuska    printf "[vm${ID}: %02d:%02d:%02d %4d] %s\n" \
35*7a7741afSMartin Matuska      "$H" "$M" "$S" "$CTR" "$CLINE"
36*7a7741afSMartin Matuska  fi
37*7a7741afSMartin Matuska}
38*7a7741afSMartin Matuska
39*7a7741afSMartin Matuska# called directly on the runner
40*7a7741afSMartin Matuskaif [ -z ${1:-} ]; then
41*7a7741afSMartin Matuska  cd "/var/tmp"
42*7a7741afSMartin Matuska  source env.txt
43*7a7741afSMartin Matuska  SSH=$(which ssh)
44*7a7741afSMartin Matuska  TESTS='$HOME/zfs/.github/workflows/scripts/qemu-6-tests.sh'
45*7a7741afSMartin Matuska  echo 0 > /tmp/ctr
46*7a7741afSMartin Matuska  date "+%s" > /tmp/tsstart
47*7a7741afSMartin Matuska
48*7a7741afSMartin Matuska  for i in $(seq 1 $VMs); do
49*7a7741afSMartin Matuska    IP="192.168.122.1$i"
50*7a7741afSMartin Matuska    daemonize -c /var/tmp -p vm${i}.pid -o vm${i}log.txt -- \
51*7a7741afSMartin Matuska      $SSH zfs@$IP $TESTS $OS $i $VMs $CI_TYPE
52*7a7741afSMartin Matuska    # handly line by line and add info prefix
53*7a7741afSMartin Matuska    stdbuf -oL tail -fq vm${i}log.txt \
54*7a7741afSMartin Matuska      | while read -r line; do prefix "$i" "$line"; done &
55*7a7741afSMartin Matuska    echo $! > vm${i}log.pid
56*7a7741afSMartin Matuska    # don't mix up the initial --- Configuration --- part
57*7a7741afSMartin Matuska    sleep 0.13
58*7a7741afSMartin Matuska  done
59*7a7741afSMartin Matuska
60*7a7741afSMartin Matuska  # wait for all vm's to finish
61*7a7741afSMartin Matuska  for i in $(seq 1 $VMs); do
62*7a7741afSMartin Matuska    tail --pid=$(cat vm${i}.pid) -f /dev/null
63*7a7741afSMartin Matuska    pid=$(cat vm${i}log.pid)
64*7a7741afSMartin Matuska    rm -f vm${i}log.pid
65*7a7741afSMartin Matuska    kill $pid
66*7a7741afSMartin Matuska  done
67*7a7741afSMartin Matuska
68*7a7741afSMartin Matuska  exit 0
69*7a7741afSMartin Matuskafi
70*7a7741afSMartin Matuska
71*7a7741afSMartin Matuska# this part runs inside qemu vm
72*7a7741afSMartin Matuskaexport PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin"
73*7a7741afSMartin Matuskacase "$1" in
74*7a7741afSMartin Matuska  freebsd*)
75*7a7741afSMartin Matuska    sudo kldstat -n zfs 2>/dev/null && sudo kldunload zfs
76*7a7741afSMartin Matuska    sudo -E ./zfs/scripts/zfs.sh
77*7a7741afSMartin Matuska    TDIR="/usr/local/share/zfs"
78*7a7741afSMartin Matuska    ;;
79*7a7741afSMartin Matuska  *)
80*7a7741afSMartin Matuska    # use xfs @ /var/tmp for all distros
81*7a7741afSMartin Matuska    sudo mv -f /var/tmp/*.txt /tmp
82*7a7741afSMartin Matuska    sudo mkfs.xfs -fq /dev/vdb
83*7a7741afSMartin Matuska    sudo mount -o noatime /dev/vdb /var/tmp
84*7a7741afSMartin Matuska    sudo chmod 1777 /var/tmp
85*7a7741afSMartin Matuska    sudo mv -f /tmp/*.txt /var/tmp
86*7a7741afSMartin Matuska    sudo -E modprobe zfs
87*7a7741afSMartin Matuska    TDIR="/usr/share/zfs"
88*7a7741afSMartin Matuska    ;;
89*7a7741afSMartin Matuskaesac
90*7a7741afSMartin Matuska
91*7a7741afSMartin Matuska# run functional testings and save exitcode
92*7a7741afSMartin Matuskacd /var/tmp
93*7a7741afSMartin MatuskaTAGS=$2/$3
94*7a7741afSMartin Matuskaif [ "$4" == "quick" ]; then
95*7a7741afSMartin Matuska  export RUNFILES="sanity.run"
96*7a7741afSMartin Matuskafi
97*7a7741afSMartin Matuskasudo dmesg -c > dmesg-prerun.txt
98*7a7741afSMartin Matuskamount > mount.txt
99*7a7741afSMartin Matuskadf -h > df-prerun.txt
100*7a7741afSMartin Matuska$TDIR/zfs-tests.sh -vK -s 3GB -T $TAGS
101*7a7741afSMartin MatuskaRV=$?
102*7a7741afSMartin Matuskadf -h > df-postrun.txt
103*7a7741afSMartin Matuskaecho $RV > tests-exitcode.txt
104*7a7741afSMartin Matuskasync
105*7a7741afSMartin Matuskaexit 0
106