spausedd/tests/smoke/runtest.sh
DistroBaker 2b4c66e2fd Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/spausedd.git#282f830b23e8d4b32c542800de005310b1d30c21
2020-11-02 16:57:35 +01:00

134 lines
3.0 KiB
Bash

#!/bin/bash
# Copyright (c) 2019, Red Hat, Inc.
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND RED HAT, INC. DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL RED HAT, INC. BE LIABLE
# FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# Author: Jan Friesse <jfriesse@redhat.com>
# Home https://github.com/jfriesse/csts/tree/master/smoke
# -e is really important
set -xe
set -o pipefail
# Variables changing test behavior
MAX_REPEATS=60
SLEEP=5
# Start of the test (for journalctl)
JOURNAL_DATE_SINCE=$(date +"%F %T")
####################
# Helper functions #
####################
# service_start service
service_start() {
# service service must be inactive
systemctl is-active "$1" && exit 1 || true
systemctl start "$1"
systemctl is-active "$1"
}
# service_stop service
service_stop() {
systemctl is-active "$1" || exit 1
systemctl stop "$1"
systemctl is-active "$1" && exit 1 || true
}
# wait_for_log_msg message
wait_for_log_msg() {
local cont=true
local repeats=0
journalctl --since "$JOURNAL_DATE_SINCE" | cat
while $cont;do
if journalctl _SYSTEMD_UNIT=spausedd.service -o cat --since "$JOURNAL_DATE_SINCE" | grep "$1";then
cont=false
else
sleep 1
repeats=$((repeats+1))
[ "$repeats" -le "$MAX_REPEATS" ] || return 1
fi
done
}
##################
# Test functions #
##################
test_spausedd_h() {
# Check that spausedd binary exists and -h returns help text
res=`spausedd -h || true`
[ "$res" != "${res/usage/}" ]
}
test_spausedd_start() {
service_start "spausedd"
wait_for_log_msg 'Running main poll loop with maximum timeout .* and steal threshold .*%'
}
test_spausedd_stop() {
service_stop "spausedd"
wait_for_log_msg 'During .*s runtime spausedd was .*x not scheduled on time'
}
test_sig_stop() {
local cont=true
local repeats=0
spausedd_pid=$(systemctl show spausedd -p "MainPID")
spausedd_pid=${spausedd_pid##*=}
while $cont;do
# Wait a while for full start
sleep $SLEEP
kill -STOP "$spausedd_pid"
sleep $SLEEP
kill -CONT "$spausedd_pid"
if wait_for_log_msg 'Not scheduled for .*s (threshold is .*s), steal time is ';then
cont=false
else
repeats=$((repeats+1))
[ "$repeats" -le "$MAX_REPEATS" ]
fi
done
}
test_man_page() {
man -w "spausedd"
}
########
# main #
########
test_spausedd_h
test_man_page
test_spausedd_start
test_sig_stop
test_spausedd_stop