From 5aff0e3c6e9844eec7901ad12ef104215a1f7496 Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv@altlinux.org>
Date: Wed, 7 Dec 2016 18:05:28 +0000
Subject: [PATCH] tests: introduce require_min_kernel_version_or_skip function

* tests/init.sh (kernel_version_code,
require_min_kernel_version_or_skip): New functions.
* tests/threads-execve.test: Use require_min_kernel_version_or_skip.
---
 tests/init.sh             | 26 ++++++++++++++++++++++++++
 tests/threads-execve.test |  6 +-----
 2 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/tests/init.sh b/tests/init.sh
index 03b7692e..3fe5a886 100644
--- a/tests/init.sh
+++ b/tests/init.sh
@@ -216,6 +216,32 @@ run_strace_match_diff()
 	rm -f "$EXP"
 }
 
+# Print kernel version code.
+# usage: kernel_version_code $(uname -r)
+kernel_version_code()
+{
+	(
+		set -f
+		IFS=.
+		set -- $1
+		v1="${1%%[!0-9]*}" && [ -n "$v1" ] || v1=0
+		v2="${2%%[!0-9]*}" && [ -n "$v2" ] || v2=0
+		v3="${3%%[!0-9]*}" && [ -n "$v3" ] || v3=0
+		echo "$(($v1 * 65536 + $v2 * 256 + $v3))"
+	)
+}
+
+# Usage: require_min_kernel_version_or_skip 3.0
+require_min_kernel_version_or_skip()
+{
+	local uname_r
+	uname_r="$(uname -r)"
+
+	[ "$(kernel_version_code "$uname_r")" -ge \
+	  "$(kernel_version_code "$1")" ] ||
+		skip_ "the kernel release $uname_r is not $1 or newer"
+}
+
 check_prog cat
 check_prog rm
 
diff --git a/tests/threads-execve.test b/tests/threads-execve.test
index 36381e7c..4a771467 100755
--- a/tests/threads-execve.test
+++ b/tests/threads-execve.test
@@ -31,11 +31,7 @@
 
 # Check that PTRACE_EVENT_EXEC support in kernel is good enough.
 # The kernel before commit v3.1-rc1~308^2~7 reported 0 instead of old pid.
-uname_r="$(uname -r)"
-case "$uname_r" in
-	3.[2-9]*|3.1[0-9]*|[4-9].*|[123][0-9]*) ;;
-	*) skip_ "the kernel release $uname_r is not 3.1 or newer" ;;
-esac
+require_min_kernel_version_or_skip 3.1
 
 check_prog diff
 run_prog > /dev/null
-- 
2.40.0