Merge branch 'bc/hash-independent-tests'

Various tests have been updated to make it easier to swap the
hash function used for object identification.

* bc/hash-independent-tests:
  t5318: use test_oid for HASH_LEN
  t1407: make hash size independent
  t1406: make hash-size independent
  t1405: make hash size independent
  t1400: switch hard-coded object ID to variable
  t1006: make hash size independent
  t0064: make hash size independent
  t0002: abstract away SHA-1 specific constants
  t0000: update tests for SHA-256
  t0000: use hash translation table
  t: add test functions to translate hash-related values
This commit is contained in:
Junio C Hamano 2018-10-10 12:37:16 +09:00
commit d555663f16
14 changed files with 350 additions and 113 deletions

View file

@ -814,6 +814,28 @@ library for your script to use.
the symbolic link in the file system and a part that does; then only
the latter part need be protected by a SYMLINKS prerequisite (see below).
- test_oid_init
This function loads facts and useful object IDs related to the hash
algorithm(s) in use from the files in t/oid-info.
- test_oid_cache
This function reads per-hash algorithm information from standard
input (usually a heredoc) in the format described in
t/oid-info/README. This is useful for test-specific values, such as
object IDs, which must vary based on the hash algorithm.
Certain fixed values, such as hash sizes and common placeholder
object IDs, can be loaded with test_oid_init (described above).
- test_oid <key>
This function looks up a value for the hash algorithm in use, based
on the key given. The value must have been loaded using
test_oid_init or test_oid_cache. Providing an unknown key is an
error.
Prerequisites
-------------

19
t/oid-info/README Normal file
View file

@ -0,0 +1,19 @@
This directory contains various per-hash values that are used in the testsuite.
Each file contains lines containing a key-value pair; blank lines and lines
starting with `#` are ignored. The key and value are separated by whitespace
(specifically, those whitespace in the default `$IFS`). The key consists only
of shell identifier characters, and the value consists of a hash algorithm,
colon, and value. The hash algorithm also consists only of shell identifier
characters; it should match the value in sha1-file.c.
For example, the following lines map the key "rawsz" to "20" if SHA-1 is in use
and to "32" if SHA-256 is in use:
----
rawsz sha1:20
rawsz sha256:32
----
The keys and values used here are loaded by `test_oid_init` (see the README file
in the "t" directory) and are used by calling `test_oid`.

8
t/oid-info/hash-info Normal file
View file

@ -0,0 +1,8 @@
rawsz sha1:20
rawsz sha256:32
hexsz sha1:40
hexsz sha256:64
zero sha1:0000000000000000000000000000000000000000
zero sha256:0000000000000000000000000000000000000000000000000000000000000000

29
t/oid-info/oid Normal file
View file

@ -0,0 +1,29 @@
# These are some common invalid and partial object IDs used in tests.
001 sha1:0000000000000000000000000000000000000001
001 sha256:0000000000000000000000000000000000000000000000000000000000000001
002 sha1:0000000000000000000000000000000000000002
002 sha256:0000000000000000000000000000000000000000000000000000000000000002
003 sha1:0000000000000000000000000000000000000003
003 sha256:0000000000000000000000000000000000000000000000000000000000000003
004 sha1:0000000000000000000000000000000000000004
004 sha256:0000000000000000000000000000000000000000000000000000000000000004
005 sha1:0000000000000000000000000000000000000005
005 sha256:0000000000000000000000000000000000000000000000000000000000000005
006 sha1:0000000000000000000000000000000000000006
006 sha256:0000000000000000000000000000000000000000000000000000000000000006
007 sha1:0000000000000000000000000000000000000007
007 sha256:0000000000000000000000000000000000000000000000000000000000000007
# All zeros or Fs missing one or two hex segments.
zero_1 sha1:000000000000000000000000000000000000000
zero_1 sha256:000000000000000000000000000000000000000000000000000000000000000
zero_2 sha1:00000000000000000000000000000000000000
zero_2 sha256:00000000000000000000000000000000000000000000000000000000000000
ff_1 sha1:fffffffffffffffffffffffffffffffffffffff
ff_1 sha256:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff_2 sha1:ffffffffffffffffffffffffffffffffffffff
ff_2 sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
# More various invalid OIDs.
numeric sha1:0123456789012345678901234567890123456789
numeric sha256:0123456789012345678901234567890123456789012345678901234567890123
deadbeef sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
deadbeef sha256:deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef

