1#!/bin/sh
   2#
   3#
   4test_description='git-mktag: tag object verify test'
   6. ./test-lib.sh
   8###########################################################
  10# check the tag.sig file, expecting verify_tag() to fail,
  11# and checking that the error message matches the pattern
  12# given in the expect.pat file.
  13check_verify_failure () {
  15    test_expect_success \
  16        "$1" \
  17        'git-mktag <tag.sig 2>message ||
  18         egrep -q -f expect.pat message'
  19}
  20###########################################################
  22# first create a commit, so we have a valid object/type
  23# for the tag.
  24echo Hello >A
  25git update-index --add A
  26git-commit -m "Initial commit"
  27head=$(git rev-parse --verify HEAD)
  28############################################################
  30#  1. length check
  31cat >tag.sig <<EOF
  33too short for a tag
  34EOF
  35cat >expect.pat <<EOF
  37^error: .*size wrong.*$
  38EOF
  39check_verify_failure 'Tag object length check'
  41############################################################
  43#  2. object line label check
  44cat >tag.sig <<EOF
  46xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895
  47type tag
  48tag mytag
  49EOF
  50cat >expect.pat <<EOF
  52^error: char0: .*"object "$
  53EOF
  54check_verify_failure '"object" line label check'
  56############################################################
  58#  3. object line SHA1 check
  59cat >tag.sig <<EOF
  61object zz9e9b33986b1c2670fff52c5067603117b3e895
  62type tag
  63tag mytag
  64EOF
  65cat >expect.pat <<EOF
  67^error: char7: .*SHA1 hash$
  68EOF
  69check_verify_failure '"object" line SHA1 check'
  71############################################################
  73#  4. type line label check
  74cat >tag.sig <<EOF
  76object 779e9b33986b1c2670fff52c5067603117b3e895
  77xxxx tag
  78tag mytag
  79EOF
  80cat >expect.pat <<EOF
  82^error: char47: .*"[\]ntype "$
  83EOF
  84check_verify_failure '"type" line label check'
  86############################################################
  88#  5. type line eol check
  89echo "object 779e9b33986b1c2670fff52c5067603117b3e895" >tag.sig
  91printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
  92cat >expect.pat <<EOF
  94^error: char48: .*"[\]n"$
  95EOF
  96check_verify_failure '"type" line eol check'
  98############################################################
 100#  6. tag line label check #1
 101cat >tag.sig <<EOF
 103object 779e9b33986b1c2670fff52c5067603117b3e895
 104type tag
 105xxx mytag
 106EOF
 107cat >expect.pat <<EOF
 109^error: char57: no "tag " found$
 110EOF
 111check_verify_failure '"tag" line label check #1'
 113############################################################
 115#  7. tag line label check #2
 116cat >tag.sig <<EOF
 118object 779e9b33986b1c2670fff52c5067603117b3e895
 119type taggggggggggggggggggggggggggggggg
 120tag
 121EOF
 122cat >expect.pat <<EOF
 124^error: char87: no "tag " found$
 125EOF
 126check_verify_failure '"tag" line label check #2'
 128############################################################
 130#  8. type line type-name length check
 131cat >tag.sig <<EOF
 133object 779e9b33986b1c2670fff52c5067603117b3e895
 134type taggggggggggggggggggggggggggggggg
 135tag mytag
 136EOF
 137cat >expect.pat <<EOF
 139^error: char53: type too long$
 140EOF
 141check_verify_failure '"type" line type-name length check'
 143############################################################
 145#  9. verify object (SHA1/type) check
 146cat >tag.sig <<EOF
 148object 779e9b33986b1c2670fff52c5067603117b3e895
 149type tagggg
 150tag mytag
 151EOF
 152cat >expect.pat <<EOF
 154^error: char7: could not verify object.*$
 155EOF
 156check_verify_failure 'verify object (SHA1/type) check'
 158############################################################
 160# 10. verify tag-name check
 161cat >tag.sig <<EOF
 163object $head
 164type commit
 165tag my  tag
 166EOF
 167cat >expect.pat <<EOF
 169^error: char67: could not verify tag name$
 170EOF
 171check_verify_failure 'verify tag-name check'
 173############################################################
 175# 11. tagger line label check #1
 176cat >tag.sig <<EOF
 178object $head
 179type commit
 180tag mytag
 181EOF
 182cat >expect.pat <<EOF
 184^error: char70: could not find "tagger"$
 185EOF
 186check_verify_failure '"tagger" line label check #1'
 188############################################################
 190# 12. tagger line label check #2
 191cat >tag.sig <<EOF
 193object $head
 194type commit
 195tag mytag
 196tagger
 197EOF
 198cat >expect.pat <<EOF
 200^error: char70: could not find "tagger"$
 201EOF
 202check_verify_failure '"tagger" line label check #2'
 204############################################################
 206# 13. create valid tag
 207cat >tag.sig <<EOF
 209object $head
 210type commit
 211tag mytag
 212tagger another@example.com
 213EOF
 214test_expect_success \
 216    'create valid tag' \
 217    'git-mktag <tag.sig >.git/refs/tags/mytag 2>message'
 218############################################################
 220# 14. check mytag
 221test_expect_success \
 223    'check mytag' \
 224    'git-tag -l | grep mytag'
 225test_done