[sheepdog] [RFC PATCH 1/4] tests/functional: add _requirement() to filter testcases
MORITA Kazutaka
morita.kazutaka at gmail.com
Mon Aug 12 11:30:20 CEST 2013
From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
We have several restrictions on which tests can be run. E.g. 011
cannot be run without a root privilege, 042 cannot be run with -md
option, some cluster tests cannot be passed with shepherd, etc.
This patch generalizes _need_to_be_root() to _requirement() and
enables us to control which tests should be run more flexibly.
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
tests/functional/011 | 2 +-
tests/functional/035 | 2 +-
tests/functional/042 | 2 +-
tests/functional/050 | 2 +-
tests/functional/054 | 2 +-
tests/functional/063 | 2 +-
tests/functional/064 | 2 +-
tests/functional/common.rc | 39 ++++++++++++++++++++++++++++++++-------
8 files changed, 39 insertions(+), 14 deletions(-)
diff --git a/tests/functional/011 b/tests/functional/011
index c2dcffd..0850b5d 100755
--- a/tests/functional/011
+++ b/tests/functional/011
@@ -4,7 +4,7 @@
. ./common
-_need_to_be_root
+_requirement root
_make_device 0 $((2 * 1024 ** 3))
_make_device 1 $((4 * 1024 ** 3))
diff --git a/tests/functional/035 b/tests/functional/035
index dda4dd4..b1bffab 100755
--- a/tests/functional/035
+++ b/tests/functional/035
@@ -12,7 +12,7 @@ _uninit()
done
}
-_need_to_be_root
+_requirement root
for i in `seq 0 5`; do
_start_sheep $i
diff --git a/tests/functional/042 b/tests/functional/042
index df706a1..621f4c0 100755
--- a/tests/functional/042
+++ b/tests/functional/042
@@ -4,7 +4,7 @@
. ./common
-_need_to_be_root
+_requirement root
_make_device 0 $((1024 ** 3))
_make_device 1 $((1024 ** 3))
diff --git a/tests/functional/050 b/tests/functional/050
index a44fb8a..e479e02 100755
--- a/tests/functional/050
+++ b/tests/functional/050
@@ -12,7 +12,7 @@ _uninit()
iptables -D INPUT -p tcp --dport 8001 -j DROP
}
-_need_to_be_root
+_requirement root
for i in `seq 0 2`; do
_start_sheep $i "-i host=127.0.0.1,port=$((8000+$i))"
diff --git a/tests/functional/054 b/tests/functional/054
index 5ecbc41..f8368b3 100755
--- a/tests/functional/054
+++ b/tests/functional/054
@@ -3,7 +3,7 @@
# Test stale objects purging with different disk size.
. ./common
-_need_to_be_root
+_requirement root
_make_device 0 $((1024 ** 3))
_make_device 1 $((2 * 1024 ** 3))
diff --git a/tests/functional/063 b/tests/functional/063
index b43f374..52819a4 100755
--- a/tests/functional/063
+++ b/tests/functional/063
@@ -3,7 +3,7 @@
# Test reweight
. ./common
-_need_to_be_root
+_requirement root
_make_device 0 $((100 * 1024 ** 2))
_make_device 1 $((100 * 1024 ** 2))
diff --git a/tests/functional/064 b/tests/functional/064
index 77304fe..654be3a 100755
--- a/tests/functional/064
+++ b/tests/functional/064
@@ -3,7 +3,7 @@
# Test node failure while reweighting
. ./common
-_need_to_be_root
+_requirement root
_make_device 0 $((200 * 1024 ** 2)) # 200 MB
_make_device 1 $((200 * 1024 ** 2)) # 200 MB
diff --git a/tests/functional/common.rc b/tests/functional/common.rc
index 83fb195..f4a123a 100644
--- a/tests/functional/common.rc
+++ b/tests/functional/common.rc
@@ -30,15 +30,40 @@ fi
# make sure we have a standard umask
umask 022
-# check if run as root
-#
-_need_to_be_root()
+_check_root()
{
local id=`id | $SED_PROG -e 's/(.*//' -e 's/.*=//'`
- if [ "$id" -ne 0 ]
- then
- _notrun "you need to be root (not uid=$id) to run this test"
- fi
+ [ "$id" -eq 0 ]
+}
+
+_requirement()
+{
+ local arg
+ local required
+ local feature
+
+ for arg in $*; do
+ if [ $(echo $arg | cut -c 1-4) = "not_" ]; then
+ required=false
+ feature=$(echo $arg | cut -c 5-)
+ else
+ required=true
+ feature=$arg
+ fi
+
+ local check=_check_$feature
+
+ type $check 1>/dev/null 2>/dev/null
+ if [ $? != 0 ]; then
+ _die $check is not defined
+ fi
+
+ if $check && ! $required; then
+ _notrun "cannot run this test with $feature"
+ elif ! $check && $required; then
+ _notrun "$feature is required to run this test"
+ fi
+ done
}
# To remove directory successfully always, we have to rename it first
--
1.7.9.5
More information about the sheepdog
mailing list