Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='errors in upload-pack' |
| 4 | |
| 5 | . ./test-lib.sh |
| 6 | |
Elia Pinto | 14dc2d9 | 2016-01-04 10:10:43 +0100 | [diff] [blame] | 7 | D=$(pwd) |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 8 | |
| 9 | corrupt_repo () { |
| 10 | object_sha1=$(git rev-parse "$1") && |
| 11 | ob=$(expr "$object_sha1" : "\(..\)") && |
| 12 | ject=$(expr "$object_sha1" : "..\(..*\)") && |
| 13 | rm -f ".git/objects/$ob/$ject" |
| 14 | } |
| 15 | |
| 16 | test_expect_success 'setup and corrupt repository' ' |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 17 | echo file >file && |
| 18 | git add file && |
| 19 | git rev-parse :file && |
| 20 | git commit -a -m original && |
| 21 | test_tick && |
| 22 | echo changed >file && |
| 23 | git commit -a -m changed && |
| 24 | corrupt_repo HEAD:file |
| 25 | |
| 26 | ' |
| 27 | |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 28 | test_expect_success 'fsck fails' ' |
Stephan Beyer | d492b31 | 2008-07-12 17:47:52 +0200 | [diff] [blame] | 29 | test_must_fail git fsck |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 30 | ' |
| 31 | |
Nick Edelen | f0cea83 | 2009-06-10 01:50:18 +0200 | [diff] [blame] | 32 | test_expect_success 'upload-pack fails due to error in pack-objects packing' ' |
brian m. carlson | 8320722 | 2019-12-21 19:49:31 +0000 | [diff] [blame] | 33 | head=$(git rev-parse HEAD) && |
| 34 | hexsz=$(test_oid hexsz) && |
| 35 | printf "%04xwant %s\n00000009done\n0000" \ |
| 36 | $(($hexsz + 10)) $head >input && |
Johannes Sixt | 1d8cd41 | 2010-03-06 16:40:38 +0100 | [diff] [blame] | 37 | test_must_fail git upload-pack . <input >/dev/null 2>output.err && |
Jiang Xin | 9aa98ef | 2012-08-27 13:36:53 +0800 | [diff] [blame] | 38 | test_i18ngrep "unable to read" output.err && |
| 39 | test_i18ngrep "pack-objects died" output.err |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 40 | ' |
| 41 | |
| 42 | test_expect_success 'corrupt repo differently' ' |
| 43 | |
| 44 | git hash-object -w file && |
| 45 | corrupt_repo HEAD^^{tree} |
| 46 | |
| 47 | ' |
| 48 | |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 49 | test_expect_success 'fsck fails' ' |
Stephan Beyer | d492b31 | 2008-07-12 17:47:52 +0200 | [diff] [blame] | 50 | test_must_fail git fsck |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 51 | ' |
| 52 | test_expect_success 'upload-pack fails due to error in rev-list' ' |
| 53 | |
brian m. carlson | 8320722 | 2019-12-21 19:49:31 +0000 | [diff] [blame] | 54 | printf "%04xwant %s\n%04xshallow %s00000009done\n0000" \ |
| 55 | $(($hexsz + 10)) $(git rev-parse HEAD) \ |
| 56 | $(($hexsz + 12)) $(git rev-parse HEAD^) >input && |
Johannes Sixt | 1d8cd41 | 2010-03-06 16:40:38 +0100 | [diff] [blame] | 57 | test_must_fail git upload-pack . <input >/dev/null 2>output.err && |
Johannes Sixt | 0ac77ec | 2009-07-04 21:26:40 +0200 | [diff] [blame] | 58 | grep "bad tree object" output.err |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 59 | ' |
| 60 | |
Jeff King | 014ade7 | 2019-04-13 01:53:34 -0400 | [diff] [blame] | 61 | test_expect_success 'upload-pack fails due to bad want (no object)' ' |
Elijah Newren | 9f9aa76 | 2010-07-31 14:11:46 -0600 | [diff] [blame] | 62 | |
brian m. carlson | 8320722 | 2019-12-21 19:49:31 +0000 | [diff] [blame] | 63 | printf "%04xwant %s multi_ack_detailed\n00000009done\n0000" \ |
| 64 | $(($hexsz + 29)) $(test_oid deadbeef) >input && |
Elijah Newren | 9f9aa76 | 2010-07-31 14:11:46 -0600 | [diff] [blame] | 65 | test_must_fail git upload-pack . <input >output 2>output.err && |
Jeff King | 6963a4e | 2019-04-13 01:53:09 -0400 | [diff] [blame] | 66 | grep "not our ref" output.err && |
| 67 | grep "ERR" output && |
| 68 | ! grep multi_ack_detailed output.err |
Elijah Newren | 9f9aa76 | 2010-07-31 14:11:46 -0600 | [diff] [blame] | 69 | ' |
| 70 | |
Jeff King | 014ade7 | 2019-04-13 01:53:34 -0400 | [diff] [blame] | 71 | test_expect_success 'upload-pack fails due to bad want (not tip)' ' |
| 72 | |
| 73 | oid=$(echo an object we have | git hash-object -w --stdin) && |
brian m. carlson | 8320722 | 2019-12-21 19:49:31 +0000 | [diff] [blame] | 74 | printf "%04xwant %s multi_ack_detailed\n00000009done\n0000" \ |
| 75 | $(($hexsz + 29)) "$oid" >input && |
Jeff King | 014ade7 | 2019-04-13 01:53:34 -0400 | [diff] [blame] | 76 | test_must_fail git upload-pack . <input >output 2>output.err && |
| 77 | grep "not our ref" output.err && |
| 78 | grep "ERR" output && |
| 79 | ! grep multi_ack_detailed output.err |
| 80 | ' |
| 81 | |
Nick Edelen | f0cea83 | 2009-06-10 01:50:18 +0200 | [diff] [blame] | 82 | test_expect_success 'upload-pack fails due to error in pack-objects enumeration' ' |
| 83 | |
brian m. carlson | 8320722 | 2019-12-21 19:49:31 +0000 | [diff] [blame] | 84 | printf "%04xwant %s\n00000009done\n0000" \ |
| 85 | $((hexsz + 10)) $(git rev-parse HEAD) >input && |
Johannes Sixt | 1d8cd41 | 2010-03-06 16:40:38 +0100 | [diff] [blame] | 86 | test_must_fail git upload-pack . <input >/dev/null 2>output.err && |
Nick Edelen | f0cea83 | 2009-06-10 01:50:18 +0200 | [diff] [blame] | 87 | grep "bad tree object" output.err && |
| 88 | grep "pack-objects died" output.err |
| 89 | ' |
| 90 | |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 91 | test_expect_success 'create empty repository' ' |
| 92 | |
| 93 | mkdir foo && |
| 94 | cd foo && |
| 95 | git init |
| 96 | |
| 97 | ' |
| 98 | |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 99 | test_expect_success 'fetch fails' ' |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 100 | |
Stephan Beyer | d492b31 | 2008-07-12 17:47:52 +0200 | [diff] [blame] | 101 | test_must_fail git fetch .. master |
Johannes Sixt | 4c324c0 | 2007-11-04 20:46:48 +0100 | [diff] [blame] | 102 | |
| 103 | ' |
| 104 | |
| 105 | test_done |