mirror of
				https://git.code.sf.net/p/linux-ima/ima-evm-utils
				synced 2025-11-04 06:40:49 +01:00 
			
		
		
		
	Add support for creating a new testing environment in functions.sh
Add the new functions _run_env(), _exit_env(), _init_env() and
_cleanup_env() to run the tests inside a new environment specified with the
TST_ENV environment variable.
A typical structure of a script with tests is:
trap '_report_exit_and_cleanup _cleanup_env cleanup' \
    SIGINT SIGTERM SIGSEGV EXIT
cleanup() {
	<test cleanup>
}
<tests implementations>
_run_env "$TST_KERNEL" "$PWD/$(basename "$0")" "env_var1=$env_var1 ..."
_exit_env "$TST_KERNEL"
_init_env
<tests init>
<tests call>
If TST_ENV is not set or empty, don't create a new testing environment and
perform the cleanup in the current environment. Don't create a new testing
environment also if the script is already executed in a new environment, to
avoid loops. Instead, for cleanup, do it in the new environment and skip it
in the host environment (if the cleanup function is passed to
_cleanup_env()).
Signal to the creator of the environment failures of tests or of the script
itself run in the new environment (if the exit code is 1 ($FAIL) or 99
($HARDFAIL)) with an unclean shutdown of the system.
Add haveged and systemd as dependencies for the tests in ci/fedora.sh,
respectively for initializing the random number generator and for shutting
down the system in the new environment.
Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
			
			
This commit is contained in:
		
				
					committed by
					
						
						Mimi Zohar
					
				
			
			
				
	
			
			
			
						parent
						
							03b5d159ca
						
					
				
				
					commit
					f106a9022d
				
			@@ -45,7 +45,9 @@ yum -y install \
 | 
			
		||||
	vim-common \
 | 
			
		||||
	wget \
 | 
			
		||||
	which \
 | 
			
		||||
	zstd
 | 
			
		||||
	zstd \
 | 
			
		||||
	haveged \
 | 
			
		||||
	systemd
 | 
			
		||||
 | 
			
		||||
yum -y install docbook5-style-xsl || true
 | 
			
		||||
yum -y install swtpm || true
 | 
			
		||||
 
 | 
			
		||||
@@ -271,6 +271,25 @@ _report_exit_and_cleanup() {
 | 
			
		||||
  [ $testsfail -gt 0 ] && echo -n "$RED" || echo -n "$NORM"
 | 
			
		||||
  echo " FAIL: $testsfail"
 | 
			
		||||
  echo "$NORM"
 | 
			
		||||
  # Signal failure to the testing environment creator with an unclean shutdown.
 | 
			
		||||
  if [ -n "$TST_ENV" ] && [ $$ -eq 1 ]; then
 | 
			
		||||
    if [ -z "$(command -v poweroff)" ]; then
 | 
			
		||||
      echo "Warning: cannot properly shutdown system"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # If no test was executed and the script was successful,
 | 
			
		||||
    # do a clean shutdown.
 | 
			
		||||
    if [ $testsfail -eq 0 ] && [ $testspass -eq 0 ] && [ $testsskip -eq 0 ] &&
 | 
			
		||||
       [ $exit_code -ne "$FAIL" ] && [ $exit_code -ne "$HARDFAIL" ]; then
 | 
			
		||||
      poweroff -f
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # If tests were executed and no test failed, do a clean shutdown.
 | 
			
		||||
    if { [ $testspass -gt 0 ] || [ $testsskip -gt 0 ]; } &&
 | 
			
		||||
       [ $testsfail -eq 0 ]; then
 | 
			
		||||
      poweroff -f
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  if [ $testsfail -gt 0 ]; then
 | 
			
		||||
    exit "$FAIL"
 | 
			
		||||
  elif [ $testspass -gt 0 ]; then
 | 
			
		||||
@@ -319,3 +338,75 @@ _softhsm_teardown() {
 | 
			
		||||
  unset SOFTHSM_SETUP_CONFIGDIR SOFTHSM2_CONF PKCS11_KEYURI \
 | 
			
		||||
    EVMCTL_ENGINE OPENSSL_ENGINE OPENSSL_KEYFORM
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Syntax: _run_env <kernel> <init> <additional kernel parameters>
 | 
			
		||||
_run_env() {
 | 
			
		||||
  if [ -z "$TST_ENV" ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ $$ -eq 1 ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$TST_ENV" = "um" ]; then
 | 
			
		||||
    expect_pass "$1" rootfstype=hostfs rw init="$2" quiet mem=2048M "$3"
 | 
			
		||||
  else
 | 
			
		||||
    echo $RED"Testing environment $TST_ENV not supported"$NORM
 | 
			
		||||
    exit "$FAIL"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Syntax: _exit_env <kernel>
 | 
			
		||||
_exit_env() {
 | 
			
		||||
  if [ -z "$TST_ENV" ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ $$ -eq 1 ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit "$OK"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Syntax: _init_env
 | 
			
		||||
_init_env() {
 | 
			
		||||
  if [ -z "$TST_ENV" ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ $$ -ne 1 ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  mount -t tmpfs tmpfs /tmp
 | 
			
		||||
  mount -t proc proc /proc
 | 
			
		||||
  mount -t sysfs sysfs /sys
 | 
			
		||||
  mount -t securityfs securityfs /sys/kernel/security
 | 
			
		||||
 | 
			
		||||
  if [ -n "$(command -v haveged 2> /dev/null)" ]; then
 | 
			
		||||
    $(command -v haveged) -w 1024 &> /dev/null
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  pushd "$PWD" > /dev/null || exit "$FAIL"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Syntax: _cleanup_env <cleanup function>
 | 
			
		||||
_cleanup_env() {
 | 
			
		||||
  if [ -z "$TST_ENV" ]; then
 | 
			
		||||
    $1
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ $$ -ne 1 ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  $1
 | 
			
		||||
 | 
			
		||||
  umount /sys/kernel/security
 | 
			
		||||
  umount /sys
 | 
			
		||||
  umount /proc
 | 
			
		||||
  umount /tmp
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user