perf: add TCP Nginx+LDPRELOAD suites
[csit.git] / resources / libraries / bash / function / nginx.sh
diff --git a/resources/libraries/bash/function/nginx.sh b/resources/libraries/bash/function/nginx.sh
new file mode 100755 (executable)
index 0000000..122af23
--- /dev/null
@@ -0,0 +1,136 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2021 Intel 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.
+
+set -exuo pipefail
+
+
+function gather_nginx () {
+
+    # Ensure stable NGINX archive is downloaded.
+    #
+    # Variables read:
+    # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+    # - NGINX_VER - Version number of Nginx.
+    set -exuo pipefail
+    pushd "${DOWNLOAD_DIR}" || die "Pushd failed."
+    nginx_repo="http://nginx.org/download/"
+    # Use downloaded packages with specific version
+    echo "Downloading NGINX package of specific version from repo ..."
+    # Downloading NGINX version based on what VPP is using. Currently
+    # it is not easy way to detect from VPP version automatically.
+    nginx_stable_ver="${NGINX_VER}".tar.gz
+
+    if [[ ! -f "${nginx_stable_ver}" ]]; then
+        wget -nv --no-check-certificate \
+        "${nginx_repo}/${nginx_stable_ver}"  || {
+            die "Failed to get NGINX package from: ${nginx_repo}."
+        }
+    fi
+    popd || die "Popd failed."
+}
+
+
+function common_dirs () {
+
+    # Set global variables, create some directories (without touching content).
+    # This function assumes running in remote testbed. It might override other
+    # functions if included from common.sh.
+
+    # Arguments:
+    # - ${1} - Version number of Nginx.
+    # Variables set:
+    # - BASH_FUNCTION_DIR - Path to existing directory this file is located in.
+    # - CSIT_DIR - Path to CSIT framework.
+    # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+    # - NGINX_DIR - Path to NGINX framework.
+    # - NGINX_VER - Version number of Nginx.
+    # Functions called:
+    # - die - Print to stderr and exit.
+
+    set -exuo pipefail
+    NGINX_VER="${1}"
+    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."
+    }
+    CSIT_DIR=$(readlink -e "/tmp/openvpp-testing") || {
+        die "Readlink failed."
+    }
+    DOWNLOAD_DIR=$(readlink -f "${CSIT_DIR}/download_dir") || {
+        die "Readlink failed."
+    }
+    mkdir -p "${CSIT_DIR}/${NGINX_VER}" || die "Mkdir failed."
+    NGINX_DIR=$(readlink -e "${CSIT_DIR}/${NGINX_VER}") || {
+        die "Readlink failed."
+    }
+}
+
+
+
+function nginx_compile () {
+
+    # Compile NGINX archive.
+    #
+    # Variables read:
+    # - NGINX_DIR - Path to NGINX framework.
+    # - CSIT_DIR - Path to CSIT framework.
+    # - NGINX_INS_PATH - Path to NGINX install path.
+    # Functions called:
+    # - die - Print to stderr and exit.
+
+    set -exuo pipefail
+    NGINX_INS_PATH="${DOWNLOAD_DIR}/${NGINX_VER}"
+    pushd "${NGINX_DIR}" || die "Pushd failed."
+
+    # Set installation prefix.
+    param="--prefix=${NGINX_INS_PATH} "
+    # Set nginx binary pathname.
+    param+="--sbin-path=${NGINX_INS_PATH}/sbin/nginx "
+    # Set nginx.conf pathname.
+    param+="--conf-path=${NGINX_INS_PATH}/conf/nginx.conf "
+    # Enable ngx_http_stub_status_module.
+    param+="--with-http_stub_status_module "
+    # Force PCRE library usage.
+    param+="--with-pcre "
+    # Enable ngx_http_realip_module.
+    param+="--with-http_realip_module "
+    params=(${param})
+    ./configure "${params[@]}" || die "Failed to configure NGINX!"
+    make -j 16;make install || die "Failed to compile NGINX!"
+}
+
+
+function nginx_extract () {
+
+    # Extract NGINX framework.
+    #
+    # Variables read:
+    # - NGINX_DIR - Path to NGINX framework.
+    # - CSIT_DIR - Path to CSIT framework.
+    # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+    # - NGINX_VER - Version number of Nginx.
+    # Functions called:
+    # - die - Print to stderr and exit.
+
+    set -exuo pipefail
+
+    pushd "${CSIT_DIR}" || die "Pushd failed."
+    tar -xvf ${DOWNLOAD_DIR}/${NGINX_VER}.tar.gz --strip=1 \
+          --directory "${NGINX_DIR}" || {
+          die "Failed to extract NGINX!"
+    }
+}