[svn-r19599] Purpose:

Fix for bug# 2040 - h5copy should fail gracefully for expected failure copying to non-exist nested group without -p option.

Description:
 Fixed h5copy to fail gracefully when copying object to non-exist group without -p option. This is expected to be failed.
 Merged from hdf5 trunk r19598.

Tested:
 jam, amani
This commit is contained in:
Jonathan Kim
2010-10-14 16:08:15 -05:00
parent 8ed77258a3
commit 5b444e61a2
5 changed files with 110 additions and 22 deletions

View File

@@ -1693,6 +1693,7 @@
./tools/h5copy/testfiles/h5copy_extlinks_src.h5
./tools/h5copy/testfiles/h5copy_extlinks_trg.h5
./tools/h5copy/testfiles/h5copy_extlinks_src.out.ls
./tools/h5copy/testfiles/h5copy_misc1.out
# test files for h5mkgrp
./tools/testfiles/h5mkgrp_help.ls

View File

@@ -106,7 +106,8 @@ Bug Fixes since HDF5-1.8.6
Tools
-----
- None
- Fixed h5copy to fail gracefully when copying object to non-exist
group without -p option. Bug#2040 (JKM 2010/10/14)
F90 API
------

View File

@@ -215,6 +215,8 @@ main (int argc, const char *argv[])
int opt;
int li_ret;
h5tool_link_info_t linkinfo;
int i, len;
char *str_prt=NULL;
h5tools_setprogname(PROGRAMNAME);
h5tools_setstatus(EXIT_SUCCESS);
@@ -406,6 +408,23 @@ main (int argc, const char *argv[])
if(verbose)
printf("%s: Creating parent groups\n", h5tools_getprogname());
} /* end if */
else /* error, if parent groups doesn't already exist in destination file */
{
len = strlen(oname_dst);
/* check if all the parents groups exist. skip root group */
for (i = 1; i < len-1; i++)
{
if ('/'==oname_dst[i])
{
str_prt = strndup(oname_dst, (size_t)i);
if (H5Lexists(fid_dst, str_prt, H5P_DEFAULT) <= 0)
{
error_msg("group <%s> doesn't exist. Use -p to create parent groups.\n");
goto error;
}
}
}
}
/*-------------------------------------------------------------------------
* do the copy
@@ -459,6 +478,8 @@ main (int argc, const char *argv[])
free(oname_dst);
if (oname_src)
free(oname_src);
if (str_prt)
free(str_prt);
h5tools_close();
@@ -485,6 +506,8 @@ error:
free(oname_dst);
if (oname_src)
free(oname_src);
if (str_prt)
free(str_prt);
h5tools_close();

View File

@@ -0,0 +1,5 @@
#############################
output for 'h5copy -i ../../../hdf5/tools/h5copy/testfiles/h5copytst.h5 -o ./testfiles/h5copytst.out.h5 -v -s /simple -d /g1/g2/simple'
#############################
Copying file <../../../hdf5/tools/h5copy/testfiles/h5copytst.h5> and object </simple> to file <./testfiles/h5copytst.out.h5> and object </g1/g2/simple>
Error in copy...Exiting

View File

@@ -91,6 +91,15 @@ VERIFY_H5LS()
echo "Verifying h5ls file structure $* $SPACES" | cut -c1-70 | tr -d '\012'
}
# Print a line-line message left justified in a field of 70 characters
# beginning with the word "Verifying".
#
VERIFY_OUTPUT()
{
SPACES=" "
echo "Verifying output files $* $SPACES" | cut -c1-70 | tr -d '\012'
}
# Run a test and print PASS or *FAIL*. If h5copy can complete
# with exit status 0, consider it pass. If a test fails then increment
# the `nerrors' global variable.
@@ -143,44 +152,70 @@ TOOLTEST()
}
# Compare the two text files
# PASS if same
# FAIL if different, and show the diff
#
# Assumed arguments:
# $1 is text file1 (expected output)
# $2 is text file2 (actual output)
CMP_OUTPUT()
{
expectout=$1
actualout=$2
VERIFY_OUTPUT $@
if [ ! -f $expectout ]; then
# Create the expect file if it doesn't yet exist.
echo " CREATED"
cp $actualout $expectout
elif $CMP $expectout $actualout; then
echo " PASSED"
else
echo "*FAILED*"
echo " Expected output differs from actual output"
nerrors="`expr $nerrors + 1`"
test yes = "$verbose" && $DIFF $expectout $actualout |sed 's/^/ /'
fi
}
TOOLTEST_FAIL()
{
runh5diff=yes
if [ "$1" = -i ]; then
expectout="$INDIR/$1"
actualout="$OUTDIR/$1.actual"
shift
if [ "$1" = -i ]; then
inputfile=$2
else
runh5diff=no
fi
if [ "$3" = -o ]; then
fi
if [ "$3" = -o ]; then
outputfile=$4
else
runh5diff=no
fi
fi
TESTING $H5COPY $@
(
echo "#############################"
echo " output for '$H5COPY $@'"
echo "#############################"
$RUNSERIAL $H5COPY_BIN $@
) > output.out
) > $actualout 2> /dev/null
RET=$?
if [ $RET != 0 ]; then
echo " PASSED"
# Verifying output text from h5copy
if [ "$expectout" != "SKIP" ]; then
CMP_OUTPUT $expectout $actualout
fi
else
echo "*FAILED*"
echo "failed result is:"
cat output.out
cat $actualout
nerrors="`expr $nerrors + 1`"
else
echo " PASSED"
# Clean up output file
if test -z "$HDF5_NOCLEANUP"; then
rm -f output.out
fi
fi
if [ $runh5diff != no ]; then
H5DIFFTEST_FAIL $inputfile $outputfile $7 $9
# Clean up output file
if test -z "$HDF5_NOCLEANUP"; then
rm -f $actualout
fi
}
@@ -389,6 +424,28 @@ COPY_EXT_LINKS()
fi
}
# Test misc.
#
# Assumed arguments:
# <none>
TEST_MISC()
{
TESTFILE="$INDIR/$HDF_FILE1"
FILEOUT="$OUTDIR/`basename $HDF_FILE1 .h5`.out.h5"
# Remove any output file left over from previous test run
rm -f $FILEOUT
echo "Test copying object into group which doesn't exist, without -p"
TOOLTEST_FAIL h5copy_misc1.out -i $TESTFILE -o $FILEOUT -v -s /simple -d /g1/g2/simple
# Remove output file created, if the "no cleanup" environment variable is
# not defined
if test -z "$HDF5_NOCLEANUP"; then
rm -f $FILEOUT
fi
}
##############################################################################
### T H E T E S T S ###
##############################################################################
@@ -396,6 +453,7 @@ COPY_EXT_LINKS()
COPY_OBJECTS
COPY_REFERENCES
COPY_EXT_LINKS
TEST_MISC
if test $nerrors -eq 0 ; then