t / t3800-mktag.shon commit Add tests to catch problems with un-unlinkable symlinks (8a785dc)
   1#!/bin/sh
   2#
   3#
   4
   5test_description='git-mktag: tag object verify test'
   6
   7. ./test-lib.sh
   8
   9###########################################################
  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.
  13
  14check_verify_failure () {
  15        expect="$2"
  16        test_expect_success "$1" '
  17                ( ! git-mktag <tag.sig 2>message ) &&
  18                grep "$expect" message
  19        '
  20}
  21
  22###########################################################
  23# first create a commit, so we have a valid object/type
  24# for the tag.
  25echo Hello >A
  26git update-index --add A
  27git-commit -m "Initial commit"
  28head=$(git rev-parse --verify HEAD)
  29
  30############################################################
  31#  1. length check
  32
  33cat >tag.sig <<EOF
  34too short for a tag
  35EOF
  36
  37check_verify_failure 'Tag object length check' \
  38        '^error: .*size wrong.*$'
  39
  40############################################################
  41#  2. object line label check
  42
  43cat >tag.sig <<EOF
  44xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895
  45type tag
  46tag mytag
  47EOF
  48
  49check_verify_failure '"object" line label check' '^error: char0: .*"object "$'
  50
  51############################################################
  52#  3. object line SHA1 check
  53
  54cat >tag.sig <<EOF
  55object zz9e9b33986b1c2670fff52c5067603117b3e895
  56type tag
  57tag mytag
  58EOF
  59
  60check_verify_failure '"object" line SHA1 check' '^error: char7: .*SHA1 hash$'
  61
  62############################################################
  63#  4. type line label check
  64
  65cat >tag.sig <<EOF
  66object 779e9b33986b1c2670fff52c5067603117b3e895
  67xxxx tag
  68tag mytag
  69EOF
  70
  71check_verify_failure '"type" line label check' '^error: char47: .*"\\ntype "$'
  72
  73############################################################
  74#  5. type line eol check
  75
  76echo "object 779e9b33986b1c2670fff52c5067603117b3e895" >tag.sig
  77printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
  78
  79check_verify_failure '"type" line eol check' '^error: char48: .*"\\n"$'
  80
  81############################################################
  82#  6. tag line label check #1
  83
  84cat >tag.sig <<EOF
  85object 779e9b33986b1c2670fff52c5067603117b3e895
  86type tag
  87xxx mytag
  88EOF
  89
  90check_verify_failure '"tag" line label check #1' \
  91        '^error: char57: no "tag " found$'
  92
  93############################################################
  94#  7. tag line label check #2
  95
  96cat >tag.sig <<EOF
  97object 779e9b33986b1c2670fff52c5067603117b3e895
  98type taggggggggggggggggggggggggggggggg
  99tag
 100EOF
 101
 102check_verify_failure '"tag" line label check #2' \
 103        '^error: char87: no "tag " found$'
 104
 105############################################################
 106#  8. type line type-name length check
 107
 108cat >tag.sig <<EOF
 109object 779e9b33986b1c2670fff52c5067603117b3e895
 110type taggggggggggggggggggggggggggggggg
 111tag mytag
 112EOF
 113
 114check_verify_failure '"type" line type-name length check' \
 115        '^error: char53: type too long$'
 116
 117############################################################
 118#  9. verify object (SHA1/type) check
 119
 120cat >tag.sig <<EOF
 121object 779e9b33986b1c2670fff52c5067603117b3e895
 122type tagggg
 123tag mytag
 124EOF
 125
 126check_verify_failure 'verify object (SHA1/type) check' \
 127        '^error: char7: could not verify object.*$'
 128
 129############################################################
 130# 10. verify tag-name check
 131
 132cat >tag.sig <<EOF
 133object $head
 134type commit
 135tag my  tag
 136EOF
 137
 138check_verify_failure 'verify tag-name check' \
 139        '^error: char67: could not verify tag name$'
 140
 141############################################################
 142# 11. tagger line label check #1
 143
 144cat >tag.sig <<EOF
 145object $head
 146type commit
 147tag mytag
 148EOF
 149
 150check_verify_failure '"tagger" line label check #1' \
 151        '^error: char70: could not find "tagger"$'
 152
 153############################################################
 154# 12. tagger line label check #2
 155
 156cat >tag.sig <<EOF
 157object $head
 158type commit
 159tag mytag
 160tagger
 161EOF
 162
 163check_verify_failure '"tagger" line label check #2' \
 164        '^error: char70: could not find "tagger"$'
 165
 166############################################################
 167# 13. create valid tag
 168
 169cat >tag.sig <<EOF
 170object $head
 171type commit
 172tag mytag
 173tagger another@example.com
 174EOF
 175
 176test_expect_success \
 177    'create valid tag' \
 178    'git-mktag <tag.sig >.git/refs/tags/mytag 2>message'
 179
 180############################################################
 181# 14. check mytag
 182
 183test_expect_success \
 184    'check mytag' \
 185    'git-tag -l | grep mytag'
 186
 187
 188test_done