View file

@ -821,9 +821,87 @@ test_expect_success 'tests clean up even on failures' "
EOF
"
test_expect_success 'test_oid setup' '
test_oid_init
'
test_expect_success 'test_oid provides sane info by default' '
test_oid zero >actual &&
grep "^00*\$" actual &&
rawsz="$(test_oid rawsz)" &&
hexsz="$(test_oid hexsz)" &&
test "$hexsz" -eq $(wc -c <actual) &&
test $(( $rawsz * 2)) -eq "$hexsz"
'
test_expect_success 'test_oid can look up data for SHA-1' '
test_when_finished "test_detect_hash" &&
test_set_hash sha1 &&
test_oid zero >actual &&
grep "^00*\$" actual &&
rawsz="$(test_oid rawsz)" &&
hexsz="$(test_oid hexsz)" &&
test $(wc -c <actual) -eq 40 &&
test "$rawsz" -eq 20 &&
test "$hexsz" -eq 40
'
test_expect_success 'test_oid can look up data for SHA-256' '
test_when_finished "test_detect_hash" &&
test_set_hash sha256 &&
test_oid zero >actual &&
grep "^00*\$" actual &&
rawsz="$(test_oid rawsz)" &&
hexsz="$(test_oid hexsz)" &&
test $(wc -c <actual) -eq 64 &&
test "$rawsz" -eq 32 &&
test "$hexsz" -eq 64
'
################################################################
# Basics of the basics
test_oid_cache <<\EOF
path0f sha1:f87290f8eb2cbbea7857214459a0739927eab154
path0f sha256:638106af7c38be056f3212cbd7ac65bc1bac74f420ca5a436ff006a9d025d17d
path0s sha1:15a98433ae33114b085f3eb3bb03b832b3180a01
path0s sha256:3a24cc53cf68edddac490bbf94a418a52932130541361f685df685e41dd6c363
path2f sha1:3feff949ed00a62d9f7af97c15cd8a30595e7ac7
path2f sha256:2a7f36571c6fdbaf0e3f62751a0b25a3f4c54d2d1137b3f4af9cb794bb498e5f
path2s sha1:d8ce161addc5173867a3c3c730924388daedbc38
path2s sha256:18fd611b787c2e938ddcc248fabe4d66a150f9364763e9ec133dd01d5bb7c65a
path2d sha1:58a09c23e2ca152193f2786e06986b7b6712bdbe
path2d sha256:00e4b32b96e7e3d65d79112dcbea53238a22715f896933a62b811377e2650c17
path3f sha1:0aa34cae68d0878578ad119c86ca2b5ed5b28376
path3f sha256:09f58616b951bd571b8cb9dc76d372fbb09ab99db2393f5ab3189d26c45099ad
path3s sha1:8599103969b43aff7e430efea79ca4636466794f
path3s sha256:fce1aed087c053306f3f74c32c1a838c662bbc4551a7ac2420f5d6eb061374d0
path3d sha1:21ae8269cacbe57ae09138dcc3a2887f904d02b3
path3d sha256:9b60497be959cb830bf3f0dc82bcc9ad9e925a24e480837ade46b2295e47efe1
subp3f sha1:00fb5908cb97c2564a9783c0c64087333b3b464f
subp3f sha256:a1a9e16998c988453f18313d10375ee1d0ddefe757e710dcae0d66aa1e0c58b3
subp3s sha1:6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c
subp3s sha256:81759d9f5e93c6546ecfcadb560c1ff057314b09f93fe8ec06e2d8610d34ef10
subp3d sha1:3c5e5399f3a333eddecce7a9b9465b63f65f51e2
subp3d sha256:76b4ef482d4fa1c754390344cf3851c7f883b27cf9bc999c6547928c46aeafb7
root sha1:087704a96baf1c2d1c869a8b084481e121c88b5b
root sha256:9481b52abab1b2ffeedbf9de63ce422b929f179c1b98ff7bee5f8f1bc0710751
simpletree sha1:7bb943559a305bdd6bdee2cef6e5df2413c3d30a
simpletree sha256:1710c07a6c86f9a3c7376364df04c47ee39e5a5e221fcdd84b743bc9bb7e2bc5
EOF
# updating a new file without --add should fail.
test_expect_success 'git update-index without --add should fail adding' '
test_must_fail git update-index should-be-empty
@ -839,8 +917,8 @@ test_expect_success 'writing tree out with git write-tree' '
'
# we know the shape and contents of the tree and know the object ID for it.
test_expect_success SHA1 'validate object ID of a known tree' '
test "$tree" = 7bb943559a305bdd6bdee2cef6e5df2413c3d30a
test_expect_success 'validate object ID of a known tree' '
test "$tree" = "$(test_oid simpletree)"
'
# Removing paths.
@ -882,16 +960,16 @@ test_expect_success 'showing stage with git ls-files --stage' '
git ls-files --stage >current
'
test_expect_success SHA1 'validate git ls-files output for a known tree' '
cat >expected <<-\EOF &&
100644 f87290f8eb2cbbea7857214459a0739927eab154 0 path0
120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0 path0sym
100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0 path2/file2
120000 d8ce161addc5173867a3c3c730924388daedbc38 0 path2/file2sym
100644 0aa34cae68d0878578ad119c86ca2b5ed5b28376 0 path3/file3
120000 8599103969b43aff7e430efea79ca4636466794f 0 path3/file3sym
100644 00fb5908cb97c2564a9783c0c64087333b3b464f 0 path3/subp3/file3
120000 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c 0 path3/subp3/file3sym
test_expect_success 'validate git ls-files output for a known tree' '
cat >expected <<-EOF &&
100644 $(test_oid path0f) 0 path0
120000 $(test_oid path0s) 0 path0sym
100644 $(test_oid path2f) 0 path2/file2
120000 $(test_oid path2s) 0 path2/file2sym
100644 $(test_oid path3f) 0 path3/file3
120000 $(test_oid path3s) 0 path3/file3sym
100644 $(test_oid subp3f) 0 path3/subp3/file3
120000 $(test_oid subp3s) 0 path3/subp3/file3sym
EOF
test_cmp expected current
'
@ -900,20 +978,20 @@ test_expect_success 'writing tree out with git write-tree' '
tree=$(git write-tree)
'
test_expect_success SHA1 'validate object ID for a known tree' '
test "$tree" = 087704a96baf1c2d1c869a8b084481e121c88b5b
test_expect_success 'validate object ID for a known tree' '
test "$tree" = "$(test_oid root)"
'
test_expect_success 'showing tree with git ls-tree' '
git ls-tree $tree >current
'
test_expect_success SHA1 'git ls-tree output for a known tree' '
cat >expected <<-\EOF &&
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe path2
040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3 path3
test_expect_success 'git ls-tree output for a known tree' '
cat >expected <<-EOF &&
100644 blob $(test_oid path0f) path0
120000 blob $(test_oid path0s) path0sym
040000 tree $(test_oid path2d) path2
040000 tree $(test_oid path3d) path3
EOF
test_cmp expected current
'
@ -924,16 +1002,16 @@ test_expect_success 'showing tree with git ls-tree -r' '
git ls-tree -r $tree >current
'
test_expect_success SHA1 'git ls-tree -r output for a known tree' '
cat >expected <<-\EOF &&
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 path2/file2
120000 blob d8ce161addc5173867a3c3c730924388daedbc38 path2/file2sym
100644 blob 0aa34cae68d0878578ad119c86ca2b5ed5b28376 path3/file3
120000 blob 8599103969b43aff7e430efea79ca4636466794f path3/file3sym
100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f path3/subp3/file3
120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c path3/subp3/file3sym
test_expect_success 'git ls-tree -r output for a known tree' '
cat >expected <<-EOF &&
100644 blob $(test_oid path0f) path0
120000 blob $(test_oid path0s) path0sym
100644 blob $(test_oid path2f) path2/file2
120000 blob $(test_oid path2s) path2/file2sym
100644 blob $(test_oid path3f) path3/file3
120000 blob $(test_oid path3s) path3/file3sym
100644 blob $(test_oid subp3f) path3/subp3/file3
120000 blob $(test_oid subp3s) path3/subp3/file3sym
EOF
test_cmp expected current
'
@ -943,19 +1021,19 @@ test_expect_success 'showing tree with git ls-tree -r -t' '
git ls-tree -r -t $tree >current
'
test_expect_success SHA1 'git ls-tree -r output for a known tree' '
cat >expected <<-\EOF &&
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe path2
100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 path2/file2
120000 blob d8ce161addc5173867a3c3c730924388daedbc38 path2/file2sym
040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3 path3
100644 blob 0aa34cae68d0878578ad119c86ca2b5ed5b28376 path3/file3
120000 blob 8599103969b43aff7e430efea79ca4636466794f path3/file3sym
040000 tree 3c5e5399f3a333eddecce7a9b9465b63f65f51e2 path3/subp3
100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f path3/subp3/file3
120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c path3/subp3/file3sym
test_expect_success 'git ls-tree -r output for a known tree' '
cat >expected <<-EOF &&
100644 blob $(test_oid path0f) path0
120000 blob $(test_oid path0s) path0sym
040000 tree $(test_oid path2d) path2
100644 blob $(test_oid path2f) path2/file2
120000 blob $(test_oid path2s) path2/file2sym
040000 tree $(test_oid path3d) path3
100644 blob $(test_oid path3f) path3/file3
120000 blob $(test_oid path3s) path3/file3sym
040000 tree $(test_oid subp3d) path3/subp3
100644 blob $(test_oid subp3f) path3/subp3/file3
120000 blob $(test_oid subp3s) path3/subp3/file3sym
EOF
test_cmp expected current
'
@ -964,26 +1042,27 @@ test_expect_success 'writing partial tree out with git write-tree --prefix' '
ptree=$(git write-tree --prefix=path3)
'
test_expect_success SHA1 'validate object ID for a known tree' '
test "$ptree" = 21ae8269cacbe57ae09138dcc3a2887f904d02b3
test_expect_success 'validate object ID for a known tree' '
test "$ptree" = $(test_oid path3d)
'
test_expect_success 'writing partial tree out with git write-tree --prefix' '
ptree=$(git write-tree --prefix=path3/subp3)
'
test_expect_success SHA1 'validate object ID for a known tree' '
test "$ptree" = 3c5e5399f3a333eddecce7a9b9465b63f65f51e2
test_expect_success 'validate object ID for a known tree' '
test "$ptree" = $(test_oid subp3d)
'
test_expect_success 'put invalid objects into the index' '
rm -f .git/index &&
cat >badobjects <<-\EOF &&
100644 blob 1000000000000000000000000000000000000000 dir/file1
100644 blob 2000000000000000000000000000000000000000 dir/file2
100644 blob 3000000000000000000000000000000000000000 dir/file3
100644 blob 4000000000000000000000000000000000000000 dir/file4
100644 blob 5000000000000000000000000000000000000000 dir/file5
suffix=$(echo $ZERO_OID | sed -e "s/^.//") &&
cat >badobjects <<-EOF &&
100644 blob $(test_oid 001) dir/file1
100644 blob $(test_oid 002) dir/file2
100644 blob $(test_oid 003) dir/file3
100644 blob $(test_oid 004) dir/file4
100644 blob $(test_oid 005) dir/file5
EOF
git update-index --index-info <badobjects
'
@ -1006,16 +1085,16 @@ test_expect_success 'git read-tree followed by write-tree should be idempotent'
test "$newtree" = "$tree"
'
test_expect_success SHA1 'validate git diff-files output for a know cache/work tree state' '
cat >expected <<\EOF &&
:100644 100644 f87290f8eb2cbbea7857214459a0739927eab154 0000000000000000000000000000000000000000 M path0
:120000 120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0000000000000000000000000000000000000000 M path0sym
:100644 100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0000000000000000000000000000000000000000 M path2/file2
:120000 120000 d8ce161addc5173867a3c3c730924388daedbc38 0000000000000000000000000000000000000000 M path2/file2sym
:100644 100644 0aa34cae68d0878578ad119c86ca2b5ed5b28376 0000000000000000000000000000000000000000 M path3/file3
:120000 120000 8599103969b43aff7e430efea79ca4636466794f 0000000000000000000000000000000000000000 M path3/file3sym
:100644 100644 00fb5908cb97c2564a9783c0c64087333b3b464f 0000000000000000000000000000000000000000 M path3/subp3/file3
:120000 120000 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c 0000000000000000000000000000000000000000 M path3/subp3/file3sym
test_expect_success 'validate git diff-files output for a know cache/work tree state' '
cat >expected <<EOF &&
:100644 100644 $(test_oid path0f) $ZERO_OID M path0
:120000 120000 $(test_oid path0s) $ZERO_OID M path0sym
:100644 100644 $(test_oid path2f) $ZERO_OID M path2/file2
:120000 120000 $(test_oid path2s) $ZERO_OID M path2/file2sym
:100644 100644 $(test_oid path3f) $ZERO_OID M path3/file3
:120000 120000 $(test_oid path3s) $ZERO_OID M path3/file3sym
:100644 100644 $(test_oid subp3f) $ZERO_OID M path3/subp3/file3
:120000 120000 $(test_oid subp3s) $ZERO_OID M path3/subp3/file3sym
EOF
git diff-files >current &&
test_cmp current expected
@ -1031,23 +1110,23 @@ test_expect_success 'no diff after checkout and git update-index --refresh' '
'
################################################################
P=087704a96baf1c2d1c869a8b084481e121c88b5b
P=$(test_oid root)
test_expect_success SHA1 'git commit-tree records the correct tree in a commit' '
test_expect_success 'git commit-tree records the correct tree in a commit' '
commit0=$(echo NO | git commit-tree $P) &&
tree=$(git show --pretty=raw $commit0 |
sed -n -e "s/^tree //p" -e "/^author /q") &&
test "z$tree" = "z$P"
'
test_expect_success SHA1 'git commit-tree records the correct parent in a commit' '
test_expect_success 'git commit-tree records the correct parent in a commit' '
commit1=$(echo NO | git commit-tree $P -p $commit0) &&
parent=$(git show --pretty=raw $commit1 |
sed -n -e "s/^parent //p" -e "/^author /q") &&
test "z$commit0" = "z$parent"
'
test_expect_success SHA1 'git commit-tree omits duplicated parent in a commit' '
test_expect_success 'git commit-tree omits duplicated parent in a commit' '
commit2=$(echo NO | git commit-tree $P -p $commit0 -p $commit0) &&
parent=$(git show --pretty=raw $commit2 |
sed -n -e "s/^parent //p" -e "/^author /q" |

View file

@ -92,11 +92,12 @@ test_expect_success 'enter_repo non-strict mode' '
mv .git .realgit &&
echo "gitdir: .realgit" >.git
) &&
head=$(git -C enter_repo rev-parse HEAD) &&
git ls-remote enter_repo >actual &&
cat >expected <<-\EOF &&
946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo
cat >expected <<-EOF &&
$head HEAD
$head refs/heads/master
$head refs/tags/foo
EOF
test_cmp expected actual
'
@ -106,21 +107,23 @@ test_expect_success 'enter_repo linked checkout' '
cd enter_repo &&
git worktree add ../foo refs/tags/foo
) &&
head=$(git -C enter_repo rev-parse HEAD) &&
git ls-remote foo >actual &&
cat >expected <<-\EOF &&
946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo
cat >expected <<-EOF &&
$head HEAD
$head refs/heads/master
$head refs/tags/foo
EOF
test_cmp expected actual
'
test_expect_success 'enter_repo strict mode' '
head=$(git -C enter_repo rev-parse HEAD) &&
git ls-remote --upload-pack="git upload-pack --strict" foo/.git >actual &&
cat >expected <<-\EOF &&
946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo
cat >expected <<-EOF &&
$head HEAD
$head refs/heads/master
$head refs/tags/foo
EOF
test_cmp expected actual
'

