1#!/bin/sh
   2test_description='errors in upload-pack'
   4. ./test-lib.sh
   6D=`pwd`
   8corrupt_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}
  15test_expect_success 'setup and corrupt repository' '
  17        echo file >file &&
  19        git add file &&
  20        git rev-parse :file &&
  21        git commit -a -m original &&
  22        test_tick &&
  23        echo changed >file &&
  24        git commit -a -m changed &&
  25        corrupt_repo HEAD:file
  26'
  28test_expect_success 'fsck fails' '
  30        test_must_fail git fsck
  31'
  32test_expect_success 'upload-pack fails due to error in pack-objects packing' '
  34        printf "0032want %s\n00000009done\n0000" \
  36                $(git rev-parse HEAD) >input &&
  37        test_must_fail git upload-pack . <input >/dev/null 2>output.err &&
  38        test_i18ngrep "unable to read" output.err &&
  39        test_i18ngrep "pack-objects died" output.err
  40'
  41test_expect_success 'corrupt repo differently' '
  43        git hash-object -w file &&
  45        corrupt_repo HEAD^^{tree}
  46'
  48test_expect_success 'fsck fails' '
  50        test_must_fail git fsck
  51'
  52test_expect_success 'upload-pack fails due to error in rev-list' '
  53        printf "0032want %s\n0034shallow %s00000009done\n0000" \
  55                $(git rev-parse HEAD) $(git rev-parse HEAD^) >input &&
  56        test_must_fail git upload-pack . <input >/dev/null 2>output.err &&
  57        grep "bad tree object" output.err
  58'
  59test_expect_success 'upload-pack error message when bad ref requested' '
  61        printf "0045want %s multi_ack_detailed\n00000009done\n0000" \
  63                "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef" >input &&
  64        test_must_fail git upload-pack . <input >output 2>output.err &&
  65        grep -q "not our ref" output.err &&
  66        ! grep -q multi_ack_detailed output.err
  67'
  68test_expect_success 'upload-pack fails due to error in pack-objects enumeration' '
  70        printf "0032want %s\n00000009done\n0000" \
  72                $(git rev-parse HEAD) >input &&
  73        test_must_fail git upload-pack . <input >/dev/null 2>output.err &&
  74        grep "bad tree object" output.err &&
  75        grep "pack-objects died" output.err
  76'
  77test_expect_success 'create empty repository' '
  79        mkdir foo &&
  81        cd foo &&
  82        git init
  83'
  85test_expect_success 'fetch fails' '
  87        test_must_fail git fetch .. master
  89'
  91test_done