aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/functions.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/functions.sh')
-rw-r--r--scripts/functions.sh226
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 "*******************************************************************"
}