#! /bin/sh
#
#  file1 lastpiecelen   = 1000000 % piecelen
#  file2 secondpiecepos = piecelen - (1000000*1) % piecelen
#  file3 secondpiecepos = piecelen - (1000000*2) % piecelen
#  file4 secondpiecepos = piecelen - (1000000*3) % piecelen
#  file5 secondpiecepos = piecelen - (1000000*4) % piecelen

function begintest() {
  local name="$1"
  echo $name
  cd ..
  mkdir $name $name/file123 $name/file12345
  ln -s ../base/file1 $name/
  ln -s ../../base/file123/file{1,2,3} $name/file123
  ln -s ../../base/file12345/file{1,2,3,4,5} $name/file12345
  cd $name
}

set -e

corruptdata=../tools/corruptdata
modsize=../tools/modsize
piecelen=262144
rm -rf base torrents test???

mkdir base base/file123 base/file12345 torrents
dd if=/dev/urandom of=base/file1 bs=1000 count=1000 2>/dev/null
cp base/file1 base/file123
dd if=/dev/urandom of=base/file123/file2 bs=1000 count=1000 2>/dev/null
dd if=/dev/urandom of=base/file123/file3 bs=1000 count=1000 2>/dev/null
cp base/file123/file1 base/file12345
cp base/file123/file2 base/file12345
cp base/file123/file3 base/file12345
dd if=/dev/urandom of=base/file12345/file4 bs=1000 count=1000 2>/dev/null
dd if=/dev/urandom of=base/file12345/file5 bs=1000 count=1000 2>/dev/null
btmakemetafile base/file1 notspecified >/dev/null 2>&1
btmakemetafile base/file123 notspecified >/dev/null 2>&1
btmakemetafile base/file12345 notspecified >/dev/null 2>&1
mv base/*.torrent torrents
cd base

begintest test001

begintest test002
rm file1 file123/file1 file12345/file1

begintest test003
rm file1 file123/file2 file12345/file2

begintest test004
rm file1 file123/file3 file12345/file5

begintest test005
rm file1 file123/file1 file123/file2 file12345/file1 file12345/file2

begintest test006
rm file1 file123/file1 file123/file3 file12345/file1 file12345/file3

begintest test007
rm file1 file123/* file12345/file1 file12345/file5

begintest test008
rm file1 file123/file2 file123/file3 file12345/file2 file12345/file3

begintest test009
rm file1 file123/* file12345/file3 file12345/file5

begintest test010
rm file1 file123/* file12345/file4 file12345/file5

begintest test011
rm file1 file123/* file12345/*

begintest test012
$corruptdata 0 1 file1 file123/file1 file12345/file1

begintest test013
$corruptdata 500000 500001 file1 file123/file1 file12345/file1

begintest test014
$corruptdata 999999 1000000 file1 file123/file1 file12345/file1

begintest test015
rm file1
$corruptdata 0 1 file123/file2 file12345/file2

begintest test016
rm file1
$corruptdata 500000 500001 file123/file2 file12345/file2

begintest test017
rm file1
$corruptdata 999999 1000000 file123/file2 file12345/file2

begintest test018
rm file1
$corruptdata 0 1 file123/file3 file12345/file5

begintest test019
rm file1
$corruptdata 500000 500001 file123/file3 file12345/file5

begintest test020
rm file1
$corruptdata 999999 1000000 file123/file3 file12345/file5

begintest test025
rm file1
$corruptdata 0 1 file123/file{1,2,3} file12345/file{1,2,3,4,5}

begintest test026
rm file1
$corruptdata 500000 500001 file123/file{1,2,3} file12345/file{1,2,3,4,5}

begintest test027
rm file1
$corruptdata 999999 1000000 file123/file{1,2,3} file12345/file{1,2,3,4,5}

begintest test028
$corruptdata 0 1 file123/file1 file12345/file1
$corruptdata 999999 1000000 file123/file1 file12345/file1

begintest test029
rm file1
$corruptdata 0 1 file123/file1 file12345/file1
$corruptdata 500000 500001 file123/file1 file12345/file1
$corruptdata 999999 1000000 file123/file1 file12345/file1

begintest test030
rm file1
$corruptdata 0 1 file123/file2 file12345/file2
$corruptdata 999999 1000000 file123/file2 file12345/file2

begintest test031
rm file1
$corruptdata 0 1 file123/file2 file12345/file2
$corruptdata 500000 500001 file123/file2 file12345/file2
$corruptdata 999999 1000000 file123/file2 file12345/file2

begintest test032
rm file1
$corruptdata 0 1 file123/file3 file12345/file5
$corruptdata 999999 1000000 file123/file3 file12345/file5

begintest test033
rm file1
$corruptdata 0 1 file123/file3 file12345/file5
$corruptdata 500000 500001 file123/file3 file12345/file5
$corruptdata 999999 1000000 file123/file3 file12345/file5

begintest test034
rm file1
$corruptdata 0 1 file123/file{1,2,3} file12345/file{1,2,3,4,5}
$corruptdata 999999 1000000 file123/file{1,2,3} file12345/file{1,2,3,4,5}

begintest test035
rm file1
$corruptdata 0 1 file123/file{1,2,3} file12345/file{1,2,3,4,5}
$corruptdata 500000 500001 file123/file{1,2,3} file12345/file{1,2,3,4,5}
$corruptdata 999999 1000000 file123/file{1,2,3} file12345/file{1,2,3,4,5}

begintest test036
t=$((piecelen))
$corruptdata $((t)) $((t+1)) file1 file123/file1 file12345/file1

begintest test037
t=$((piecelen))
$corruptdata $((t-1)) $((t)) file1 file123/file1 file12345/file1

begintest test038
rm file1
t=$((piecelen - 1000000 % piecelen))
$corruptdata $((t)) $((t+1)) file123/file2 file12345/file2

begintest test039
rm file1
t=$((piecelen - 1000000 % piecelen))
$corruptdata $((t-1)) $((t)) file123/file2 file12345/file2

begintest test040
rm file1 
t=$((piecelen - (1000000*2) % piecelen))
$corruptdata $((t)) $((t+1)) file123/file3 file12345/file3

begintest test041
rm file1
t=$((piecelen - (1000000*2) % piecelen))
$corruptdata $((t-1)) $((t)) file123/file3 file12345/file3

begintest test042
rm file1 file123/*
t=$((piecelen - (1000000*4) % piecelen))
$corruptdata $((t)) $((t+1)) file12345/file5

begintest test043
rm file1 file123/*
t=$((piecelen - (1000000*4) % piecelen))
$corruptdata $((t-1)) $((t)) file12345/file5

begintest test044
$modsize -1 file1 file123/file1 file12345/file1

begintest test045
rm file1
$modsize -1 file123/file2 file12345/file2

begintest test046
rm file1
$modsize -1 file123/file3 file12345/file3

begintest test047
rm file1 file123/*
$modsize -1 file12345/file5

begintest test048
$modsize -1 file1 file123/file1 file12345/file1
$corruptdata 999998 999999 file1 file123/file1 file12345/file1

begintest test049
rm file1
$modsize -1 file123/file2 file12345/file2
$corruptdata 999998 999999 file123/file2 file12345/file2

begintest test050
rm file1
$modsize -1 file123/file3 file12345/file3
$corruptdata 999998 999999 file123/file3 file12345/file3

begintest test051
rm file1 file123/*
$modsize -1 file12345/file5
$corruptdata 999998 999999 file12345/file5

begintest test052
$modsize -1 file1 file123/file1 file12345/file1
$corruptdata 0 1 file1 file123/file1 file12345/file1

begintest test053
rm file1
$modsize -1 file123/file2 file12345/file2
$corruptdata 0 1 file123/file2 file12345/file2

begintest test054
rm file1
$modsize -1 file123/file3 file12345/file3
$corruptdata 0 1 file123/file3 file12345/file3

begintest test055
rm file1 file123/*
$modsize -1 file12345/file5
$corruptdata 0 1 file12345/file5

begintest test056
$modsize -1 file1 file123/file1 file12345/file1
$corruptdata 500000 500001 file1 file123/file1 file12345/file1

begintest test057
rm file1
$modsize -1 file123/file2 file12345/file2
$corruptdata 500000 500001 file123/file2 file12345/file2

begintest test058
rm file1
$modsize -1 file123/file3 file12345/file3
$corruptdata 500000 500001 file123/file3 file12345/file3

begintest test059
rm file1 file123/*
$modsize -1 file12345/file5
$corruptdata 500000 500001 file12345/file5

begintest test060
$modsize 1 file1 file123/file1 file12345/file1

begintest test061
rm file1 
$modsize 1 file123/file2 file12345/file2

begintest test062
rm file1 
$modsize 1 file123/file3 file12345/file3

begintest test063
rm file1 file123/*
$modsize 1 file12345/file5

begintest test064
$modsize 1 file1 file123/file1 file12345/file1
$corruptdata 0 1 file1 file123/file1 file12345/file1

begintest test065
rm file1 
$modsize 1 file123/file2 file12345/file2
$corruptdata 0 1 file123/file2 file12345/file2

begintest test066
rm file1 
$modsize 1 file123/file3 file12345/file3
$corruptdata 0 1 file123/file3 file12345/file3

begintest test067
rm file1 file123/*
$modsize 1 file12345/file5
$corruptdata 0 1 file12345/file5

begintest test068
$corruptdata 999999 1000000 file1 file123/file1 file12345/file1
$modsize 1 file1 file123/file1 file12345/file1

begintest test069
rm file1 
$corruptdata 999999 1000000 file123/file2 file12345/file2
$modsize 1 file123/file2 file12345/file2

begintest test070
rm file1 
$corruptdata 999999 1000000 file123/file3 file12345/file3
$modsize 1 file123/file3 file12345/file3

begintest test071
rm file1 file123/*
$corruptdata 999999 1000000 file12345/file5
$modsize 1 file12345/file5

begintest test072
$corruptdata 500000 500001 file1 file123/file1 file12345/file1
$modsize 1 file1 file123/file1 file12345/file1

begintest test073
rm file1 
$corruptdata 500000 500001 file123/file2 file12345/file2
$modsize 1 file123/file2 file12345/file2

begintest test074
rm file1 
$corruptdata 500000 500001 file123/file3 file12345/file3
$modsize 1 file123/file3 file12345/file3

begintest test075
rm file1 file123/*
$corruptdata 500000 500001 file12345/file5
$modsize 1 file12345/file5

begintest test076
t=$((1000000 % piecelen))
$modsize -$t file1 file123/file1 file12345/file1