View file

@ -3,30 +3,30 @@
test_description='basic tests for the SHA1 array implementation'
. ./test-lib.sh
echo20 () {
echoid () {
prefix="${1:+$1 }"
shift
while test $# -gt 0
do
echo "$prefix$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1"
echo "$prefix$ZERO_OID" | sed -e "s/00/$1/g"
shift
done
}
test_expect_success 'ordered enumeration' '
echo20 "" 44 55 88 aa >expect &&
echoid "" 44 55 88 aa >expect &&
{
echo20 append 88 44 aa 55 &&
echoid append 88 44 aa 55 &&
echo for_each_unique
} | test-tool sha1-array >actual &&
test_cmp expect actual
'
test_expect_success 'ordered enumeration with duplicate suppression' '
echo20 "" 44 55 88 aa >expect &&
echoid "" 44 55 88 aa >expect &&
{
echo20 append 88 44 aa 55 &&
echo20 append 88 44 aa 55 &&
echoid append 88 44 aa 55 &&
echoid append 88 44 aa 55 &&
echo for_each_unique
} | test-tool sha1-array >actual &&
test_cmp expect actual
@ -34,8 +34,8 @@ test_expect_success 'ordered enumeration with duplicate suppression' '
test_expect_success 'lookup' '
{
echo20 append 88 44 aa 55 &&
echo20 lookup 55
echoid append 88 44 aa 55 &&
echoid lookup 55
} | test-tool sha1-array >actual &&
n=$(cat actual) &&
test "$n" -eq 1
@ -43,8 +43,8 @@ test_expect_success 'lookup' '
test_expect_success 'lookup non-existing entry' '
{
echo20 append 88 44 aa 55 &&
echo20 lookup 33
echoid append 88 44 aa 55 &&
echoid lookup 33
} | test-tool sha1-array >actual &&
n=$(cat actual) &&
test "$n" -lt 0
@ -52,9 +52,9 @@ test_expect_success 'lookup non-existing entry' '
test_expect_success 'lookup with duplicates' '
{
echo20 append 88 44 aa 55 &&
echo20 append 88 44 aa 55 &&
echo20 lookup 55
echoid append 88 44 aa 55 &&
echoid append 88 44 aa 55 &&
echoid lookup 55
} | test-tool sha1-array >actual &&
n=$(cat actual) &&
test "$n" -ge 2 &&
@ -63,19 +63,24 @@ test_expect_success 'lookup with duplicates' '
test_expect_success 'lookup non-existing entry with duplicates' '
{
echo20 append 88 44 aa 55 &&
echo20 append 88 44 aa 55 &&
echo20 lookup 66
echoid append 88 44 aa 55 &&
echoid append 88 44 aa 55 &&
echoid lookup 66
} | test-tool sha1-array >actual &&
n=$(cat actual) &&
test "$n" -lt 0
'
test_expect_success 'lookup with almost duplicate values' '
# n-1 5s
root=$(echoid "" 55) &&
root=${root%5} &&
{
echo "append 5555555555555555555555555555555555555555" &&
echo "append 555555555555555555555555555555555555555f" &&
echo20 lookup 55
id1="${root}5" &&
id2="${root}f" &&
echo "append $id1" &&
echo "append $id2" &&
echoid lookup 55
} | test-tool sha1-array >actual &&
n=$(cat actual) &&
test "$n" -eq 0
@ -83,8 +88,8 @@ test_expect_success 'lookup with almost duplicate values' '
test_expect_success 'lookup with single duplicate value' '
{
echo20 append 55 55 &&
echo20 lookup 55
echoid append 55 55 &&
echoid lookup 55
} | test-tool sha1-array >actual &&
n=$(cat actual) &&
test "$n" -ge 0 &&

View file

@ -140,15 +140,17 @@ test_expect_success '--batch-check without %(rest) considers whole line' '
test_cmp expect actual
'
test_oid_init
tree_sha1=$(git write-tree)
tree_size=33
tree_size=$(($(test_oid rawsz) + 13))
tree_pretty_content="100644 blob $hello_sha1 hello"
run_tests 'tree' $tree_sha1 $tree_size "" "$tree_pretty_content"
commit_message="Initial commit"
commit_sha1=$(echo_without_newline "$commit_message" | git commit-tree $tree_sha1)
commit_size=177
commit_size=$(($(test_oid hexsz) + 137))
commit_content="tree $tree_sha1
author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> 0000000000 +0000
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 0000000000 +0000

View file

@ -346,7 +346,7 @@ test_expect_success "verifying $m's log (logged by config)" '
git update-ref $m $D
cat >.git/logs/$m <<EOF
0000000000000000000000000000000000000000 $C $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 -0500
$Z $C $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 -0500
$C $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150350 -0500
$A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150380 -0500
$F $Z $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150680 -0500

View file

@ -54,7 +54,7 @@ test_expect_success 'for_each_ref(refs/heads/)' '
'
test_expect_success 'for_each_ref() is sorted' '
$RUN for-each-ref refs/heads/ | cut -c 42- >actual &&
$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
sort actual > expected &&
test_cmp expected actual
'
@ -71,7 +71,7 @@ test_expect_success 'verify_ref(new-master)' '
'
test_expect_success 'for_each_reflog()' '
$RUN for-each-reflog | sort -k2 | cut -c 42- >actual &&
$RUN for-each-reflog | sort -k2 | cut -d" " -f 2- >actual &&
cat >expected <<-\EOF &&
HEAD 0x1
refs/heads/master 0x0

View file

@ -39,7 +39,7 @@ test_expect_success 'rename_refs() not allowed' '
'
test_expect_success 'for_each_ref(refs/heads/)' '
$RUN for-each-ref refs/heads/ | cut -c 42- >actual &&
$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
cat >expected <<-\EOF &&
master 0x0
new-master 0x0
@ -48,7 +48,7 @@ test_expect_success 'for_each_ref(refs/heads/)' '
'
test_expect_success 'for_each_ref() is sorted' '
$RUN for-each-ref refs/heads/ | cut -c 42- >actual &&
$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
sort actual > expected &&
test_cmp expected actual
'
@ -65,7 +65,7 @@ test_expect_success 'verify_ref(new-master)' '
'
test_expect_success 'for_each_reflog()' '
$RUN for-each-reflog | sort | cut -c 42- >actual &&
$RUN for-each-reflog | sort | cut -d" " -f 2- >actual &&
cat >expected <<-\EOF &&
HEAD 0x1
refs/heads/master 0x0

View file

@ -58,7 +58,7 @@ test_expect_success 'for_each_reflog()' '
mkdir -p .git/worktrees/wt/logs/refs/bisect &&
echo $ZERO_OID > .git/worktrees/wt/logs/refs/bisect/wt-random &&
$RWT for-each-reflog | cut -c 42- | sort >actual &&
$RWT for-each-reflog | cut -d" " -f 2- | sort >actual &&
cat >expected <<-\EOF &&
HEAD 0x1
PSEUDO-WT 0x0
@ -68,7 +68,7 @@ test_expect_success 'for_each_reflog()' '
EOF
test_cmp expected actual &&
$RMAIN for-each-reflog | cut -c 42- | sort >actual &&
$RMAIN for-each-reflog | cut -d" " -f 2- | sort >actual &&
cat >expected <<-\EOF &&
HEAD 0x1
PSEUDO-MAIN 0x0

View file

@ -8,7 +8,8 @@ test_expect_success 'setup full repo' '
cd "$TRASH_DIRECTORY/full" &&
git init &&
git config core.commitGraph true &&
objdir=".git/objects"
objdir=".git/objects" &&
test_oid_init
'
test_expect_success 'verify graph with no graph file' '
@ -273,7 +274,7 @@ test_expect_success 'git commit-graph verify' '
NUM_COMMITS=9
NUM_OCTOPUS_EDGES=2
HASH_LEN=20
HASH_LEN="$(test_oid rawsz)"
GRAPH_BYTE_VERSION=4
GRAPH_BYTE_HASH=5
GRAPH_BYTE_CHUNK_COUNT=6

View file

@ -1157,3 +1157,72 @@ depacketize () {
}
'
}
# Set the hash algorithm in use to $1. Only useful when testing the testsuite.
test_set_hash () {
test_hash_algo="$1"
}
# Detect the hash algorithm in use.
test_detect_hash () {
# Currently we only support SHA-1, but in the future this function will
# actually detect the algorithm in use.
test_hash_algo='sha1'
}
# Load common hash metadata and common placeholder object IDs for use with
# test_oid.
test_oid_init () {
test -n "$test_hash_algo" || test_detect_hash &&
test_oid_cache <"$TEST_DIRECTORY/oid-info/hash-info" &&
test_oid_cache <"$TEST_DIRECTORY/oid-info/oid"
}
# Load key-value pairs from stdin suitable for use with test_oid. Blank lines
# and lines starting with "#" are ignored. Keys must be shell identifier
# characters.
#
# Examples:
# rawsz sha1:20
# rawsz sha256:32
test_oid_cache () {
local tag rest k v &&
{ test -n "$test_hash_algo" || test_detect_hash; } &&
while read tag rest
do
case $tag in
\#*)
continue;;
?*)
# non-empty
;;
*)
# blank line
continue;;
esac &&
k="${rest%:*}" &&
v="${rest#*:}" &&
if ! expr "$k" : '[a-z0-9][a-z0-9]*$' >/dev/null
then
error 'bug in the test script: bad hash algorithm'
fi &&
eval "test_oid_${k}_$tag=\"\$v\""
done
}
# Look up a per-hash value based on a key ($1). The value must have been loaded
# by test_oid_init or test_oid_cache.
test_oid () {
local var="test_oid_${test_hash_algo}_$1" &&
# If the variable is unset, we must be missing an entry for this
# key-hash pair, so exit with an error.
if eval "test -z \"\${$var+set}\""
then
error "bug in the test script: undefined key '$1'" >&2
fi &&
eval "printf '%s' \"\${$var}\""
}