diff --git a/test/tests/test_dfind/makefile b/test/tests/test_dfind/makefile new file mode 100644 index 000000000..934d7dcae --- /dev/null +++ b/test/tests/test_dfind/makefile @@ -0,0 +1,133 @@ +SHELL=/bin/bash +.sh: + cp $? `basename $? .sh` + chmod +x `basename $? .sh` +.ONESHELL: +#################### +# Perform testing of the dfind command +# Tests will be numbered and will report both +# the command name and the number as part of the +# diagnostic output. +#################### +PROJECTROOT=$(shell git rev-parse --git-dir)/.. + +#################### +# Define all of the hpc FIND command variables that come in from the +# command line and will eventually be passed to FIEMAP for parallel testing +# +# Just to make this (hopefully) a little less confusing +# +# dfind ........ the binary under test = DFIND_TEST_BIN +# mpirun|srun .. the command to execute the dfind on multiple machines +# DFIND_MPIRUN_BIN +# diff ......... the command to compare the difference in output between +# dfind and find (GNU find since we want to emulate +# the semantics +# DFIND_CMP_BIN +# ../test/src .. the directory relative to mpifileutils where source +# test data is place +# DFIND_SRC_DIR +# +# Using the parameters from test_dcp/test_fiemap.sh as a starting point. +# The test template uses a makefile to harness the tests. +# +# Two Tests implemented: +# +# 1) Test for the correct handling of hpc dfind vs. GNU find for having blanks in file names when passing files to --exec. +# 2) Test that illustrates that stderr redirection is incorrect for hpc dfind vs. GNU find. This will later be reported as a separate issue and the second test will be placed on a branch to repair that issue. +# ../test/dest . The directory relative to mpifileutils where test +# output is placed +# DFIND_DEST_DIR +# dfind.test.sh The shell script installed inside this script to perform +# the testing. These scripts are found in the same directory +# as the make file and are copied into the ../test/bin +# directory to provide an actual test script. +# DFIND_TMP_FILE +# ../test/bin .. the directory in which executable files (including this +# script and the generated script) are placed to avoid +# cluttering up the project ../install/bin +# DFIND_TESTING_BIN_DIR +#################### +#################### +# A final word about the .. relativity to the project parent directory. +# The build process for mpifileutils installs the following: +# ../install/bin +# ../install/include +# ../install/lib +# ../install/lib64 +# ../install/share +# +# In order to avoid cluttering the installation directory further, the +# testing src, dest and bin directories are placed in +# ../test +# +# To facilitate finding the root of the project from within the directory +# where you run the tests (the above was done to keep from cluttering this +# directory as well), we use the "git rev-parse --git-dir" to find the .git +# root directory: +#################### +DFIND_INSTALL_DIR?=$(PROJECTROOT)/../install/bin +DFIND_TEST_BIN?=$(DFIND_INSTALL_DIR)/dfind +DFIND_MPIRUN_BIN?=$(shell which srun) +DFIND_CMP_BIN?=$(shell which diff) +DFIND_SRC_DIR?=$(PROJECTROOT)/../test/src +DFIND_DEST_DIR?=$(PROJECTROOT)/../test/dest +DFIND_TMP_FILE?=dfind_test.sh +DFIND_TESTING_BIN_DIR?=$(PROJECTROOT)/../test/bin +GNU_FIND?=find +VERBOSE?=1 + +#################### +# At first blush it may seem redundant to pass in the test name... +# until you have to re-order the testing sequence +#################### +TEST-01 := test_dfind_spaces +TEST-01_Number := 01 +DFIND_TEST_NUM-01 := $(DFIND_TESTING_BIN_DIR)/$(TEST-01) + +TEST-02 := test_dfind_exec_stderr_redirect +TEST-02_Number := 02 +DFIND_TEST_NUM-02 := $(DFIND_TESTING_BIN_DIR)/$(TEST-02) + +TESTS = $(TEST-01) $(TEST-02) + +.PHONY: all clean install uninstall run run1 run2 + +install: $(TESTS) + mkdir -p $(DFIND_TESTING_BIN_DIR) + install -m711 -g linuxdev -o $(USER) -C $? $(DFIND_TESTING_BIN_DIR) +clean: + @for script in $(TESTS) ; \ + do \ + echo "rm -f $$script" ; \ + rm -f $$script ; \ + done + rm -rf $(PROJECTROOT)/../test +uninstall: + @for script in $(TESTS) ; \ + do \ + echo "rm -f $(DFIND_TESTING_BIN_DIR)/$$script" ; \ + rm f $(DFIND_TESTING_BIN_DIR)/$$script ; \ + done +run: run1 run2 + echo testing complete +# run: $(DFIND_TEST_NUM-01) +run1: install $(DFIND_TEST_NUM-01) $(DFIND_TEST_BIN) + rm -rf ${DFIND_SRC_DIR} ${DFIND_DEST_DIR} + mkdir -p $(DFIND_SRC_DIR) $(DFIND_DEST_DIR) $(DFIND_TESTING_BIN_DIR) + DFIND_TEST_VERBOSE=$(VERBOSE) $(DFIND_TEST_NUM-01) $(DFIND_TEST_BIN) \ + $(DFIND_MPIRUN_BIN) $(DFIND_CMP_BIN) $(DFIND_SRC_DIR) \ + $(DFIND_DEST_DIR) $(DFIND_TMP_FILE) \ + $(DFIND_TESTING_BIN_DIR) $(TEST-01_Number) \ + $(GNU_FIND) 2>&1 | \ + tee $(DFIND_DEST_DIR)/result-$(TEST-01_Number)_$(TEST-01) +run2: install $(DFIND_TEST_NUM-02) $(DFIND_TEST_BIN) + rm -rf ${DFIND_SRC_DIR} ${DFIND_DEST_DIR} + mkdir -p $(DFIND_SRC_DIR) $(DFIND_DEST_DIR) $(DFIND_TESTING_BIN_DIR) + DFIND_TEST_VERBOSE=$(VERBOSE) $(DFIND_TEST_NUM-02) $(DFIND_TEST_BIN) \ + $(DFIND_MPIRUN_BIN) $(DFIND_CMP_BIN) $(DFIND_SRC_DIR) \ + $(DFIND_DEST_DIR) $(DFIND_TMP_FILE) \ + $(DFIND_TESTING_BIN_DIR) $(TEST-02_Number) \ + $(GNU_FIND) 2>&1 | \ + tee $(DFIND_DEST_DIR)/result-$(TEST-02)_$(TEST-02) +# vim: set syntax=makefile,sw=4,t=4 diff --git a/test/tests/test_dfind/test_dfind_exec_stderr_redirect.sh b/test/tests/test_dfind/test_dfind_exec_stderr_redirect.sh new file mode 100644 index 000000000..17d2bdbf4 --- /dev/null +++ b/test/tests/test_dfind/test_dfind_exec_stderr_redirect.sh @@ -0,0 +1,213 @@ +#!/bin/bash +#################### +# Author: Robert E. Novak +# email: novak5@llnl.gov +# +# This test is designed to show the differences between Gnu find and dfind +# in processing spaces " " in filenames for the exec command. +# +# The challenge with this script is the large number of definitions that all +# look similar. In theory as we develop more tests, very litle in the +# base version of this file has to change. +#################### +# Define all of the hpc FIND command variables that come in from the +# command line and will eventually be passed to FIEMAP for parallel testing +# +# Just to make this (hopefully) a little less confusing +# +# dfind ........ the binary under test = DFIND_TEST_BIN +# mpirun|srun .. the command to execute the dfind on multiple machines +# DFIND_MPIRUN_BIN +# diff ......... the command to compare the difference in output between +# dfind and find (GNU find since we want to emulate +# the semantics +# DFIND_CMP_BIN +# ../test/src .. the directory relative to mpifileutils where source +# test data is place +# DFIND_SRC_DIR +# ../test/dest . The directory relative to mpifileutils where test +# output is placed +# DFIND_DEST_DIR +# dfind.test.sh The shell script generated inside this script to perform +# the testing. +# DFIND_TMP_FILE +# ../test/bin .. the directory in which executable files (including this +# script and the generated script) are placed to avoid +# cluttering up the project ../install/bin +# DFIND_TESTING_BIN_DIR +#################### +#################### +# A final word about the .. relativity to the project parent directory. +# The build process for mpifileutils installs the following: +# ../install/bin +# ../install/include +# ../install/lib +# ../install/lib64 +# ../install/share +# +# In order to avoid cluttering the installation directory further, the +# testing src, dest and bin directories are placed in +# ../test +# +# To facilitate finding the root of the project from within the directory +# where you run the tests (the above was done to keep from cluttering this +# directory as well), there is a short script "getgitroot" which determines +# the project root directory by walking up the tree to find the .git +# directory: +# Find and return the parent directory that contains ".git" +# +# That is the parent directory that is the "root" of all evil so that we can +# execute binaries located in ../install/bin +#################### +# while [ ! -d .git ] +# do +# cd .. +# done +# pwd +#################### +DFIND_TEST_BIN=${DFIND_TEST_BIN:-${1}} +DFIND_MPIRUN_BIN=${DFIND_MPIRUN_BIN:=${2}} +DFIND_CMP_BIN=${DFIND_CMP_BIN:-${3}} +DFIND_SRC_DIR=${DFIND_SRC_DIR:-${4}} +DFIND_DEST_DIR=${DFIND_DEST_DIR:-${5}} +DFIND_TMP_FILE=${DFIND_TMP_FILE:-${6}} +DFIND_TESTING_BIN_DIR=${DFIND_TESTING_BIN_DIR:-${7}} +DFIND_TEST_NUMBER=${DFIND_TEST_NUMBER:-${8}} +GNU_FIND_BIN=${GNU_FIND_BIN:-${9}} + +#################### +# To make the rest of the script more legible +#################### +DFIND=${DFIND_TEST_BIN} +MPIRUN=${DFIND_MPIRUN_BIN} +CMP=${DFIND_CMP_BIN} +SRCDIR=${DFIND_SRC_DIR} +DESTDIR=${DFIND_DEST_DIR} +TMPFILE=${DFIND_TMP_FILE} +TESTBINDIR=${DFIND_TESTING_BIN_DIR} + +#################### +# Define the Test Number +#################### +TEST_PREFIX="TEST_${DFIND_TEST_NUMBER}" + +#################### +# Make the directories REAL +#################### +DFIND=$(realpath ${DFIND}) +SRCDIR=$(realpath ${SRCDIR}) +DESTDIR=$(realpath ${DESTDIR}) +TESTBINDIR=$(realpath ${TESTBINDIR}) + +#################### +# Define the GNU programs that we are testing against. +#################### +GFIND=$(which ${GNU_FIND_BIN}) + +#################### +# Where we will put the output data +#################### +DFIND_OUT=${DESTDIR}/${TEST_PREFIX}_dfind_find_out.txt +GFIND_OUT=${DESTDIR}/${TEST_PREFIX}_gnu_find_out.txt +DFIND_CMP_RESULT=${DESTDIR}/${TEST_PREFIX}_cmp_result.txt + +#################### +# The verbose name of this test. We had to wait until here so that +# the binaries are named. +#################### +DFIND_TEST_NAME="Test ${DFIND_TEST_NUMBER} --> ${DFIND} vs. ${GFIND} \r\n +Test ${DFIND_TEST_NUMBER} --> $(basename ${DFIND}) vs. $(basename ${GFIND})\r\n +for dfind --exec {} redirection of stderr fails\r\n" + +#################### +# Confirm that we were passed the right information +#################### +if [ $DFIND_TEST_VERBOSE -gt 0 ] +then + echo -e "Using dfind binary at:\t\t${DFIND}" + echo -e "Using mpirun binary at:\t\t${MPIRUN}" + echo -e "Using cmp binary at:\t\t${CMP}" + + #################### + # This helps to confirm that the comparison test is from GNU + #################### + strings ${CMP} | egrep '^GNU ' + echo -e "Using src directory at:\t\t${SRCDIR}" + echo -e "Using dest directory at:\t${DESTDIR}" + echo -e "Using tmp file at:\t\t${TMPFILE}" + echo -e "Using testing bin dir at:\t${TESTBINDIR}" + echo -e "Comparison test against:\t${GFIND}" + echo -e "Test Prefix:\t\t${TEST_PREFIX}" + echo -e "Test Name: ${DFIND_TEST_NAME}" + #################### + # This helps to confirm that the comparison is against the GNU version + #################### + strings ${GFIND} | egrep '^GNU ' +fi + +################################################################################ +#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +# +# Everything up to here has been a preamble. Here is where we construct the +# test data to perform the test. +# +#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +################################################################################ +#################### +# Construct the test case +# Create a file name with no spaces +#################### +echo "A file with no spaces in the name" > ${SRCDIR}/A_file_with_no_spaces_in_the_name +echo "A file with spaces in the name" > "${SRCDIR}/A_file_with spaces_in_the_name" + +#################### +# Test the GNU find in single mode +#################### +if [ ${DFIND_TEST_VERBOSE} -gt 0 ] +then + echo "${GFIND} ${SRCDIR} -exec ls {}a 2>> ${GFIND_OUT}.err ';' > ${GFIND_OUT}" +fi +${GFIND} ${SRCDIR} -exec ls {}a 2>> ${GFIND_OUT}.err ';' > ${GFIND_OUT} + +#################### +# Test the HPC find in single mode +#################### +if [ ${DFIND_TEST_VERBOSE} -gt 0 ] +then +# echo "${MPIRUN} -n 1 ${DFIND} ${SRCDIR} --exec ls {} ';' > ${DFIND_OUT}" + echo "#!/bin/bash > ${TESTBINDIR}/${TMPFILE}" + echo "${DFIND} ${SRCDIR} --exec ls {}a 2>> ${DFIND_OUT}.err ';' 2>&1 >> ${DFIND_OUT} > ${TESTBINDIR}/${TMPFILE}" + echo "chmod +x ${TESTBINDIR}/${TMPFILE}" + echo "# ${MPIRUN} -n 1 ${TESTBINDIR}/${TMPFILE}" +fi +echo "#!/bin/bash" > ${TESTBINDIR}/${TMPFILE} +echo "${DFIND} ${SRCDIR} --exec ls {}a 2>> ${DFIND_OUT}.err ';' 2>&1 >> ${DFIND_OUT}" > ${TESTBINDIR}/${TMPFILE} +chmod +x ${TESTBINDIR}/${TMPFILE} + +# ${MPIRUN} -n 1 ${TESTBINDIR}/${TMPFILE} +/bin/bash ${TESTBINDIR}/${TMPFILE} + +#################### +# Compare the result files. +#################### +if [ ${DFIND_TEST_VERBOSE} -gt 0 ] +then + echo "${CMP} ${GFIND_OUT} ${DFIND_OUT} 2>&1 > ${DFIND_CMP_RESULT}" +fi +${CMP} ${GFIND_OUT} ${DFIND_OUT} 2>&1 > ${DFIND_CMP_RESULT} +if [ $? -ne 0 ] +then + echo -e "FAILURE: $DFIND_TEST_NAME" + echo "RESULT:" + cat ${DFIND_CMP_RESULT} ${GFIND_OUT}.err ${DFIND_OUT}.err +else + #################### + # Only report success in verbose mode + #################### + if [ $DFIND_TEST_VERBOSE -gt 0 ] + then + echo -e "SUCCESS: $FIND_TEST_NAME" + echo "RESULT:" + echo ${DFIND_CMP_RESULT} + fi +fi diff --git a/test/tests/test_dfind/test_dfind_spaces.sh b/test/tests/test_dfind/test_dfind_spaces.sh new file mode 100644 index 000000000..6f3cd36be --- /dev/null +++ b/test/tests/test_dfind/test_dfind_spaces.sh @@ -0,0 +1,213 @@ +#!/bin/bash +#################### +# Author: Robert E. Novak +# email: novak5@llnl.gov +# +# This test is designed to show the differences between Gnu find and dfind +# in processing spaces " " in filenames for the exec command. +# +# The challenge with this script is the large number of definitions that all +# look similar. In theory as we develop more tests, very litle in the +# base version of this file has to change. +#################### +# Define all of the hpc FIND command variables that come in from the +# command line and will eventually be passed to FIEMAP for parallel testing +# +# Just to make this (hopefully) a little less confusing +# +# dfind ........ the binary under test = DFIND_TEST_BIN +# mpirun|srun .. the command to execute the dfind on multiple machines +# DFIND_MPIRUN_BIN +# diff ......... the command to compare the difference in output between +# dfind and find (GNU find since we want to emulate +# the semantics +# DFIND_CMP_BIN +# ../test/src .. the directory relative to mpifileutils where source +# test data is place +# DFIND_SRC_DIR +# ../test/dest . The directory relative to mpifileutils where test +# output is placed +# DFIND_DEST_DIR +# dfind.test.sh The shell script generated inside this script to perform +# the testing. +# DFIND_TMP_FILE +# ../test/bin .. the directory in which executable files (including this +# script and the generated script) are placed to avoid +# cluttering up the project ../install/bin +# DFIND_TESTING_BIN_DIR +#################### +#################### +# A final word about the .. relativity to the project parent directory. +# The build process for mpifileutils installs the following: +# ../install/bin +# ../install/include +# ../install/lib +# ../install/lib64 +# ../install/share +# +# In order to avoid cluttering the installation directory further, the +# testing src, dest and bin directories are placed in +# ../test +# +# To facilitate finding the root of the project from within the directory +# where you run the tests (the above was done to keep from cluttering this +# directory as well), there is a short script "getgitroot" which determines +# the project root directory by walking up the tree to find the .git +# directory: +# Find and return the parent directory that contains ".git" +# +# That is the parent directory that is the "root" of all evil so that we can +# execute binaries located in ../install/bin +#################### +# while [ ! -d .git ] +# do +# cd .. +# done +# pwd +#################### +DFIND_TEST_BIN=${DFIND_TEST_BIN:-${1}} +DFIND_MPIRUN_BIN=${DFIND_MPIRUN_BIN:=${2}} +DFIND_CMP_BIN=${DFIND_CMP_BIN:-${3}} +DFIND_SRC_DIR=${DFIND_SRC_DIR:-${4}} +DFIND_DEST_DIR=${DFIND_DEST_DIR:-${5}} +DFIND_TMP_FILE=${DFIND_TMP_FILE:-${6}} +DFIND_TESTING_BIN_DIR=${DFIND_TESTING_BIN_DIR:-${7}} +DFIND_TEST_NUMBER=${DFIND_TEST_NUMBER:-${8}} +GNU_FIND_BIN=${GNU_FIND_BIN:-${9}} + +#################### +# To make the rest of the script more legible +#################### +DFIND=${DFIND_TEST_BIN} +MPIRUN=${DFIND_MPIRUN_BIN} +CMP=${DFIND_CMP_BIN} +SRCDIR=${DFIND_SRC_DIR} +DESTDIR=${DFIND_DEST_DIR} +TMPFILE=${DFIND_TMP_FILE} +TESTBINDIR=${DFIND_TESTING_BIN_DIR} + +#################### +# Define the Test Number +#################### +TEST_PREFIX="TEST_${DFIND_TEST_NUMBER}" + +#################### +# Make the directories REAL +#################### +DFIND=$(realpath ${DFIND}) +SRCDIR=$(realpath ${SRCDIR}) +DESTDIR=$(realpath ${DESTDIR}) +TESTBINDIR=$(realpath ${TESTBINDIR}) + +#################### +# Define the GNU programs that we are testing against. +#################### +GFIND=$(which ${GNU_FIND_BIN}) + +#################### +# Where we will put the output data +#################### +DFIND_OUT=${DESTDIR}/${TEST_PREFIX}_dfind_find_out.txt +GFIND_OUT=${DESTDIR}/${TEST_PREFIX}_gnu_find_out.txt +DFIND_CMP_RESULT=${DESTDIR}/${TEST_PREFIX}_cmp_result.txt + +#################### +# The verbose name of this test. We had to wait until here so that +# the binaries are named. +#################### +DFIND_TEST_NAME="Test ${DFIND_TEST_NUMBER} --> ${DFIND} vs. ${GFIND} \r\n +Test ${DFIND_TEST_NUMBER} --> $(basename ${DFIND}) vs. $(basename ${GFIND})\r\n +for dfind --exec {} substitution of file names containing spaces\r\n" + +#################### +# Confirm that we were passed the right information +#################### +if [ $DFIND_TEST_VERBOSE -gt 0 ] +then + echo -e "Using dfind binary at:\t\t${DFIND}" + echo -e "Using mpirun binary at:\t\t${MPIRUN}" + echo -e "Using cmp binary at:\t\t${CMP}" + + #################### + # This helps to confirm that the comparison test is from GNU + #################### + strings ${CMP} | egrep '^GNU ' + echo -e "Using src directory at:\t\t${SRCDIR}" + echo -e "Using dest directory at:\t${DESTDIR}" + echo -e "Using tmp file at:\t\t${TMPFILE}" + echo -e "Using testing bin dir at:\t${TESTBINDIR}" + echo -e "Comparison test against:\t${GFIND}" + echo -e "Test Prefix:\t\t${TEST_PREFIX}" + echo -e "Test Name: ${DFIND_TEST_NAME}" + #################### + # This helps to confirm that the comparison is against the GNU version + #################### + strings ${GFIND} | egrep '^GNU ' +fi + +################################################################################ +#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +# +# Everything up to here has been a preamble. Here is where we construct the +# test data to perform the test. +# +#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +################################################################################ +#################### +# Construct the test case +# Create a file name with no spaces +#################### +echo "A file with no spaces in the name" > ${SRCDIR}/A_file_with_no_spaces_in_the_name +echo "A file with spaces in the name" > "${SRCDIR}/A_file_with spaces_in_the_name" + +#################### +# Test the GNU find in single mode +#################### +if [ ${DFIND_TEST_VERBOSE} -gt 0 ] +then + echo "${GFIND} ${SRCDIR} -exec ls {}a 2>> ${GFIND_OUT}.err ';' > ${GFIND_OUT}" +fi +${GFIND} ${SRCDIR} -exec ls {}a 2>> ${GFIND_OUT}.err ';' > ${GFIND_OUT} + +#################### +# Test the HPC find in single mode +#################### +if [ ${DFIND_TEST_VERBOSE} -gt 0 ] +then +# echo "${MPIRUN} -n 1 ${DFIND} ${SRCDIR} --exec ls {} ';' > ${DFIND_OUT}" + echo "#!/bin/bash > ${TESTBINDIR}/${TMPFILE}" + echo "${DFIND} ${SRCDIR} --exec ls {}a 2>> ${DFIND_OUT}.err ';' 2>&1 >> ${DFIND_OUT} > ${TESTBINDIR}/${TMPFILE}" + echo "chmod +x ${TESTBINDIR}/${TMPFILE}" + echo "# ${MPIRUN} -n 1 ${TESTBINDIR}/${TMPFILE}" +fi +echo "#!/bin/bash" > ${TESTBINDIR}/${TMPFILE} +echo "${DFIND} ${SRCDIR} --exec ls {}a 2>> ${DFIND_OUT}.err ';' 2>&1 >> ${DFIND_OUT}" > ${TESTBINDIR}/${TMPFILE} +chmod +x ${TESTBINDIR}/${TMPFILE} + +# ${MPIRUN} -n 1 ${TESTBINDIR}/${TMPFILE} +/bin/bash ${TESTBINDIR}/${TMPFILE} + +#################### +# Compare the result files. +#################### +if [ ${DFIND_TEST_VERBOSE} -gt 0 ] +then + echo "${CMP} ${GFIND_OUT} ${DFIND_OUT} 2>&1 > ${DFIND_CMP_RESULT}" +fi +${CMP} ${GFIND_OUT} ${DFIND_OUT} 2>&1 > ${DFIND_CMP_RESULT} +if [ $? -ne 0 ] +then + echo -e "FAILURE: $DFIND_TEST_NAME" + echo "RESULT:" + cat ${DFIND_CMP_RESULT} ${GFIND_OUT}.err ${DFIND_OUT}.err +else + #################### + # Only report success in verbose mode + #################### + if [ $DFIND_TEST_VERBOSE -gt 0 ] + then + echo -e "SUCCESS: $FIND_TEST_NAME" + echo "RESULT:" + echo ${DFIND_CMP_RESULT} + fi +fi