Fix "name=/file" bug in Rhizome add

Improved Rhizome test scripts and added new assert_manifest_fields()
function to Rhizome test defs
This commit is contained in:
Andrew Bettison 2014-03-12 14:22:38 +10:30
parent a6d6175576
commit dc588e964d
4 changed files with 67 additions and 26 deletions

View File

@ -1139,7 +1139,9 @@ enum rhizome_bundle_status rhizome_manifest_finalise(rhizome_manifest *m, rhizom
int rhizome_manifest_set_name_from_path(rhizome_manifest *m, const char *filepath)
{
const char *name = strrchr(filepath, '/');
if (!name)
if (name)
++name; // skip '/'
else
name = filepath;
if (!rhizome_str_is_manifest_name(name)) {
WARNF("invalid rhizome name %s -- not used", alloca_str_toprint(name));

View File

@ -278,15 +278,47 @@ extract_stdout_crypt() {
}
extract_manifest() {
local _var="$1"
local _manifestfile="$2"
local _label="$3"
local _rexp="$4"
local _value=$($SED -n -e "/^$_label=$_rexp\$/s/^$_label=//p" "$_manifestfile")
assert --message="$_manifestfile contains valid '$_label=' line" \
--dump-on-fail="$_manifestfile" \
[ -n "$_value" ]
[ -n "$_var" ] && eval $_var="\$_value"
local __var="$1"
local __manifestfile="$2"
local __label="$3"
local __rexp="${4:-[^=]*}"
local __value=$($SED -n -e "/^$__label=$__rexp\$/s/^$__label=//p" "$__manifestfile")
[ -n "$__var" ] && eval $__var="\$__value"
}
assert_manifest_fields() {
local manifestfile="$1"
shift
assert --message="manifest file $manifestfile is readable" [ -r "$manifestfile" ]
[ $# -gt 0 ] || error "missing arguments"
local arg label value
for arg; do
case "$arg" in
!*)
assertGrep \
--matches=0 \
--message="$manifestfile contains no '$arg=' line" \
--dump-on-fail="$manifestfile" \
"$manifestfile" "^$arg="
;;
*=*)
label="${arg%%=*}"
value="${arg#*=}"
local mvalue
extract_manifest mvalue "$manifestfile" "$label"
assert \
--message="$manifestfile contains '$label=$value' line" \
--dump-on-fail="$manifestfile" \
[ "$mvalue" = "$value" ]
;;
*)
assertGrep \
--message="$manifestfile contains '$arg=' line" \
--dump-on-fail="$manifestfile" \
"$manifestfile" "^$arg="
;;
esac
done
}
extract_manifest_service() {

View File

@ -568,8 +568,9 @@ setup_RhizomeInsertAnon() {
create_file file1 1001
executeOk_servald rhizome add file '' file1 file1.manifest
extract_stdout_secret SECRET
assertGrep --matches=0 file1.manifest '^BK='
assert_manifest_fields file1.manifest !BK
$SED -e '/^version=/d;/^date=/d;/^filehash=/d;/^filesize=/d' file1.manifest >file2.manifest
assert_manifest_fields file2.manifest !version !date !filehash !filesize
create_file file2 1002
}
test_RhizomeInsertAnon() {

View File

@ -65,10 +65,13 @@ setup_AddNoAuthorNoManifest() {
executeOk_servald rhizome list
assert_rhizome_list
echo "A test file" >file1
echo "Another test file" >file2
}
test_AddNoAuthorNoManifest() {
executeOk_servald rhizome add file '' file1
assert_stdout_add_file file1 !author !BK
executeOk_servald rhizome add file '' "$PWD/file2"
assert_stdout_add_file file2 !author !BK
}
doc_AddNoManifest="Add with no manifest file"
@ -78,10 +81,13 @@ setup_AddNoManifest() {
executeOk_servald rhizome list
assert_rhizome_list
echo "A test file" >file1
echo "Another test file" >file2
}
test_AddNoManifest() {
executeOk_servald rhizome add file $SIDB1 file1
assert_stdout_add_file file1
executeOk_servald rhizome add file $SIDB1 "$PWD/file2"
assert_stdout_add_file file2
}
doc_AddNoAuthor="Add with no author makes manifest without BK"
@ -92,8 +98,8 @@ setup_AddNoAuthor() {
}
test_AddNoAuthor() {
executeOk_servald rhizome add file '' file1 file1.manifest
assert_manifest_fields file1.manifest !BK
assert_stdout_add_file file1 !author !BK
assertGrep --matches=0 file1.manifest '^BK='
}
doc_AddInvalidAuthor="Add with invalid author fails"
@ -118,9 +124,9 @@ setup_AddNoAuthorEncrypted() {
test_AddNoAuthorEncrypted() {
executeOk_servald rhizome add file '' file1 file1.manifest
tfw_cat --stdout --stderr
assert_manifest_fields file1.manifest !BK
assert_stdout_add_file file1 !author !BK
extract_stdout_secret file1_secret
assertGrep --matches=0 file1.manifest '^BK='
executeOk_servald rhizome extract file $re_manifestid file1x $file1_secret
tfw_cat --stdout --stderr
assert diff file1 file1x
@ -133,6 +139,7 @@ setup_AddNonExistManifest() {
executeOk_servald rhizome list
assert_rhizome_list
echo "A test file" >file1
echo "Another test file" >file2
}
test_AddNonExistManifest() {
assert --error-on-fail [ ! -e file1.manifest ]
@ -140,8 +147,13 @@ test_AddNonExistManifest() {
assert_stdout_add_file file1
assert [ -r file1.manifest ]
assert_manifest_complete file1.manifest
assertGrep file1.manifest '^service=file$'
assertGrep file1.manifest '^name=file1$'
assert_manifest_fields file1.manifest service=file name=file1
assert --error-on-fail [ ! -e file2.manifest ]
executeOk_servald rhizome add file $SIDB1 "$PWD/file2" file2.manifest
assert_stdout_add_file file2
assert [ -r file2.manifest ]
assert_manifest_complete file2.manifest
assert_manifest_fields file2.manifest service=file name=file2
}
doc_AddManifest="Add with minimal manifest file"
@ -158,9 +170,7 @@ test_AddManifest() {
tfw_cat --stdout --stderr -v file1.manifest
assert_stdout_add_file file1 name=wah
assert_manifest_complete file1.manifest
assertGrep file1.manifest '^service=file$'
assertGrep file1.manifest '^name=wah$'
assertGrep file1.manifest '^date=12345$'
assert_manifest_fields file1.manifest service=file name=wah date=12345
}
doc_AddEmpty="Add with empty payload"
@ -175,9 +185,7 @@ test_AddEmpty() {
tfw_cat --stdout --stderr -v empty.manifest
assert_stdout_add_file --manifest=empty.manifest ''
assert_manifest_complete empty.manifest
assertGrep empty.manifest '^service=file$'
assertGrep empty.manifest '^name=$'
assertGrep empty.manifest '^filesize=0$'
assert_manifest_fields empty.manifest service=file name= filesize=0
executeOk_servald rhizome list
assert_rhizome_list --fromhere=1 --author=$SIDB1 --manifest=empty.manifest ''
}
@ -641,9 +649,7 @@ setup_AddUpdateSameVersion() {
strip_signatures file1_2.manifest
$SED -i -e '/^date=/d;/^filehash=/d;/^filesize=/d' file1_2.manifest
tfw_cat -v file1_2.manifest
assertGrep --matches=0 file1_2.manifest '^filehash='
extract_manifest_version '' file1_2.manifest # asserts has version= line
assertGrep file1_2.manifest '^id='
assert_manifest_fields file1_2.manifest !date !filehash !filesize version id
cp file1_2.manifest file1_2.manifest.orig
}
test_AddUpdateSameVersion() {
@ -665,7 +671,7 @@ setup_AddUpdateNewVersion() {
extract_manifest_version version file1_2.manifest
let version=version+1
$SED -i -e "/^version=/s/=.*/=$version/" file1_2.manifest
assertGrep --matches=1 file1_2.manifest "^version=$version$"
assert_manifest_fields file1_2.manifest version="$version"
}
test_AddUpdateNewVersion() {
tfw_cat -v file1_2.manifest
@ -724,7 +730,7 @@ doc_AddUpdateAutoVersion="Add new payload to existing manifest with automatic ve
setup_AddUpdateAutoVersion() {
setup_AddUpdateSameVersion
$SED -i -e '/^version=/d' file1_2.manifest
assertGrep --matches=0 file1_2.manifest '^version='
assert_manifest_fields file1_2.manifest !version
}
test_AddUpdateAutoVersion() {
tfw_cat -v file1_2.manifest