summaryrefslogtreecommitdiffstats
path: root/contrib/ci/misc.sh
diff options
context:
space:
mode:
authorNikolai Kondrashov <Nikolai.Kondrashov@redhat.com>2014-03-25 12:01:00 +0200
committerJakub Hrozek <jhrozek@redhat.com>2014-09-02 10:43:21 +0200
commit3ce85a5f5264e7118beb6524e120fd8b53a13da4 (patch)
treeec46ff937a47518ff9ed0f4dd67ebf2157fbc4bf /contrib/ci/misc.sh
parent6b5044001e4b0a0caf971a2cf5f27674e0d270f4 (diff)
downloadsssd-3ce85a5f5264e7118beb6524e120fd8b53a13da4.tar.gz
sssd-3ce85a5f5264e7118beb6524e120fd8b53a13da4.tar.xz
sssd-3ce85a5f5264e7118beb6524e120fd8b53a13da4.zip
Add basic support for CI test execution
Add basic support for executing continuous integration (CI) tests on RHEL6, RHEL7, Fedora 20, Fedora Rawhide and Debian Testing. This adds two front-end scripts which can be executed either locally by developers, or on a CI server: contrib/ci/run and contrib/ci/clean. The first one will run the tests and the second will wipe out the artifacts. See contrib/ci/README.md for further details. Reviewed-by: Michal Židek <mzidek@redhat.com> Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
Diffstat (limited to 'contrib/ci/misc.sh')
-rw-r--r--contrib/ci/misc.sh116
1 files changed, 116 insertions, 0 deletions
diff --git a/contrib/ci/misc.sh b/contrib/ci/misc.sh
new file mode 100644
index 000000000..9af848c76
--- /dev/null
+++ b/contrib/ci/misc.sh
@@ -0,0 +1,116 @@
+#
+# Miscellaneous routines.
+#
+# Copyright (C) 2014 Red Hat
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if [ -z ${_MISC_SH+set} ]; then
+declare -r _MISC_SH=
+
+# Remove files and directories recursively, forcing write permissions on
+# directories.
+# Args: path...
+function rm_rf_ro()
+{
+ chmod -Rf u+w -- "$@" || true
+ rm -Rf -- "$@"
+}
+
+# Run "scan-build" with output to a single specified directory, instead of
+# a subdirectory.
+# Args: dir [scan_build_arg...]
+function scan_build_single()
+{
+ declare -r dir="$1"; shift
+ declare entry
+ declare subdir
+ declare status
+
+ set +o errexit
+ scan-build -o "$dir" "$@"
+ status="$?"
+ set -o errexit
+
+ for entry in "$dir/"*; do
+ if [ -n "${subdir+set}" ] || ! [ -d "$entry" ]; then
+ echo 'Unexpected entries in scan-build output directory' >&2
+ exit 1
+ fi
+ subdir="$entry"
+ done
+
+ mv "$subdir/"* "$dir"
+ rmdir "$subdir"
+ return "$status"
+}
+
+# Check if a scan-build result directory has any non-empty .plist files.
+# Args: dir
+function scan_check()
+{
+ declare -r dir="$1"
+ declare f
+ for f in "$dir"/*.plist; do
+ if [ "`xqilla -i \"\$f\" /dev/stdin \
+ <<<'count(/plist/dict/array[count(*) > 0])'`" != 0 ]; then
+ return 1
+ fi
+ done
+ return 0
+}
+
+# Extract line and function coverage percentage from a "genhtml" or "lcov
+# --summary" output.
+# Input: "genhtml" or "lcov --summary" output
+# Output: lines funcs
+function lcov_summary()
+{
+ sed -ne 's/^ *\(lines\|functions\)\.*: \([0-9]\+\).*$/ \2/p' |
+ tr -d '\n'
+ echo
+}
+
+# Check if a "genhtml" or "lcov --summary" output has a minimum coverage
+# percentage of lines and functions.
+# Input: "genhtml" or "lcov --summary" output
+# Args: min_lines min_funcs
+function lcov_check()
+{
+ declare -r min_lines="$1"; shift
+ declare -r min_funcs="$1"; shift
+ declare lines
+ declare funcs
+
+ read -r lines funcs < <(lcov_summary)
+ ((lines >= min_lines && funcs >= min_funcs)) && return 0 || return 1
+}
+
+# Check if the current user belongs to a group.
+# Args: group_name
+function memberof()
+{
+ declare -r group_name="$1"
+ declare group_id
+ declare id
+ group_id=`getent group "$group_name" | cut -d: -f3` || return 1
+ for id in "${GROUPS[@]}"; do
+ if [ "$id" == "$group_id" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+fi # _MISC_SH