[Ocfs2-test-devel] [PATCH 08/11] Ocfs2-test: Add single-node testing launcher for reflink tests.

Tristan Ye tristan.ye at oracle.com
Thu May 7 20:14:00 PDT 2009


This script will perform a thorough test on refcount for ocfs2 by
tunning corresponding single-node testing binary variously. It also
was responsible for the testing automation to do logging, env setting etc.

Following testcases will be involved.

        1. Basic func test

        2. Random test

        3. Mmap test

        4. Concurrent test

        5. Boundary test

        6. Stress test

        7. Xattr combination test

Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
---
 programs/reflink_tests/reflink_test_run.sh |  505 ++++++++++++++++++++++++++++
 1 files changed, 505 insertions(+), 0 deletions(-)
 create mode 100755 programs/reflink_tests/reflink_test_run.sh

diff --git a/programs/reflink_tests/reflink_test_run.sh b/programs/reflink_tests/reflink_test_run.sh
new file mode 100755
index 0000000..fb24442
--- /dev/null
+++ b/programs/reflink_tests/reflink_test_run.sh
@@ -0,0 +1,505 @@
+#!/bin/bash
+#
+# vim: noexpandtab sw=8 ts=8 sts=0:
+#
+# reflink_test_run.sh
+#
+# description:  This script will perform a thorough single-node test on
+#		refcount for ocfs2. Following testcases will be involved.
+#
+#		1. Basic func test
+#		
+#		2. Random test
+#		
+#		3. Mmap test
+#		
+#		4. Concurrent test
+#		
+#		5. Boundary test
+#		
+#		6. Stress test
+#		
+#		7. Xattr combination test
+#
+# Author:       Tristan Ye,     tristan.ye at oracle.com
+#
+# History:      18 Mar 2009
+#
+#
+# Copyright (C) 2009 Oracle.  All rights reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public
+# License, version 2,  as published by the Free Software Foundation.
+#
+# his 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.
+#
+
+################################################################################
+# Global Variables
+################################################################################
+. ./o2tf.sh
+
+BLOCKSIZE=
+CLUSTERSIZE=
+SLOTS=4
+JOURNALSIZE=0
+BLOCKS=0
+LABELNAME=ocfs2-refcount-tests
+DEVICE=
+WORK_PLACE_DIRENT=ocfs2-refcount-tests
+WORK_PLACE=
+
+REFLINK_TEST_BIN="${BINDIR}/reflink_test"
+FILL_HOLES_BIN="${BINDIR}/fill_holes"
+VERIFY_HOLES_BIN="${BINDIR}/verify_holes"
+
+DEFAULT_LOG_DIR=${O2TDIR}/log
+LOG_DIR=
+RUN_LOG_FILE=
+LOG_FILE=
+
+TEST_NO=0
+TEST_PASS=0
+
+set -o pipefail
+
+################################################################################
+# Utility Functions
+################################################################################
+function f_usage()
+{
+        echo "usage: `basename ${0}` [-o logdir] <-d device> <mountpoint path>"
+        echo "       -o output directory for the logs"
+        echo "       -d block device name used for ocfs2 volume"
+        echo "       <mountpoint path> specify the testing mounting point."
+        exit 1;
+
+}
+
+function f_getoptions()
+{
+        if [ $# -eq 0 ]; then
+                f_usage;
+                exit 1
+         fi
+
+         while getopts "o:hd:" options; do
+                case $options in
+                o ) LOG_DIR="$OPTARG";;
+                d ) DEVICE="$OPTARG";;
+                h ) f_usage;;
+                * ) f_usage;;
+                esac
+        done
+        shift $(($OPTIND -1))
+        MOUNT_POINT=${1}
+}
+
+function f_check()
+{
+        f_getoptions $*
+
+        if [ -z "${MOUNT_POINT}" ];then
+                f_usage
+        else
+                if [ ! -d ${MOUNT_POINT} ]; then
+                        echo "Mount point ${MOUNT_POINT} does not exist."
+                        exit 1
+                else
+                        if [ "`dirname ${MOUNT_POINT}`" = "/" ]; then
+                                MOUNT_POINT="`dirname ${MOUNT_POINT}``basename \
+					     ${MOUNT_POINT}`"
+                        else
+                                MOUNT_POINT="`dirname ${MOUNT_POINT}`/`basename \
+					     ${MOUNT_POINT}`"
+                        fi
+                fi
+        fi
+
+        LOG_DIR=${LOG_DIR:-$DEFAULT_LOG}
+	${MKDIR_BIN} -p ${LOG_DIR} || exit 1
+
+        RUN_LOG_FILE="`dirname ${LOG_DIR}`/`basename ${LOG_DIR}`/`date +%F-%H-\
+%M-%S`-reflink-tests-run.log"
+        LOG_FILE="`dirname ${LOG_DIR}`/`basename ${LOG_DIR}`/`date +%F-%H-\
+%M-%S`-reflink-tests.log"
+        VERIFY_HOLES_LOG_FILE="`dirname ${LOG_DIR}`/`basename \
+${LOG_DIR}`/verify-holes.log"
+
+}
+
+function f_reflink_bash_utils_test()
+{
+	#${1} specify the reflink_nums
+	#${2} specfiy the reflink_size
+	local ref_counts=${1}
+	local ref_size=${2}
+	local bs=
+	local count=
+	local skip=
+	local target_pfx=${WORK_PLACE}/copy
+	local target=
+	local i=
+
+	local orig=${WORK_PLACE}/orig
+	local HUNKSIZE=1048576
+
+	for bs in ${BLOCKSIZE} ${CLUSTERSIZE} ${HUNKSIZE};do
+		count=$((${ref_size}/${bs}))
+		dd if=/dev/zero of=${orig} bs=${bs} count=${count}
+		if [ "$?" -ne "0" ]; then
+			return -1
+		fi
+
+		for i in $(seq ${ref_counts});do
+			target=${target_pfx}-${i}
+			reflink ${orig} ${target}
+		done
+
+		for i in $(seq ${ref_counts});do
+			target=${target_pfx}-${i}
+			skip=$((${RANDOM}%${count}))
+			dd if=/dev/random of=${target} bs=${bs} count=1 \
+			   seek=${skip}
+
+			if [ "$?" -ne "0" ]; then
+				return -1
+			fi
+		done
+
+		${RM_BIN} -rf ${target_pfx}*
+		${RM_BIN} -rf ${orig}
+	done
+	
+	return 0
+}
+
+function f_fill_and_verify_holes()
+{
+
+	#${1} specify the reflink_nums
+	#${2} specfiy the reflink_size
+	#${3} specify the hole_nums
+	local ref_counts=${1}
+	local ref_size=${2}
+	local hole_nums=${3}
+	local orig=${WORK_PLACE}/orig
+	local target_pfx=${WORK_PLACE}/copy
+	local target=
+	local i=
+
+	f_LogMsg ${LOG_FILE} "Fill Holes, CMD:${FILL_HOLES_BIN} -f -o \
+${VERIFY_HOLES_LOG_FILE} -i ${hole_nums} ${orig} ${ref_size}"
+
+	${FILL_HOLES_BIN} -f -o ${VERIFY_HOLES_LOG_FILE} -i ${hole_nums} \
+${orig} ${ref_size}
+
+	if [ "$?" -ne "0" ];then
+		return -1
+	fi
+
+	f_LogMsg ${LOG_FILE} "Reflink inode with hole to ${ref_counts} reflinks"
+
+	for i in $(seq ${ref_counts});do
+
+		target=${target_pfx}-${i}
+		reflink ${orig} ${target}
+
+	done
+
+	sync
+
+	f_LogMsg ${LOG_FILE} "Veirfy holes for ${ref_counts} reflinks"
+	for i in $(seq 1 ${ref_counts});do
+
+		target=${target_pfx}-${i}
+
+		f_LogMsg ${LOG_FILE} "Veirfy holes for reflink[${i}]:${target}"
+		${VERIFY_HOLES_BIN} ${VERIFY_HOLES_LOG_FILE} ${target}
+		if [ "$?" -ne "0" ];then
+			return -1
+		fi
+        done
+
+	f_LogMsg ${LOG_FILE} "Veirfy holes for original file"
+	${VERIFY_HOLES_BIN} ${VERIFY_HOLES_LOG_FILE} ${orig} || return -1
+
+	return 0
+}
+
+function f_verify_reflinks_holes()
+{
+	#${1} specify the reflink_nums
+
+	local ref_counts=${1}
+	local orig=${WORK_PLACE}/original_xattr_holes_refile
+	local target=
+	local i=
+	local logfile=
+
+	f_LogMsg ${LOG_FILE} "Veirfy holes for ${ref_counts} reflinked files"
+	for i in $(seq 0 ${ref_counts});do
+		if [ "${i}" -eq "${ref_counts}" ];then
+			target=${orig}
+			logfile=${VERIFY_HOLES_LOG_FILE}
+			
+		else
+			target=${orig}r${i}
+			logfile=${VERIFY_HOLES_LOG_FILE}r${i}
+		fi
+
+		f_LogMsg ${LOG_FILE} "Veirfy holes for reflink[${i}]:${target} \
+from logfile ${logfile}"
+
+		${VERIFY_HOLES_BIN} ${logfile} ${target}
+
+		if [ "$?" -ne "0" ];then
+			return -1
+		fi
+	done
+}
+
+function f_runtest()
+{
+	f_LogRunMsg ${RUN_LOG_FILE} "[*] Mkfs device ${DEVICE}:"
+	f_mkfs ${LOG_FILE} ${BLOCKSIZE} ${CLUSTERSIZE} ${LABELNAME} ${SLOTS} \
+${DEVICE} "refcount,xattr" ${JOURNALSIZE} ${BLOCKS}
+	RET=$?
+	f_echo_status ${RET}| tee -a ${RUN_LOG_FILE}
+	f_exit_or_not ${RET}
+	
+	f_LogRunMsg ${RUN_LOG_FILE} "[*] Mount ${DEVICE} to ${MOUNT_POINT}:"
+	f_mount ${LOG_FILE} ${DEVICE} ${MOUNT_POINT} ocfs2
+	RET=$?
+	f_echo_status ${RET}| tee -a ${RUN_LOG_FILE}
+	f_exit_or_not ${RET}
+
+	WORK_PLACE=${MOUNT_POINT}/${WORK_PLACE_DIRENT}
+	${MKDIR_BIN} -p ${WORK_PLACE}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Basic Fucntional Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] Basic Fucntional Test, CMD:${SUDO} \
+${REFLINK_TEST_BIN} -i 1 -n 1000 -l 104857600 -d ${DEVICE} -w ${WORK_PLACE} -f"
+	${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 100 -l 10485760 -d ${DEVICE} -w \
+${WORK_PLACE} -f >>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Random Refcount Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] Random Refcount Test, CMD:${SUDO} \
+${REFLINK_TEST_BIN} -i 1 -n 1000 -l 104857600 -d ${DEVICE} -w ${WORK_PLACE} -f -r"
+	${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 100 -l 10485760 -d ${DEVICE} -w \
+${WORK_PLACE} -r>>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Mmap Refcount Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] Mmap Refcount Test, CMD:${SUDO} \
+${REFLINK_TEST_BIN} -i 1 -n 1000 -l 104857600 -d ${DEVICE} -w ${WORK_PLACE} -m"
+	${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 100 -l 10485760 -d ${DEVICE} -w \
+${WORK_PLACE} -m>>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Boundary Refcount Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] Boundary Refcount Test, CMD:${SUDO} \
+${REFLINK_TEST_BIN} -i 1 -d ${DEVICE} -w ${WORK_PLACE} -b"
+	${SUDO} ${REFLINK_TEST_BIN} -i 1 -d ${DEVICE} -w \
+${WORK_PLACE} -b>>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Concurrent Refcount Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] Concurrent Refcount Test, \
+CMD:${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 1000 -l 104857600 -d ${DEVICE} \
+-w ${WORK_PLACE} -c 100"
+	${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 100 -l 10485760 -d ${DEVICE} -w \
+${WORK_PLACE} -c 40 >>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Bash & Tools Utility Test:"
+	f_reflink_bash_utils_test 100 104857600 >>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Reflinks With Holes Test:"
+	f_fill_and_verify_holes  10 10485760 1000 >>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+		
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Xattr Refcount Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] Xattr Refcount Test, CMD:${SUDO} \
+${REFLINK_TEST_BIN} -i 10 -n 10000 -l 10485760 -d ${DEVICE} -w ${WORK_PLACE} \
+-x 10000"
+	${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 100 -l 10485760 -d ${DEVICE} -w \
+${WORK_PLACE} -x 10000 >>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+        f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Stress Refcount Test:"
+        f_LogMsg ${LOG_FILE} "[${TEST_NO}] Stress Refcount Test, CMD:${SUDO} \
+${REFLINK_TEST_BIN} -i 10 -n 10000 -l 2048576000 -p 20000 -d ${DEVICE} -w \
+${WORK_PLACE} -s"
+        ${SUDO} ${REFLINK_TEST_BIN} -i 10 -n 10000 -l 2048576000 -p 20000 -d \
+${DEVICE} -w ${WORK_PLACE} -s >>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+        ((TEST_PASS++))
+        f_LogMsg ${LOG_FILE} "Cleanup working place"
+        ${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}   
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] OracleVM Simulation Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] OracleVM Simulation Test, CMD:\
+${SUDO} ${REFLINK_TEST_BIN} -i 10 -n 2 -l 20485760000 -p 1000 -d ${DEVICE} -w \
+${WORK_PLACE} -s"
+	${SUDO} ${REFLINK_TEST_BIN} -i 10 -n 2 -l 20485760000 -p 1000 -d \
+${DEVICE} -w ${WORK_PLACE} -s>>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	((TEST_NO++))
+	f_LogRunMsg ${RUN_LOG_FILE} "[${TEST_NO}] Destructive Refcount Test:"
+	f_LogMsg ${LOG_FILE} "[${TEST_NO}] Destructive Refcount Test, CMD:\
+${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 2 -l 10485760000 -p 1000 -d ${DEVICE} \
+-w ${WORK_PLACE} -s"
+	${SUDO} ${REFLINK_TEST_BIN} -i 1 -n 2 -l 10485760000 -p 1000 -d \
+${DEVICE} -w ${WORK_PLACE} -s>>${LOG_FILE} 2>&1
+        RET=$?
+        f_echo_status ${RET} | tee -a ${RUN_LOG_FILE}
+        f_exit_or_not ${RET}
+	((TEST_PASS++))
+	f_LogMsg ${LOG_FILE} "Cleanup working place"
+	${SUDO} ${CHMOD_BIN} -R 777 ${MOUNT_POINT}  >>${LOG_FILE} 2>&1
+        ${RM_BIN} -rf ${WORK_PLACE}/* >>${LOG_FILE} 2>&1
+        RET=$?
+        f_exit_or_not ${RET}
+
+	f_LogRunMsg ${RUN_LOG_FILE} "[*] Umount device ${DEVICE} from ${MOUNT_POINT}:"
+	f_umount ${LOG_FILE} ${MOUNT_POINT}
+	RET=$?
+	f_echo_status ${RET}| tee -a ${RUN_LOG_FILE}
+	f_exit_or_not ${RET}
+}
+
+function f_cleanup()
+{
+        :
+}
+
+################################################################################
+# Main Entry
+################################################################################
+
+#redfine the int signal hander
+trap 'echo -ne "\n\n">>${RUN_LOG_FILE};echo  "Interrupted by Ctrl+C,Cleanuping\
+... "|tee -a ${RUN_LOG_FILE}; f_cleanup;exit 1' SIGINT
+
+f_check $*
+
+START_TIME=${SECONDS}
+f_LogRunMsg ${RUN_LOG_FILE} "=====================Reflink tests start:  `date`\
+=====================\n"
+f_LogMsg ${LOG_FILE} "=====================Reflink tests start:  `date`\
+====================="
+
+for BLOCKSIZE in 512 1024 4096;do
+	for CLUSTERSIZE in 4096 32768 1048576;do
+		f_LogRunMsg ${RUN_LOG_FILE} "<- Running test with ${BLOCKSIZE} \
+bs and ${CLUSTERSIZE} cs ->\n"
+		f_LogMsg ${LOG_FILE} "<- Running test with ${BLOCKSIZE} bs \
+and ${CLUSTERSIZE} cs ->"
+		f_runtest
+	done
+done
+
+END_TIME=${SECONDS}
+f_LogRunMsg ${RUN_LOG_FILE} "=====================Reflink tests end: `date`\
+=====================\n"
+f_LogMsg ${LOG_FILE} "=====================Reflink dirs tests end: `date`\
+====================="
+
+f_LogRunMsg ${RUN_LOG_FILE} "Time elapsed(s): $((${END_TIME}-${START_TIME}))\n"
+f_LogRunMsg ${RUN_LOG_FILE} "Tests total: ${TEST_NO}\n"
+f_LogRunMsg ${RUN_LOG_FILE} "Tests passed: ${TEST_PASS}\n"
-- 
1.5.5




More information about the Ocfs2-test-devel mailing list