aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/functions.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/functions.sh')
-rw-r--r--scripts/functions.sh154
1 files changed, 154 insertions, 0 deletions
diff --git a/scripts/functions.sh b/scripts/functions.sh
new file mode 100644
index 000000000..66235cf5f
--- /dev/null
+++ b/scripts/functions.sh
@@ -0,0 +1,154 @@
+# 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:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#!/bin/bash
+set -euxo pipefail
+
+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}
+
+# Figure out what system we are running on
+if [ -f /etc/os-release ]; then
+ . /etc/os-release
+else
+ echo "ERROR: System configuration not recognized. Build failed"
+ exit 1
+fi
+
+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() {
+ curl -OL ${COLLECTD_SOURCE}
+ tar -xf collectd-5.12.0.tar.bz2
+
+ pushd collectd-5.12.0
+ ./configure && make -j$(nproc)
+ popd
+
+ export COLLECTD_HOME=${PWD}/collectd-5.12.0/src
+}
+
+# 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}
+}
+
+# Install dependencies
+function install_deps() {
+ make -C ${SCRIPT_PATH}/.. deps
+}
+
+function setup() {
+ echo DISTRIBUTION: ${PRETTY_NAME}
+ # export variables depending on the platform we are running
+ call_once install_deps
+ call_once install_collectd_headers
+}
+
+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
+}
+
+# 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
+}
+
+function is_selinuxenabled() {
+ sudo selinuxenabled && return 1 || return 0
+}
+
+# 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
+
+ BUILD_SOFTWARE=${build_sw} DOCKERFILE=${dockerfile_path} TEST_PRIVILEGED=${privileged} bash ./run-functional.sh
+ popd
+
+ echo "*******************************************************************"
+ echo "********** FUNCTIONAL TESTS COMPLETED SUCCESSFULLY ***************"
+ echo "*******************************************************************"
+}