X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fbash%2Ffunction%2Fcommon.sh;h=e576f99d8d322bc8de879e452872761e7e4f0e2f;hb=c79c748013ec53ff59e9260034822a5b26afa441;hp=b0b97e0040e5fc6d9a813d8d55e818d4258f0c54;hpb=ccfe499e2a27f2caf234ecbb2ec948120810eab6;p=csit.git diff --git a/resources/libraries/bash/function/common.sh b/resources/libraries/bash/function/common.sh index b0b97e0040..e576f99d8d 100644 --- a/resources/libraries/bash/function/common.sh +++ b/resources/libraries/bash/function/common.sh @@ -202,37 +202,41 @@ function common_dirs () { set -exuo pipefail - BASH_FUNCTION_DIR="$(dirname "$(readlink -e "${BASH_SOURCE[0]}")")" || { - die "Some error during localizing this source directory." + this_file=$(readlink -e "${BASH_SOURCE[0]}") || { + die "Some error during locating of this source file." + } + BASH_FUNCTION_DIR=$(dirname "${this_file}") || { + die "Some error during dirname call." } # Current working directory could be in a different repo, e.g. VPP. pushd "${BASH_FUNCTION_DIR}" || die "Pushd failed" - CSIT_DIR="$(readlink -e "$(git rev-parse --show-toplevel)")" || { - die "Readlink or git rev-parse failed." + relative_csit_dir=$(git rev-parse --show-toplevel) || { + die "Git rev-parse failed." } + CSIT_DIR=$(readlink -e "${relative_csit_dir}") || die "Readlink failed." popd || die "Popd failed." - TOPOLOGIES_DIR="$(readlink -e "${CSIT_DIR}/topologies/available")" || { + TOPOLOGIES_DIR=$(readlink -e "${CSIT_DIR}/topologies/available") || { die "Readlink failed." } - RESOURCES_DIR="$(readlink -e "${CSIT_DIR}/resources")" || { + RESOURCES_DIR=$(readlink -e "${CSIT_DIR}/resources") || { die "Readlink failed." } - TOOLS_DIR="$(readlink -e "${RESOURCES_DIR}/tools")" || { + TOOLS_DIR=$(readlink -e "${RESOURCES_DIR}/tools") || { die "Readlink failed." } - PYTHON_SCRIPTS_DIR="$(readlink -e "${TOOLS_DIR}/scripts")" || { + PYTHON_SCRIPTS_DIR=$(readlink -e "${TOOLS_DIR}/scripts") || { die "Readlink failed." } - ARCHIVE_DIR="$(readlink -f "${CSIT_DIR}/archive")" || { + ARCHIVE_DIR=$(readlink -f "${CSIT_DIR}/archive") || { die "Readlink failed." } mkdir -p "${ARCHIVE_DIR}" || die "Mkdir failed." - DOWNLOAD_DIR="$(readlink -f "${CSIT_DIR}/download_dir")" || { + DOWNLOAD_DIR=$(readlink -f "${CSIT_DIR}/download_dir") || { die "Readlink failed." } mkdir -p "${DOWNLOAD_DIR}" || die "Mkdir failed." - GENERATED_DIR="$(readlink -f "${CSIT_DIR}/generated")" || { + GENERATED_DIR=$(readlink -f "${CSIT_DIR}/generated") || { die "Readlink failed." } mkdir -p "${GENERATED_DIR}" || die "Mkdir failed." @@ -282,6 +286,31 @@ function compose_pybot_arguments () { } +function copy_archives () { + + # Create additional archive if workspace variable is set. + # This way if script is running in jenkins all will be + # automatically archived to logs.fd.io. + # + # Variables read: + # - WORKSPACE - Jenkins workspace, copy only if the value is not empty. + # Can be unset, then it speeds up manual testing. + # - ARCHIVE_DIR - Path to directory with content to be copied. + # Directories updated: + # - ${WORKSPACE}/archives/ - Created if does not exist. + # Content of ${ARCHIVE_DIR}/ is copied here. + # Functions called: + # - die - Print to stderr and exit. + + set -exuo pipefail + + if [[ -n "${WORKSPACE-}" ]]; then + mkdir -p "${WORKSPACE}/archives/" || die "Archives dir create failed." + cp -rf "${ARCHIVE_DIR}"/* "${WORKSPACE}/archives" || die "Copy failed." + fi +} + + function deactivate_docker_topology () { # Deactivate virtual vpp-device topology by removing containers. @@ -619,6 +648,54 @@ function run_pybot () { } +function select_arch_os () { + + # Populate variables related to local operating system. + # + # Also install any missing prerequisities CSIT tests need. + # TODO: Move the installation to a separate function? + # + # Variables set: + # - VPP_VER_FILE - Name of File in CSIT dir containing vpp stable version. + # - IMAGE_VER_FILE - Name of File in CSIT dir containing the image name. + # - PKG_SUFFIX - Suffix of OS package file name, "rpm" or "deb." + + set -exuo pipefail + + os_id=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g') || { + die "Get OS release failed." + } + + case "${os_id}" in + "ubuntu"*) + IMAGE_VER_FILE="VPP_DEVICE_IMAGE_UBUNTU" + VPP_VER_FILE="VPP_STABLE_VER_UBUNTU_BIONIC" + PKG_SUFFIX="deb" + ;; + "centos"*) + IMAGE_VER_FILE="VPP_DEVICE_IMAGE_CENTOS" + VPP_VER_FILE="VPP_STABLE_VER_CENTOS" + PKG_SUFFIX="rpm" + ;; + *) + die "Unable to identify distro or os from ${os_id}" + ;; + esac + + arch=$(uname -m) || { + die "Get CPU architecture failed." + } + + case "${arch}" in + "aarch64") + IMAGE_VER_FILE="${IMAGE_VER_FILE}_ARM" + ;; + *) + ;; + esac +} + + function select_tags () { # Variables read: @@ -662,6 +739,7 @@ function select_tags () { ;; esac + sed_nic_sub_cmd="sed s/\${default_nic}/${default_nic}/" # Tag file directory shorthand. tfd="${BASH_FUNCTION_DIR}" case "${TEST_CODE}" in @@ -670,8 +748,8 @@ function select_tags () { readarray -t test_tag_array < "${tfd}/mlr-weekly.txt" || die ;; *"mrr-daily"* ) - readarray -t test_tag_array < \ - "${tfd}/mrr-daily-${FLAVOR}.txt" || die + readarray -t test_tag_array <<< $(${sed_nic_sub_cmd} \ + ${tfd}/mrr-daily-${FLAVOR}.txt) || die ;; *"mrr-weekly"* ) readarray -t test_tag_array < "${tfd}/mrr-weekly.txt" || die @@ -778,82 +856,6 @@ function select_tags () { } -function select_vpp_device_tags () { - - # Variables read: - # - TEST_CODE - String affecting test selection, usually jenkins job name. - # - TEST_TAG_STRING - String selecting tags, from gerrit comment. - # Can be unset. - # Variables set: - # - TAGS - Array of processed tag boolean expressions. - - set -exuo pipefail - - case "${TEST_CODE}" in - # Select specific performance tests based on jenkins job type variable. - * ) - if [[ -z "${TEST_TAG_STRING-}" ]]; then - # If nothing is specified, we will run pre-selected tests by - # following tags. Items of array will be concatenated by OR - # in Robot Framework. - test_tag_array=() - else - # If trigger contains tags, split them into array. - test_tag_array=(${TEST_TAG_STRING//:/ }) - fi - ;; - esac - - TAGS=() - - # We will prefix with devicetest to prevent running other tests - # (e.g. Functional). - prefix="devicetestAND" - if [[ "${TEST_CODE}" == "vpp-"* ]]; then - # Automatic prefixing for VPP jobs to limit testing. - prefix="${prefix}" - fi - for tag in "${test_tag_array[@]}"; do - if [[ ${tag} == "!"* ]]; then - # Exclude tags are not prefixed. - TAGS+=("${tag}") - else - TAGS+=("${prefix}${tag}") - fi - done -} - -function select_os () { - - # Variables set: - # - VPP_VER_FILE - Name of File in CSIT dir containing vpp stable version. - # - IMAGE_VER_FILE - Name of File in CSIT dir containing the image name. - # - PKG_SUFFIX - Suffix of OS package file name, "rpm" or "deb." - - set -exuo pipefail - - os_id=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g') || { - die "Get OS release failed." - } - - case "${os_id}" in - "ubuntu"*) - IMAGE_VER_FILE="VPP_DEVICE_IMAGE_UBUNTU" - VPP_VER_FILE="VPP_STABLE_VER_UBUNTU_BIONIC" - PKG_SUFFIX="deb" - ;; - "centos"*) - IMAGE_VER_FILE="VPP_DEVICE_IMAGE_CENTOS" - VPP_VER_FILE="VPP_STABLE_VER_CENTOS" - PKG_SUFFIX="rpm" - ;; - *) - die "Unable to identify distro or os from ${OS}" - ;; - esac -} - - function select_topology () { # Variables read: @@ -917,6 +919,51 @@ function select_topology () { } +function select_vpp_device_tags () { + + # Variables read: + # - TEST_CODE - String affecting test selection, usually jenkins job name. + # - TEST_TAG_STRING - String selecting tags, from gerrit comment. + # Can be unset. + # Variables set: + # - TAGS - Array of processed tag boolean expressions. + + set -exuo pipefail + + case "${TEST_CODE}" in + # Select specific performance tests based on jenkins job type variable. + * ) + if [[ -z "${TEST_TAG_STRING-}" ]]; then + # If nothing is specified, we will run pre-selected tests by + # following tags. Items of array will be concatenated by OR + # in Robot Framework. + test_tag_array=() + else + # If trigger contains tags, split them into array. + test_tag_array=(${TEST_TAG_STRING//:/ }) + fi + ;; + esac + + TAGS=() + + # We will prefix with devicetest to prevent running other tests + # (e.g. Functional). + prefix="devicetestAND" + if [[ "${TEST_CODE}" == "vpp-"* ]]; then + # Automatic prefixing for VPP jobs to limit testing. + prefix="${prefix}" + fi + for tag in "${test_tag_array[@]}"; do + if [[ ${tag} == "!"* ]]; then + # Exclude tags are not prefixed. + TAGS+=("${tag}") + else + TAGS+=("${prefix}${tag}") + fi + done +} + function untrap_and_unreserve_testbed () { # Use this as a trap function to ensure testbed does not remain reserved.