Skip to contentSkip to conversation

Create new library helper: tst_getconf

PATCH New Mylène Josserand 2 participants 4 messages Jul 13, 2018 – Jul 19, 2018

lore
Share & tools
lore
#0 lore raw

v3 cover Create new library helper: tst_getconf

Hello everyone,

This is a V3 of my series that handles the fact that "getconf" may not available in some embedded systems. It creates a new
helper: tst_getconf.

Changes since v2:
- use SPDX header
- remove optind's code (Cyril Hrubis's review)
- update the documentation (Cyril Hrubris's review)
- handle both PAGE_SIZE/PAGESIZE (Li Wang's review)
- update some part of the code such as new line (Li Wang's review)
- add the two Reviewed-by of Li Wang
Changes since v1:
- handle invalid arguments in tst_getconf
- correct arguments in mkswap01.sh and numa01.sh

If you have any review/remark, do not hesitate!
Thank you in advance,
Mylène

Mylène Josserand (2):
testcase: lib: Create tst_getconf to replace "getconf"
testcases: Replace "getconf" by "tst_getconf"

 doc/test-writing-guidelines.txt                    | 14 ++++++
 testcases/commands/du/du01.sh                      |  2 +-
 testcases/commands/mkswap/mkswap01.sh              |  2 +-
 .../controllers/cpuset/cpuset_regression_test.sh   |  2 +-
 .../memcg/control/memcg_control_test.sh            |  2 +-
 .../controllers/memcg/functional/memcg_lib.sh      |  4 +-
 testcases/kernel/numa/numa01.sh                    |  2 +-
 testcases/lib/.gitignore                           |  1 +
 testcases/lib/Makefile                             |  3 +-
 testcases/lib/test.sh                              |  4 +-
 testcases/lib/tst_getconf.c                        | 51 ++++++++++++++++++++++
 11 files changed, 77 insertions(+), 10 deletions(-)
 create mode 100644 testcases/lib/tst_getconf.c
Signature · 1 line
2.11.0
#1 lore raw

PATCH v3 1/2 testcase: lib: Create tst_getconf to replace "getconf"

In some system, "getconf" application may not be installed. Some tests are using it to retrieve some variables such as the page size (PAGESIZE).

Create a tst_getconf binary that use sysconf() function to retrieve these variables instead of relying on "getconf" application that may not be available.
Add also this new helper in the documentation.

Example:
pagesize=tst_getconf PAGESIZE

---
 doc/test-writing-guidelines.txt | 14 +++++++++++
 testcases/lib/.gitignore        |  1 +
 testcases/lib/Makefile          |  3 ++-
 testcases/lib/tst_getconf.c     | 51 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 68 insertions(+), 1 deletion(-)
 create mode 100644 testcases/lib/tst_getconf.c
doc/test-writing-guidelines.txt +14 -0
index 953cf6267..2de6ba99d 100644
@@ -1695,6 +1695,20 @@ passed directly to the script in '$1', '$2', ..., '$n'.
 2.3.4 Usefull library functions
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
+Retrieving configuration variables
+++++++++++++++++++++++++++++++++++
+
+You may need to retrieve configuration values such as PAGESIZE, there is
+'getconf' but as some system may not have it, you are advised to use
+'tst_getconf' instead. Note that it implements subset of 'getconf'
+system variables used by the testcases only.
+
+[source,sh]
+-------------------------------------------------------------------------------
+# retrieve PAGESIZE
+pagesize=`tst_getconf PAGESIZE`
+-------------------------------------------------------------------------------
+
 Sleeping for subsecond intervals
 ++++++++++++++++++++++++++++++++
 
testcases/lib/.gitignore +1 -0
index f36ed99fa..997940006 100644
@@ -7,3 +7,4 @@
 /tst_net_iface_prefix
 /tst_net_ip_prefix
 /tst_net_vars
+/tst_getconf
\ No newline at end of file
testcases/lib/Makefile +2 -1
index 398150ae0..77b7b2ef1 100644
@@ -27,6 +27,7 @@ include $(top_srcdir)/include/mk/testcases.mk
 INSTALL_TARGETS		:= *.sh
 
 MAKE_TARGETS		:= tst_sleep tst_random tst_checkpoint tst_rod tst_kvcmp\
-			   tst_device tst_net_iface_prefix tst_net_ip_prefix tst_net_vars
+			   tst_device tst_net_iface_prefix tst_net_ip_prefix tst_net_vars\
+			   tst_getconf
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/lib/tst_getconf.c new file +51 -0

51 lines not on this page · raw message

Signature · 1 line
2.11.0
#2 lore raw

PATCH v3 2/2 testcases: Replace "getconf" by "tst_getconf"

In reply to Mylène Josserand

Now that tst_getconf is available to use "sysconf()" function instead of relying on the application "getconf", let's convert all the tests to it.

---
 testcases/commands/du/du01.sh                                    | 2 +-
 testcases/commands/mkswap/mkswap01.sh                            | 2 +-
 testcases/kernel/controllers/cpuset/cpuset_regression_test.sh    | 2 +-
 testcases/kernel/controllers/memcg/control/memcg_control_test.sh | 2 +-
 testcases/kernel/controllers/memcg/functional/memcg_lib.sh       | 4 ++--
 testcases/kernel/numa/numa01.sh                                  | 2 +-
 testcases/lib/test.sh                                            | 4 ++--
 7 files changed, 9 insertions(+), 9 deletions(-)
testcases/commands/du/du01.sh +1 -1
index ed1df568f..c75068255 100755
@@ -73,7 +73,7 @@ du_test()
 }
 
 block_size=512
-page_size=$(getconf PAGESIZE)
+page_size=$(tst_getconf PAGESIZE)
 if [ "$page_size" -lt 1024 ]; then
 	tst_brk TBROK "Page size < 1024"
 fi
testcases/commands/mkswap/mkswap01.sh +1 -1
index 5ead4cdc5..341d48c08 100755
@@ -29,7 +29,7 @@ setup()
 {
 	UUID=`uuidgen`
 
-	PAGE_SIZE=`getconf PAGE_SIZE`
+	PAGE_SIZE=`tst_getconf PAGESIZE`
 
 	# Here get the size of the device and align it down to be the
 	# multiple of $PAGE_SIZE and use that as the size for testing.
testcases/kernel/controllers/cpuset/cpuset_regression_test.sh +1 -1
index 4a104a3ad..72a2a944c 100755
@@ -34,7 +34,7 @@ setup()
 		tst_brkm TCONF "Test must be run with kernel 3.18.0 or newer"
 	fi
 
-	local cpu_num=$(getconf _NPROCESSORS_ONLN)
+	local cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
 	if [ $cpu_num -lt 2 ]; then
 		tst_brkm TCONF "We need 2 cpus@least to have test"
 	fi
testcases/kernel/controllers/memcg/control/memcg_control_test.sh +1 -1
index 1d158729c..4d9f1bb5d 100644
@@ -41,7 +41,7 @@ export TST_COUNT=0
 export TMP=${TMP:-/tmp}
 cd $TMP
 
-PAGE_SIZE=$(getconf PAGESIZE)
+PAGE_SIZE=$(tst_getconf PAGESIZE)
 
 TOT_MEM_LIMIT=$PAGE_SIZE
 ACTIVE_MEM_LIMIT=$PAGE_SIZE
testcases/kernel/controllers/memcg/functional/memcg_lib.sh +2 -2
index 6a6af853b..cd16dc685 100755
@@ -29,9 +29,9 @@ if [ "x$(grep -w memory /proc/cgroups | cut -f4)" != "x1" ]; then
 	tst_brkm TCONF "Kernel does not support the memory resource controller"
 fi
 
-PAGESIZE=$(getconf PAGESIZE)
+PAGESIZE=$(tst_getconf PAGESIZE)
 if [ $? -ne 0 ]; then
-	tst_brkm TBROK "getconf PAGESIZE failed"
+	tst_brkm TBROK "tst_getconf PAGESIZE failed"
 fi
 
 HUGEPAGESIZE=$(awk '/Hugepagesize/ {print $2}' /proc/meminfo)
testcases/kernel/numa/numa01.sh +1 -1
index da2f80ddd..327fa2f1f 100755
@@ -75,7 +75,7 @@ check_for_support_numa()
 setup()
 {
 	export MB=$((1024*1024))
-	export PAGE_SIZE=$(getconf PAGE_SIZE)
+	export PAGE_SIZE=$(tst_getconf PAGESIZE)
 	export HPAGE_SIZE=$(awk '/Hugepagesize:/ {print $2}' /proc/meminfo)
 
 	total_nodes=0
testcases/lib/test.sh +2 -2
index bce9893a9..650712181 100644
@@ -421,9 +421,9 @@ fi
 if [ "$TST_NEEDS_CHECKPOINTS" = "1" ]; then
 	LTP_IPC_PATH="/dev/shm/ltp_${TCID}_$$"
 
-	LTP_IPC_SIZE=$(getconf PAGESIZE)
+	LTP_IPC_SIZE=$(tst_getconf PAGESIZE)
 	if [ $? -ne 0 ]; then
-		tst_brkm TBROK "getconf PAGESIZE failed"
+		tst_brkm TBROK "tst_getconf PAGESIZE failed"
 	fi
 
 	ROD_SILENT dd if=/dev/zero of="$LTP_IPC_PATH" bs="$LTP_IPC_SIZE" count=1
Signature · 1 line
2.11.0