commit-graph: verify catches corrupt signature
This is the first of several commits that add a test to check that 'git commit-graph verify' catches corruption in the commit-graph file. The first test checks that the command catches an error in the file signature. This is a check that exists in the existing commit-graph reading code. Add a helper method 'corrupt_graph_and_verify' to the test script t5318-commit-graph.sh. This helper corrupts the commit-graph file at a certain location, runs 'git commit-graph verify', and reports the output to the 'err' file. This data is filtered to remove the lines added by 'test_must_fail' when the test is run verbosely. Then, the output is checked to contain a specific error message. Most messages from 'git commit-graph verify' will not be marked for translation. There will be one exception: the message that reports an invalid checksum will be marked for translation, as that is the only message that is intended for a typical user. Helped-by: Szeder Gábor <szeder.dev@gmail.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
283e68c72f
commit
d9b9f8a6fd
@ -235,9 +235,52 @@ test_expect_success 'perform fast-forward merge in full repo' '
|
||||
test_cmp expect output
|
||||
'
|
||||
|
||||
# the verify tests below expect the commit-graph to contain
|
||||
# exactly the commits reachable from the commits/8 branch.
|
||||
# If the file changes the set of commits in the list, then the
|
||||
# offsets into the binary file will result in different edits
|
||||
# and the tests will likely break.
|
||||
|
||||
test_expect_success 'git commit-graph verify' '
|
||||
cd "$TRASH_DIRECTORY/full" &&
|
||||
git rev-parse commits/8 | git commit-graph write --stdin-commits &&
|
||||
git commit-graph verify >output
|
||||
'
|
||||
|
||||
GRAPH_BYTE_VERSION=4
|
||||
GRAPH_BYTE_HASH=5
|
||||
|
||||
# usage: corrupt_graph_and_verify <position> <data> <string>
|
||||
# Manipulates the commit-graph file at the position
|
||||
# by inserting the data, then runs 'git commit-graph verify'
|
||||
# and places the output in the file 'err'. Test 'err' for
|
||||
# the given string.
|
||||
corrupt_graph_and_verify() {
|
||||
pos=$1
|
||||
data="${2:-\0}"
|
||||
grepstr=$3
|
||||
cd "$TRASH_DIRECTORY/full" &&
|
||||
test_when_finished mv commit-graph-backup $objdir/info/commit-graph &&
|
||||
cp $objdir/info/commit-graph commit-graph-backup &&
|
||||
printf "$data" | dd of="$objdir/info/commit-graph" bs=1 seek="$pos" conv=notrunc &&
|
||||
test_must_fail git commit-graph verify 2>test_err &&
|
||||
grep -v "^+" test_err >err
|
||||
test_i18ngrep "$grepstr" err
|
||||
}
|
||||
|
||||
test_expect_success 'detect bad signature' '
|
||||
corrupt_graph_and_verify 0 "\0" \
|
||||
"graph signature"
|
||||
'
|
||||
|
||||
test_expect_success 'detect bad version' '
|
||||
corrupt_graph_and_verify $GRAPH_BYTE_VERSION "\02" \
|
||||
"graph version"
|
||||
'
|
||||
|
||||
test_expect_success 'detect bad hash version' '
|
||||
corrupt_graph_and_verify $GRAPH_BYTE_HASH "\02" \
|
||||
"hash version"
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user