git-commit-vandalism/t/t3800-mktag.sh
Ævar Arnfjörð Bjarmason 0d35ccb5e0 mktag tests: remove needless SHA-1 hardcoding
Change the tests amended in acb49d1cc8 (t3800: make hash-size
independent, 2019-08-18) even more to make them independent of either
SHA-1 or SHA-256.

Some of these tests were failing for the wrong reasons. The first one
being modified here would fail because the line starts with "xxxxxx"
instead of "object", the rest of the line doesn't matter.

Let's just put a valid hash on the rest of the line anyway to narrow
the test down for just the s/object/xxxxxx/ case.

The second one being modified here would fail under
GIT_TEST_DEFAULT_HASH=sha256 because <some sha-1 length garbage> is an
invalid SHA-256, but we should really be testing <some sha-256 length
garbage> when under SHA-256.

This doesn't really matter since we should be able to trust other
parts of the code to validate things in the 0-9a-f range, but let's
keep it for good measure.

There's a later test which tests an invalid SHA which looks like a
valid one, to stress the "We refuse to tag something we can't
verify[...]" logic in mktag.c.

But here we're testing for a SHA-length string which contains
characters outside of the /[0-9a-f]/i set.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-01-05 14:58:28 -08:00

364 lines
7.5 KiB
Bash
Executable File

#!/bin/sh
#
#
test_description='git mktag: tag object verify test'
. ./test-lib.sh
###########################################################
# check the tag.sig file, expecting verify_tag() to fail,
# and checking that the error message matches the pattern
# given in the expect.pat file.
check_verify_failure () {
expect="$2"
test_expect_success "$1" '
test_must_fail git mktag <tag.sig 2>message &&
grep "$expect" message
'
}
###########################################################
# first create a commit, so we have a valid object/type
# for the tag.
test_expect_success 'setup' '
test_commit A &&
head=$(git rev-parse --verify HEAD)
'
############################################################
# 1. length check
cat >tag.sig <<EOF
too short for a tag
EOF
check_verify_failure 'Tag object length check' \
'^error: .*size wrong.*$'
############################################################
# 2. object line label check
cat >tag.sig <<EOF
xxxxxx $head
type tag
tag mytag
tagger . <> 0 +0000
EOF
check_verify_failure '"object" line label check' '^error: char0: .*"object "$'
############################################################
# 3. object line hash check
cat >tag.sig <<EOF
object $(echo $head | tr 0-9a-f z)
type tag
tag mytag
tagger . <> 0 +0000
EOF
check_verify_failure '"object" line SHA1 check' '^error: char7: .*SHA1 hash$'
############################################################
# 4. type line label check
cat >tag.sig <<EOF
object $head
xxxx tag
tag mytag
tagger . <> 0 +0000
EOF
check_verify_failure '"type" line label check' '^error: char.*: .*"\\ntype "$'
############################################################
# 5. type line eol check
echo "object $head" >tag.sig
printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
check_verify_failure '"type" line eol check' '^error: char.*: .*"\\n"$'
############################################################
# 6. tag line label check #1
cat >tag.sig <<EOF
object $head
type tag
xxx mytag
tagger . <> 0 +0000
EOF
check_verify_failure '"tag" line label check #1' \
'^error: char.*: no "tag " found$'
############################################################
# 7. tag line label check #2
cat >tag.sig <<EOF
object $head
type taggggggggggggggggggggggggggggggg
tag
EOF
check_verify_failure '"tag" line label check #2' \
'^error: char.*: no "tag " found$'
############################################################
# 8. type line type-name length check
cat >tag.sig <<EOF
object $head
type taggggggggggggggggggggggggggggggg
tag mytag
EOF
check_verify_failure '"type" line type-name length check' \
'^error: char.*: type too long$'
############################################################
# 9. verify object (SHA1/type) check
cat >tag.sig <<EOF
object $(test_oid deadbeef)
type tagggg
tag mytag
tagger . <> 0 +0000
EOF
check_verify_failure 'verify object (SHA1/type) check' \
'^error: char7: could not verify object.*$'
############################################################
# 10. verify tag-name check
cat >tag.sig <<EOF
object $head
type commit
tag my tag
tagger . <> 0 +0000
EOF
check_verify_failure 'verify tag-name check' \
'^error: char.*: could not verify tag name$'
############################################################
# 11. tagger line label check #1
cat >tag.sig <<EOF
object $head
type commit
tag mytag
This is filler
EOF
check_verify_failure '"tagger" line label check #1' \
'^error: char.*: could not find "tagger "$'
############################################################
# 12. tagger line label check #2
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger
This is filler
EOF
check_verify_failure '"tagger" line label check #2' \
'^error: char.*: could not find "tagger "$'
############################################################
# 13. disallow missing tag author name
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger <> 0 +0000
This is filler
EOF
check_verify_failure 'disallow missing tag author name' \
'^error: char.*: missing tagger name$'
############################################################
# 14. disallow missing tag author name
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <
> 0 +0000
EOF
check_verify_failure 'disallow malformed tagger' \
'^error: char.*: malformed tagger field$'
############################################################
# 15. allow empty tag email
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <> 0 +0000
EOF
test_expect_success \
'allow empty tag email' \
'git mktag <tag.sig >.git/refs/tags/mytag 2>message'
############################################################
# 16. disallow spaces in tag email
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tag ger@example.com> 0 +0000
EOF
check_verify_failure 'disallow spaces in tag email' \
'^error: char.*: malformed tagger field$'
############################################################
# 17. disallow missing tag timestamp
tr '_' ' ' >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com>__
EOF
check_verify_failure 'disallow missing tag timestamp' \
'^error: char.*: missing tag timestamp$'
############################################################
# 18. detect invalid tag timestamp1
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008
EOF
check_verify_failure 'detect invalid tag timestamp1' \
'^error: char.*: missing tag timestamp$'
############################################################
# 19. detect invalid tag timestamp2
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500
EOF
check_verify_failure 'detect invalid tag timestamp2' \
'^error: char.*: malformed tag timestamp$'
############################################################
# 20. detect invalid tag timezone1
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com> 1206478233 GMT
EOF
check_verify_failure 'detect invalid tag timezone1' \
'^error: char.*: malformed tag timezone$'
############################################################
# 21. detect invalid tag timezone2
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com> 1206478233 + 30
EOF
check_verify_failure 'detect invalid tag timezone2' \
'^error: char.*: malformed tag timezone$'
############################################################
# 22. detect invalid tag timezone3
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com> 1206478233 -1430
EOF
check_verify_failure 'detect invalid tag timezone3' \
'^error: char.*: malformed tag timezone$'
############################################################
# 23. detect invalid header entry
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com> 1206478233 -0500
this line should not be here
EOF
check_verify_failure 'detect invalid header entry' \
'^error: char.*: trailing garbage in tag header$'
############################################################
# 24. create valid tag
cat >tag.sig <<EOF
object $head
type commit
tag mytag
tagger T A Gger <tagger@example.com> 1206478233 -0500
EOF
test_expect_success \
'create valid tag' \
'git mktag <tag.sig >.git/refs/tags/mytag 2>message'
############################################################
# 25. check mytag
test_expect_success \
'check mytag' \
'git tag -l | grep mytag'
test_done