diff options
Diffstat (limited to 'test/test-abstraction-db.sh')
| -rwxr-xr-x | test/test-abstraction-db.sh | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/test-abstraction-db.sh b/test/test-abstraction-db.sh index 31e5fa5..6a0e4e6 100755 --- a/test/test-abstraction-db.sh +++ b/test/test-abstraction-db.sh @@ -211,11 +211,48 @@ for ssp in $(find "$OUT_DIR/pod" -name "*.ssp" 2>/dev/null | sort); do rm -f "$OUT_DIR/.dbtxt.$$" "$OUT_DIR/.ssptxt.$$" done + # the header blocks: every @source/@meta/@make/@doc_has property in the .ssp + # must be in the database under its own key, with the same value. this is + # what catches a header property that reaches one artefact and not the + # other, which a count of objects cannot see. + awk ' + /^@(source|meta|make|doc_has) \{$/ { blk=substr($1,2); next } + /^\}$/ { blk=""; next } + blk != "" && /^ [a-z_.]+: / { + k=$1; sub(/:$/,"",k) + v=substr($0, index($0,": ")+2) + pfx = (blk=="meta") ? "" : blk "." + print pfx k "\t" v + } + ' "$ssp" | sort > "$OUT_DIR/.sspmeta.$$" + sqlite3 -separator "$(printf '\t')" "$db" \ + "select key, value from metadata where key not in + ('schema.name','schema.version','source.filename','source.ssp_digest');" \ + 2>/dev/null | sort > "$OUT_DIR/.dbmeta.$$" + if ! diff -q "$OUT_DIR/.sspmeta.$$" "$OUT_DIR/.dbmeta.$$" > /dev/null 2>&1; then + [ $doc_fail -eq 0 ] && echo "$base" + echo " MISMATCH header blocks (.ssp against metadata table):" + diff "$OUT_DIR/.sspmeta.$$" "$OUT_DIR/.dbmeta.$$" | head -8 | sed 's/^/ /' + doc_fail=1 + fi + rm -f "$OUT_DIR/.sspmeta.$$" "$OUT_DIR/.dbmeta.$$" + + # the source filename, and the version the two share + sf=$(sqlite3 "$db" "select value from metadata where key='source.filename';" 2>/dev/null || echo '') + sf_ssp=$(sed -n 's/^% Source: //p' "$ssp" | head -1) + if [ "$sf" != "$sf_ssp" ]; then + [ $doc_fail -eq 0 ] && echo "$base" + echo " MISMATCH source.filename: db '$sf' .ssp '$sf_ssp'"; doc_fail=1 + fi + sv_ssp=$(sed -n 's/^% SiSU Document Abstraction v//p' "$ssp" | head -1) # the file says what it is sv=$(sqlite3 "$db" "select value from metadata where key='schema.version';" 2>/dev/null || echo '') if [ -z "$sv" ]; then [ $doc_fail -eq 0 ] && echo "$base" echo " MISSING metadata schema.version"; doc_fail=1 + elif [ "$sv" != "$sv_ssp" ]; then + [ $doc_fail -eq 0 ] && echo "$base" + echo " MISMATCH format version: db '$sv' .ssp '$sv_ssp'"; doc_fail=1 fi FAILURES=$((FAILURES + doc_fail)) |
