git_update/performance_tests.sh
2024-07-04 15:58:13 +02:00

266 lines
7.3 KiB
Bash
Executable File

#!/bin/bash
. driglibash-base
. creation_repo.sh &> /dev/null
FILES_TO_KEEP='sample0'
REMOTE="./remote/performance_testing"
Help()
{
echo "
NAME
performance_tests.sh
SYNOPSIS
performance_tests.sh [-a] [-h] [-n number]
OPTIONS
-a excutes all the tests.
-n number executes test number
-h prints the help.
DESCRIPTION
This script is in writing. It allows you to measure memory and bandwidth usage. The first four test different cloning methods. Te following apply changes to the local remote before testing fetching and merging commands.
TEST0: classic cloning
TEST1: --single-branch
TEST2: --depth=1 --no-single-branch
TEST3: --depth=1
TEST4: sparse-checking 1M sample0 only
_________________________________________
TEST5: classic fetching and merging after addition of 1M file
TEST6: "
}
#USEFUL FUNCTIONS FOR THE TESTS
get_storage_used(){
mem=$(du $1 | tail -n1 | tr -cd [:digit:])
}
get_bandwidth(){
if [ "$2"="cloning"]; then
bw=$(grep -e "Receiving objects:" $1 | grep -o "Receiving objects: [[:alnum:]%/(),. ]*" | tail -n1)
echo "1 : $bw"
bw=${bw#*,}
echo "2 : $bw"
elif [ "$2"="fetching" ]; then
bw=$(grep -e "\->" merging_text| grep -o "[[:digit:].]* -> [[:digit:].]* [[:alpha:]]*")
echo "bw vaut $bw"
fi
}
#TESTS ON THE INITIAL POPULATING OF THE REPO
test0(){
section TEST0
echo "TEST 0 : case of classic cloning."
git clone --progress --no-local $1 2> cloning_text
get_storage_used "./$REPO_NAME"
get_bandwidth cloning_text
echo "memory usage in a classic cloning : $mem"
echo "bandwidth usage : $bw"
run rm cloning_text
run rm -rf $REPO_NAME
}
test1(){
section TEST1
echo "TEST 1 : case of --single-branch cloning."
git clone --progress --single-branch --no-local $1 2> cloning_text
get_storage_used ./$REPO_NAME
get_bandwidth cloning_text
echo "memory usage in a --single-branch cloning : $mem"
echo "bandwidth usage : $bw"
run rm cloning_text
run rm -rf $REPO_NAME
}
test2(){
section TEST2
echo "TEST 2 : case of --depth=1 --no-single-branch"
git clone --progress --depth=1 --no-local --no-single-branch $1 2> cloning_text
get_storage_used ./$REPO_NAME
get_bandwidth cloning_text
echo "memory usage in a --depth=1 --no-single-branch cloning : $mem"
echo "bandwidth usage : $bw"
run rm cloning_text
run rm -rf $REPO_NAME
}
test3(){
section TEST3
echo "TEST 3 : case of --depth=1 with single-branch (default))"
git clone --progress --single-branch --no-local --depth=1 $1 2> cloning_text
get_storage_used ./$REPO_NAME
get_bandwidth cloning_text
echo "memory usage in a --depth=1 with single-branch cloning : $mem"
echo "bandwidth usage : $bw"
run rm cloning_text
run rm -rf $REPO_NAME
}
test4(){
section TEST4
run mkdir $REPO_NAME
run echo "TEST 4 : case of sparse-checking only $FILES_TO_KEEP with depth=1"
#creating a git repo with sparse-checking settings
run cd $REPO_NAME
run git init -q
run git config core.sparsecheckout true
run echo $FILES_TO_KEEP >> .git/info/sparse-checkout
#pulling from the remote with sparse-checking enabled
run git remote add -f origin ../$1 &> /dev/null
run git pull origin main &> /dev/null
get_storage_used .
echo "memory usage: $mem"
echo "bandwidth usage unknown"
cd ..
run rm -rf $REPO_NAME
}
#TESTS ON THE UPDATING OF THE REPOSITORY
#WITHOUT CHANGING ANYTHING
test5(){
section TEST5
run echo 'TEST 5 : case of classic fetching and merging, after addition of a 1M file'
run git clone $1 &> /dev/null
cd $REPO_NAME
run git fetch --progress origin &> /dev/null
run git merge --progress origin &> /dev/null
get_storage_used .
mem_before=$mem
#modification of the remote repo
cd ../$REMOTE
create_random_file 'sample5' '1M' #adding a 1M file
run git add sample5
run git commit --quiet -m"fourth 1M sample created"
cd ../../$REPO_NAME
run git fetch --progress origin &> fetching_text
run git merge --progress &> merging_text
get_storage_used .
mem_after=$mem
mem=$(($mem_after-$mem_before))
get_bandwidth . fetching
echo "memory usage: +$mem"
echo "bandwidth usage: $bw"
cd ../$REMOTE
git reset --hard -q a99be63309fc4f4600210000583546d966d12d4f
cd ../..
rm -rf performance_testing
}
test6(){
section TEST6
run echo 'TEST 6 : case of classic fetching and merging, after removal of a 1M file'
run git clone $1 &> /dev/null
cd $REPO_NAME
run git fetch --progress origin &> /dev/null
run git merge --progress origin &> /dev/null
get_storage_used .
mem_before=$mem
#modification of the remote repo
cd ../$REMOTE
run rm sample0
run git add sample0
run git commit --quiet -m"1M sample0 deleted"
cd ../../$REPO_NAME
run git fetch --progress origin &> fetching_text
run git merge --progress &> merging_text
get_storage_used .
mem_after=$mem
mem=$(($mem_after-$mem_before))
get_bandwidth . fetching
echo "memory usage: $mem"
echo "bandwidth usage: $bw"
cd ../$REMOTE
git reset --hard -q a99be63309fc4f4600210000583546d966d12d4f
cd ../..
rm -rf performance_testing
}
test7(){
section TEST7
run echo 'TEST 7 : case of classic fetching and merging, after addition then removal of a 1M file'
run git clone $1 &> /dev/null
cd $REPO_NAME
run git fetch --progress origin &> /dev/null
run git merge --progress origin &> /dev/null
get_storage_used .
mem_before=$mem
#modification of the remote repo
cd ../$REMOTE
create_random_file 'sample5' '1M' #adding a 1M file
run git add sample5
run git commit --quiet -m"fourth 1M sample created"
run rm sample5
run git add sample5
run git commit --quiet -m"1M "sample5" deleted"
cd ../../$REPO_NAME
run git fetch --progress origin &> fetching_text
run git merge --progress &> merging_text
get_storage_used .
mem_after=$mem
mem=$(($mem_after-$mem_before))
echo "memory usage: $mem"
echo "bandwidth usage unknown"
cd ../$REMOTE
git reset --hard -q a99be63309fc4f4600210000583546d966d12d4f
cd ../..
rm -rf performance_testing
}
#test 7 : --depth=1
#normalement supprime aussi l'historique
while getopts ":hn:a" option; do
case $option in
h) # display Help
Help
exit;;
n)
TEST_NUM=$OPTARG;;
a)
ALL_TESTS=true;;
\?) # Invalid option
echo "Error: Invalid option here"
exit;;
esac
done
if [ "$ALL_TESTS" = true ]; then
test0 $REMOTE
test1 $REMOTE
test2 $REMOTE
test3 $REMOTE
test4 $REMOTE
test5 $REMOTE
test6 $REMOTE
test7 $REMOTE
elif [ -n "$TEST_NUM" ]; then
case $TEST_NUM in
0)
test0 $REMOTE;;
1)
test1 $REMOTE;;
2)
test2 $REMOTE;;
3)
test3 $REMOTE;;
4)
test4 $REMOTE;;
5)
test5 $REMOTE;;
6)
test6 $REMOTE;;
7)
test7 $REMOTE;;
*)
echo "Error: Invalid test number"
die;;
esac
else
Help
fi
#optimize in case all tests are run
#adapt in case of different units