VPPD: Dot1Q
[csit.git] / resources / libraries / bash / function / common.sh
index 549688f..a03e904 100644 (file)
@@ -167,6 +167,21 @@ function check_download_dir () {
 }
 
 
+function check_prerequisites () {
+
+    # Fail if prerequisites are not met.
+    #
+    # Functions called:
+    # - installed - Check if application is installed/present in system.
+    # - die - Print to stderr and exit.
+
+    set -exuo pipefail
+
+    if ! installed sshpass; then
+        die "Please install sshpass before continue!"
+    fi
+}
+
 function cleanup_topo () {
 
     # Variables read:
@@ -286,6 +301,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.
@@ -495,6 +535,24 @@ function get_test_tag_string () {
 }
 
 
+function installed () {
+
+    # Check if the given utility is installed. Fail if not installed.
+    #
+    # Duplicate of common.sh function, as this file is also used standalone.
+    #
+    # Arguments:
+    # - ${1} - Utility to check.
+    # Returns:
+    # - 0 - If command is installed.
+    # - 1 - If command is not installed.
+
+    set -exuo pipefail
+
+    command -v "${1}"
+}
+
+
 function reserve_and_cleanup_testbed () {
 
     # Reserve physical testbed, perform cleanup, register trap to unreserve.
@@ -623,16 +681,13 @@ function run_pybot () {
 }
 
 
-function select_os () {
+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?
+    # Set variables affected by local CPU architecture and operating system.
     #
     # 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.
+    # - 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
@@ -653,7 +708,19 @@ function select_os () {
             PKG_SUFFIX="rpm"
             ;;
         *)
-            die "Unable to identify distro or os from ${OS}"
+            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
 }
@@ -702,6 +769,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
@@ -710,8 +778,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
@@ -762,11 +830,9 @@ function select_tags () {
             test_tag_array+=("!drv_avf")
             ;;
         *"3n-tsh"*)
+            # 3n-tsh only has x520 NICs which don't work with AVF
+            test_tag_array+=("!drv_avf")
             test_tag_array+=("!ipsechw")
-            test_tag_array+=("!memif")
-            test_tag_array+=("!srv6_proxy")
-            test_tag_array+=("!vhost")
-            test_tag_array+=("!vts")
             ;;
         *"3n-hsw"*)
             # TODO: Introduce NOIOMMU version of AVF tests.
@@ -867,7 +933,7 @@ function select_topology () {
             ;;
         "3n_tsh")
             TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_tsh*.yaml )
-            TOPOLOGIES_TAGS="3_node_*_link_topo"
+            TOPOLOGIES_TAGS="3_node_single_link_topo"
             ;;
         *)
             # No falling back to 3n_hsw default, that should have been done
@@ -893,7 +959,7 @@ function select_vpp_device_tags () {
     set -exuo pipefail
 
     case "${TEST_CODE}" in
-        # Select specific performance tests based on jenkins job type variable.
+        # Select specific device tests based on jenkins job type variable.
         * )
             if [[ -z "${TEST_TAG_STRING-}" ]]; then
                 # If nothing is specified, we will run pre-selected tests by
@@ -907,6 +973,20 @@ function select_vpp_device_tags () {
             ;;
     esac
 
+    # Blacklisting certain tags per topology.
+    #
+    # Reasons for blacklisting:
+    # - avf - AVF is not possible to run on enic driver of VirtualBox.
+    # - vhost - VirtualBox does not support nesting virtualization on Intel CPU.
+    case "${TEST_CODE}" in
+        *"1n-vbox"*)
+            test_tag_array+=("!avf")
+            test_tag_array+=("!vhost")
+            ;;
+        *)
+            ;;
+    esac
+
     TAGS=()
 
     # We will prefix with devicetest to prevent running other tests