run_docker_tests.sh #11

  • //
  • guest/
  • perforce_software/
  • sdp/
  • main/
  • test/
  • run_docker_tests.sh
  • View
  • Commits
  • Open Download .zip Download (4 KB)
#!/bin/bash
#------------------------------------------------------------------------------
set -u

#------------------------------------------------------------------------------
# Run the Docker tests for the SDP - updated to use podman

# Usage Examples from workspace root:
#    sdp/test/run_docker_image.sh
#    sdp/test/run_docker_image.sh ubuntu20
#    sdp/test/run_docker_image.sh centos7 ubuntu20
#    sdp/test/run_docker_image.sh all
#    sdp/test/run_docker_image.sh ALL
#
# Goes together with build_docker_image.sh
#
# Note that this file is expecting to be mapped into the root of the workspace
# and with the sdp directory in the same root.
#
# So workspace view should look something like:
#    View:
#        //guest/perforce_software/sdp/main/... //myws.sdp/sdp/...

declare oses=

function msg () { echo -e "$*"; }
function bail () { msg "\nError: ${1:-Unknown Error}\n"; exit "${2:-1}"; }

# This file should be in <workspace-root>/sdp/test/
# We calculate dir relative to directory of script
script_dir="${0%/*}"
root_dir="$(cd "$script_dir/../.."; pwd -P)"

if [[ "${1:-Unset}" == "Unset" ]]; then
   # Default is currently CentOS 7 only.
   oses="centos7"
else
   for os in $(echo $* | tr ',' ' '); do
      case "$os" in
         (all) oses="centos7 rocky8 ubuntu20";;
         (ALL) oses="centos6 centos7 rocky8 ubuntu20";;
         (ubuntu20) oses+"=ubuntu20";;
         (centos7) oses+="centos7";;
         (rocky8) oses+="rocky8";;
         
         (*)
            echo "Warning: Unknown OS [$os]."
            oses+="$os"
         ;;
      esac
   done
fi

if command -v getenforce > /dev/null; then
    selinux=$(getenforce)
    # If enforcing mode then you have to allow container to write to the output dir below - for now just bail.
    [[ "$selinux" == "Enforcing" ]] && bail "This script can't be run with SELinux in Enforcing mode"
fi

# Directory where test output is put by the container
# Easier to make it under sdp which is a mounted volume
test_output_dir="$script_dir/output"
[[ -d "$test_output_dir" ]] || mkdir "$test_output_dir"
all_test_output="$test_output_dir/alltests.out"
if [[ -f "$all_test_output" ]]; then
   rm "$all_test_output"
fi

echo Running SDP tests
tests_failed=0
for os in $oses
do
   test_output="$test_output_dir/test-${os}.out"
   if [[ -f $test_output ]]; then
       rm "$test_output"
   fi
   docker_dir="$root_dir/sdp/test/docker"
   dockerfile_base="${docker_dir}/Dockerfile.${os}.base"
   dockerfile_sdp="${docker_dir}/Dockerfile.${os}.sdp"
   # Build the base Docker for the OS, and then the SDP variant on top
   podman build --rm=true -t="perforce/${os}-base" -f "${dockerfile_base}" "${docker_dir}"
   podman build --rm=true -t="perforce/${os}-sdp" -f "${dockerfile_sdp}" "${docker_dir}"
   # Run the Docker image, mounting the /sdp directory within it. The SDP image
   # has a default RUN command which is configured within it.
   # We don't directly stop on error but process a little later below so that nice
   # messages are written to Jenkins console output.
   # Note to use setcap with p4d >= 2023.1 we need --cap-add=SYS_RESOURCE for podman!
    set +e
    echo "docker run --rm --cap-add=SYS_RESOURCE -v ${PWD}/sdp:/sdp -e TESTOS=${os} perforce/${os}-sdp"
   podman run --rm --cap-add=SYS_RESOURCE -v "${PWD}/sdp:/sdp" -e "TESTOS=${os}" "perforce/${os}-sdp"
    tests_failed=$?
    set -e
   echo "$os" >> "$all_test_output"
   # Avoid Jenkins immediately failing job without letting us cat the output
   set +e
   cat "$test_output" >> "$all_test_output"
   set -e
   if [[ "$tests_failed" -ne 0 ]]; then
      break
   fi 
done
cat "$all_test_output"

exit "$tests_failed"
# Change User Description Committed
#13 30915 C. Thomas Tyler Released SDP 2024.1.30913 (2024/11/20).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#12 30388 C. Thomas Tyler Released SDP 2024.1.30385 (2024/06/11).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#11 30297 C. Thomas Tyler Released SDP 2023.2.30295 (2024/05/08).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#10 28858 C. Thomas Tyler Released SDP 2022.1.28855 (2022/05/27).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#9 27761 C. Thomas Tyler Released SDP 2020.1.27759 (2021/05/07).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#8 27331 C. Thomas Tyler Released SDP 2020.1.27325 (2021/01/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#7 25596 C. Thomas Tyler Released SDP 2019.2.25594 (2019/05/02).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#6 25245 C. Thomas Tyler Released SDP 2019.1.25238 (2019/03/02).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#5 25012 Robert Cowham Propagate test updates from dev and fix failing test by also propagating deleted script.
#4 22207 C. Thomas Tyler Released SDP 2017.2.22201 (2017/05/18).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#3 20974 C. Thomas Tyler Released SDP 2016.2.20972 (2016/11/01).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#2 19414 C. Thomas Tyler Released SDP/MultiArch/2016.1/19410 (2016/05/17).
#1 19322 Robert Cowham Propagate Docker tests to Main.
No functional change.
//guest/perforce_software/sdp/dev/test/run_docker_tests.sh
#3 19099 Robert Cowham Minor refactor to make things a little clearer as to test file location.
#2 19045 Robert Cowham Add docker file for Centos7
Refactor to move common stuff to a shell script.
#1 19019 Robert Cowham Run ubuntu