diff options
Diffstat (limited to 'scripts/functions.sh')
-rw-r--r-- | scripts/functions.sh | 226 |
1 files changed, 110 insertions, 116 deletions
diff --git a/scripts/functions.sh b/scripts/functions.sh index 7258800b2..66235cf5f 100644 --- a/scripts/functions.sh +++ b/scripts/functions.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -14,147 +14,141 @@ #!/bin/bash set -euxo pipefail -APT_PATH=`which apt-get` || true +APT_PATH=$(which apt-get) || true apt_get=${APT_PATH:-"/usr/local/bin/apt-get"} # Cmake executable CMAKE_INSTALL_DIR="/opt/cmake" export PATH=:${CMAKE_INSTALL_DIR}/bin:${PATH} -PACKAGECLOUD_RELEASE_REPO_DEB="https://packagecloud.io/install/repositories/fdio/release/script.deb.sh" -PACKAGECLOUD_RELEASE_REPO_RPM="https://packagecloud.io/install/repositories/fdio/release/script.rpm.sh" - -VPP_GIT_REPO="https://github.com/FDio/vpp" -VPP_BRANCH="stable/2005" - - # Figure out what system we are running on +# Figure out what system we are running on if [ -f /etc/os-release ]; then - . /etc/os-release + . /etc/os-release else - echo "ERROR: System configuration not recognized. Build failed" - exit 1 + echo "ERROR: System configuration not recognized. Build failed" + exit 1 fi -VERSION_REGEX="s/v([0-9]+).([0-9]+)(.*)?-([0-9]+)-(g[0-9a-f]+)/\1.\2-release/g" -VPP_VERSION_DEB=$(git describe --long --match "v*" | sed -E ${VERSION_REGEX}) -VPP_VERSION_RPM="${VPP_VERSION_DEB}.x86_64" - -DEPS_UBUNTU=("build-essential" - "doxygen" - "curl" - "libparc-dev" - "libmemif-dev" - "libmemif" - "libasio-dev" - "libconfig-dev" - "libcurl4-openssl-dev" - "collectd-dev" - "libevent-dev" - "libssl-dev" - "ninja-build" - "vpp=${VPP_VERSION_DEB}" - "vpp-dev=${VPP_VERSION_DEB}" - "libvppinfra=${VPP_VERSION_DEB}" - "libvppinfra-dev=${VPP_VERSION_DEB}" - "vpp-plugin-core=${VPP_VERSION_DEB}" - "python3-ply") - -# BUILD_TOOLS_GROUP_CENTOS="'Development Tools'" -DEPS_CENTOS=("vpp-devel-${VPP_VERSION_RPM}" - "vpp-lib-${VPP_VERSION_RPM}" - "libparc-devel" - "curl" - "libmemif-devel" - "ninja-build" - "libmemif" - "libcurl-devel" - "asio-devel" - "libconfig-devel" - "centos-release-scl" - "bzip2" - "devtoolset-7" - "rpm-build") - -LATEST_EPEL_REPO="http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm" -COLLECTD_SOURCE="https://storage.googleapis.com/collectd-tarballs/collectd-5.9.2.tar.bz2" +COLLECTD_SOURCE="https://github.com/collectd/collectd/releases/download/collectd-5.12.0/collectd-5.12.0.tar.bz2" + +declare -a TEST_COMPONENTS=( + "libtransport" + "lib" + "hicn_light" + "hicnplugin" + "libhicnctrl" +) function install_collectd_headers() { - DISTRIB_ID=${ID} - if [ "${DISTRIB_ID}" == "centos" ]; then - curl -OL ${COLLECTD_SOURCE} - tar -xf collectd-5.9.2.tar.bz2 + curl -OL ${COLLECTD_SOURCE} + tar -xf collectd-5.12.0.tar.bz2 - pushd collectd-5.9.2 - ./configure && make -j$(nproc) - popd + pushd collectd-5.12.0 + ./configure && make -j$(nproc) + popd - export COLLECTD_HOME=${PWD}/collectd-5.9.2/src - fi + export COLLECTD_HOME=${PWD}/collectd-5.12.0/src } -function install_cmake() { - [[ $(uname --hardware-platform) = "x86_64" ]] || return 0 - CMAKE_INSTALL_SCRIPT_URL="https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4-Linux-x86_64.sh" - CMAKE_INSTALL_SCRIPT="/tmp/install_cmake.sh" - curl -L ${CMAKE_INSTALL_SCRIPT_URL} > ${CMAKE_INSTALL_SCRIPT} +# Call a function once +function call_once() { + # OP_NAME is the name of the function + OP_NAME=${1} + # If function was already called return + [[ -f /tmp/${OP_NAME} ]] && return 0 + # Otherwise call the function + ${@} + # And mark the function as called if no error occurred + echo ${OP_NAME} >/tmp/${OP_NAME} +} - sudo mkdir -p ${CMAKE_INSTALL_DIR} - sudo bash ${CMAKE_INSTALL_SCRIPT} --skip-license --prefix=${CMAKE_INSTALL_DIR} +# Install dependencies +function install_deps() { + make -C ${SCRIPT_PATH}/.. deps } -function setup_fdio_repo() { - DISTRIB_ID=${ID} +function setup() { + echo DISTRIBUTION: ${PRETTY_NAME} + # export variables depending on the platform we are running + call_once install_deps + call_once install_collectd_headers +} - if [ "${DISTRIB_ID}" == "ubuntu" ]; then - curl -s ${PACKAGECLOUD_RELEASE_REPO_DEB} | sudo bash - elif [ "${DISTRIB_ID}" == "centos" ]; then - curl -s ${PACKAGECLOUD_RELEASE_REPO_RPM} | sudo bash - curl -L ${LATEST_EPEL_REPO} > /tmp/epel-release-latest-7.noarch.rpm - rpm -ivh /tmp/epel-release-latest-7.noarch.rpm || true - else - echo "Distribution ${DISTRIB_ID} is not supported" - exit 1 - fi +function setup_extras() { + echo DISTRIBUTION: ${PRETTY_NAME} + # export variables depending on the platform we are running + + call_once install_deps + call_once install_collectd_headers } -# Install dependencies -function install_deps() { - DISTRIB_ID=${ID} - - if [ ${DISTRIB_ID} == "ubuntu" ]; then - echo ${DEPS_UBUNTU[@]} | xargs sudo ${apt_get} install -y --allow-unauthenticated --no-install-recommends - elif [ ${DISTRIB_ID} == "centos" ]; then - echo ${DEPS_CENTOS[@]} | xargs sudo yum install -y --nogpgcheck - ${CXX_COMPILER} --version - ${CC_COMPILER} --version - fi +# Download artifacts of this patchset from jenkins +function download_artifacts() { + if [[ -n ${GERRIT_HOST:-} ]] && + [[ -n ${GERRIT_CHANGE_NUMBER:-} ]] && + [[ -n ${GERRIT_PATCHSET_NUMBER:-} ]] && + [[ -n ${GERRIT_BRANCH:-} ]]; then + + PC_STREAM="${GERRIT_BRANCH#'stable/'}" + + # Retrieve the Jenkins URL of the build relative to this PATCHSET + JENKINS_URLS=$( + curl -s "https://${GERRIT_HOST}/r/changes/${GERRIT_CHANGE_NUMBER}/detail" | + tail -n +2 | jq '.messages[].message?' | + grep -E "Patch Set ${GERRIT_PATCHSET_NUMBER}:.*hicn-verify-build.*build_success-${PC_STREAM}-ubuntu2004-$(uname -m)" | + grep -Eo "https?://jenkins.fd.io/job/hicn-verify-build-${PC_STREAM}-ubuntu2004-$(uname -m)[^ ]+" + ) + + # Transform string to array and get last + JENKINS_URLS_ARRAY=(${JENKINS_URLS}) + ARTIFACTS_URL="${JENKINS_URLS_ARRAY[-1]}/artifact/packages/*zip*/packages.zip" + + # Download artifacts + curl -o "${SCRIPT_PATH}/../packages.zip" -L "${ARTIFACTS_URL}" + + # Unzip them + unzip "${SCRIPT_PATH}/../packages.zip" -d "${SCRIPT_PATH}/.." + + return 0 + fi + + # Fall back to image re-build if artifacts cannot be downloaded + echo "GERRIT_* environment is not set. Image will be rebuilt from scratch" >&2 + return 1 } -# Call a function once -function call_once() { - # OP_NAME is the name of the function - OP_NAME=${1} - # If function was already called return - [[ -f /tmp/${OP_NAME} ]] && return 0 - # Otherwise call the function - ${@} - # And mark the function as called if no error occurred - echo ${OP_NAME} > /tmp/${OP_NAME} +function is_selinuxenabled() { + sudo selinuxenabled && return 1 || return 0 } -function setup() { - echo DISTRIBUTION: ${PRETTY_NAME} - # export variables depending on the platform we are running - - if [ ${ID} == "centos" ]; then - # Compilers location - CXX_COMPILER="/opt/rh/devtoolset-7/root/usr/bin/c++" - CC_COMPILER="/opt/rh/devtoolset-7/root/usr/bin/cc" - export CC=${CC_COMPILER} CXX=${CXX_COMPILER} +# Run functional tests +function functional_test() { + echo "*******************************************************************" + echo "********************* STARTING FUNCTIONAL TESTS *******************" + echo "*******************************************************************" + + if download_artifacts; then + local build_sw=0 + local dockerfile_path="tests/Dockerfile.ci" + else + local build_sw=1 + local dockerfile_path="Dockerfile.dev" + fi + + # Run functional tests + pushd "${SCRIPT_PATH}/../tests" + # If selinux, let's run the tests with a privileged container to bypass + # the checks, which cost also in performance + if is_selinuxenabled; then + local privileged=false + else + local privileged=true fi - call_once setup_fdio_repo - call_once install_deps - call_once install_cmake - call_once install_collectd_headers + BUILD_SOFTWARE=${build_sw} DOCKERFILE=${dockerfile_path} TEST_PRIVILEGED=${privileged} bash ./run-functional.sh + popd + + echo "*******************************************************************" + echo "********** FUNCTIONAL TESTS COMPLETED SUCCESSFULLY ***************" + echo "*******************************************************************" } |