test directory complete

This commit is contained in:
eleonore12345 2024-07-24 13:57:26 +02:00
parent 9422ddebb9
commit ed37d09fa0
7 changed files with 1228 additions and 99 deletions

View File

@ -142,6 +142,7 @@ The same rules apply to submodules as to the rest of the repository. In the .git
##Tests ##Tests
### Script description ### Script description
### README extract
The script consists of twenty-nine tests (listed in the results below), based on three functions: generate_random_file, get_storage_used and get_bandwidth. The script consists of twenty-nine tests (listed in the results below), based on three functions: generate_random_file, get_storage_used and get_bandwidth.
generate_random_file uses the bash command dd and /dev/random. generate_random_file uses the bash command dd and /dev/random.
@ -150,13 +151,16 @@ get_bandwidth retrieves the output of Git commands and extracts the traffic disp
The first five tests concern cloning. The first five tests concern cloning.
The following tests involve updating the repository using different commands, with three cases for each command: after adding a file, after deleting a file, after adding then deleting a file. The following tests involve updating the repository using different commands, with three cases for each command: after adding a file, after deleting a file, after adding then deleting a file.
### Help extract
### README extract NAME
performance_tests.sh
NAME performance_tests.sh SYNOPSIS
SYNOPSIS performance_tests.sh [-a] [-h] [-n number]OPTIONS performance_tests.sh [-a] [-h] [-n number]
-a excutes all the tests. OPTIONS
-n number executes test number -h prints the help. -a executes all the tests.
-n number executes test number.
- c cleans.
-h prints the help.
### Results ### Results
======================================= Tests on the initial populating of the repository ======================================= Tests on the initial populating of the repository

View File

@ -0,0 +1,34 @@
## Introduction
test_git_update.sh performs functional tests on git_update.sh to verify that it is behaving as planned.
## Tests
The script consists in nine tests. The three first ones test the cloning and the following test the updating of git_update.sh.
Each test consists of calling git_update.sh, eventually after some modifications, and compare the result with the expected result. The comparison is done by *_check functions, which modify each a boolean *_result.
If all booleans of checks conducted are true, then the boolean case* is also true and the test is a success.
## Help extract
NAME
test_git_update.sh
SYNOPSIS
test_git_update.sh [-a] [-h] [-c] [-n number]
OPTIONS
-a excutes all the tests and cleans.
-n number executes test number.
-c cleans.
-h prints the help.
DESCRIPTION
TEST0: git cloned in an empty directory
TEST1: git cloned in an empty directory with tag
TEST2: git cloned in an empty directory with branch
TEST3: git updated fast-forward on main
TEST4: git updated fast-forward on main with untracked file
TEST5: git updated with underlying conflict on main
TEST6: git updated, switching to another branch, deleting and adding files in the process
TEST7: git updated, switching to a tag, deleting and adding files in the process
TEST8: git updated, before and after changing a tag, deleting and adding files in the process
TEST9: git updated fast-forward on submodule on main"
## Debugging
In case of problem, it is adviced to run test_git_update.sh -c to clean the repository.
This will force test_repo_creation.sh to run again and provide a new test repository.

View File

@ -1,20 +1,18 @@
#! /bin/bash #! /bin/bash
#importer driglibash
echo "<execution of test_git_update.sh>" echo "<execution of test_git_update.sh>"
Help() Help()
{ {
echo " echo "
NAME NAME
test_git_update.sh test_git_update.sh
SYNOPSIS SYNOPSIS
test_git_update.sh [-a] [-h] [-n number] test_git_update.sh [-a] [-h] [-c] [-n number]
OPTIONS OPTIONS
-a excutes all the tests. -a excutes all the tests and cleans.
-n number executes test number -n number executes test number.
-c cleans.
-h prints the help. -h prints the help.
DESCRIPTION DESCRIPTION
Tests on the initial cloning
TEST0: git cloned in an empty directory TEST0: git cloned in an empty directory
TEST1: git cloned in an empty directory with tag TEST1: git cloned in an empty directory with tag
TEST2: git cloned in an empty directory with branch TEST2: git cloned in an empty directory with branch
@ -24,8 +22,7 @@ DESCRIPTION
TEST6: git updated, switching to another branch, deleting and adding files in the process TEST6: git updated, switching to another branch, deleting and adding files in the process
TEST7: git updated, switching to a tag, deleting and adding files in the process TEST7: git updated, switching to a tag, deleting and adding files in the process
TEST8: git updated, before and after changing a tag, deleting and adding files in the process TEST8: git updated, before and after changing a tag, deleting and adding files in the process
TEST9: git updated fast-forward on submodule on main TEST9: git updated fast-forward on submodule on main"
"
} }
#Variables definitions #Variables definitions
@ -33,7 +30,7 @@ WORKING_DIRECTORY=$(pwd)
REPO_NAME="git_update_testing" REPO_NAME="git_update_testing"
SUBMODULE_NAME="submodule" SUBMODULE_NAME="submodule"
REMOTE="file://${WORKING_DIRECTORY}/remote/$REPO_NAME" #we must trick git_update.sh into thinking we are not working in local, otherwise depth=1 is not respected REMOTE="file://${WORKING_DIRECTORY}/remote/$REPO_NAME" #we must trick git_update.sh into thinking we are not working in local, otherwise depth=1 is not respected
LOCAL_REMOTE="/${WORKING_DIRECTORY}/remote/$REPO_NAME" #cd does not understand file:// LOCAL_REMOTE="${WORKING_DIRECTORY}/remote/$REPO_NAME" #cd does not understand file://
LOCAL_REMOTE_SUBMODULE="/${WORKING_DIRECTORY}/remote/$SUBMODULE_NAME" LOCAL_REMOTE_SUBMODULE="/${WORKING_DIRECTORY}/remote/$SUBMODULE_NAME"
FILENAMES=("sample0" "sample1 sample3") FILENAMES=("sample0" "sample1 sample3")
FILENAMES_TAG=("sample0 sample1 sample4") FILENAMES_TAG=("sample0 sample1 sample4")
@ -50,13 +47,25 @@ TAG_NAME="tagging_point"
TAG_FLAG="tag_flag" TAG_FLAG="tag_flag"
BRANCH_NAME="secondary" BRANCH_NAME="secondary"
bash creation_repo.sh -s #&> /dev/null #preparing the test repository
bash ../test_repo_creation.sh -s &> /dev/null
#output function #output function
section(){ section(){
echo "------------------------------ $1 ------------------------------" echo "------------------------------ $1 ------------------------------"
} }
#clean
clean(){
if [ -d remote ]; then
rm -rf remote
fi
if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME
fi
echo "<cleaned>"
}
#check functions #check functions
cloning_check(){ cloning_check(){
local input=("$@") local input=("$@")
@ -317,10 +326,11 @@ test0 (){
if [ -d $REPO_NAME ]; then if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME rm -rf $REPO_NAME
fi fi
./git_update.sh -d $REPO_NAME $REMOTE &> /dev/null ../../src/git_update.sh -d $REPO_NAME $REMOTE &> /dev/null
#checks #checks
cloning_check $REPO_NAME ${FILENAMES[@]} cloning_check $REPO_NAME ${FILENAMES[@]}
history_check $REPO_NAME history_check $REPO_NAME
case0=$((history_result+cloning_result)) case0=$((history_result+cloning_result))
if [ "$case0" = "0" ]; then if [ "$case0" = "0" ]; then
echo "case 0, in a empty directory: OK" echo "case 0, in a empty directory: OK"
@ -336,7 +346,7 @@ test1(){
if [ -d $REPO_NAME ]; then if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME rm -rf $REPO_NAME
fi fi
./git_update.sh -d $REPO_NAME -r $TAG_NAME $REMOTE &> /dev/null ../../src/git_update.sh -d $REPO_NAME -r $TAG_NAME $REMOTE &> /dev/null
#checks #checks
cloning_check $REPO_NAME ${FILENAMES_TAG[@]} cloning_check $REPO_NAME ${FILENAMES_TAG[@]}
history_check $REPO_NAME history_check $REPO_NAME
@ -357,7 +367,7 @@ test2(){
if [ -d $REPO_NAME ]; then if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME rm -rf $REPO_NAME
fi fi
./git_update.sh -d $REPO_NAME -r $BRANCH_NAME $REMOTE &> /dev/null ../../src/git_update.sh -d $REPO_NAME -r $BRANCH_NAME $REMOTE &> /dev/null
#checks #checks
cloning_check $REPO_NAME ${FILENAMES_BRANCH[@]} cloning_check $REPO_NAME ${FILENAMES_BRANCH[@]}
history_check $REPO_NAME history_check $REPO_NAME
@ -384,13 +394,13 @@ test3(){
modification_remote modification_remote
#make git_update.sh update the repository #make git_update.sh update the repository
cd $REPO_NAME cd $REPO_NAME
../git_update.sh $REMOTE &> /dev/null ../../../src/git_update.sh $REMOTE &> /dev/null
cd .. cd ..
#checks #checks
modification_check $REPO_NAME modification_check $REPO_NAME
history_check $REPO_NAME history_check $REPO_NAME
#cleaning #cleaning
undo_modification_remote #undo_modification_remote
case3=$((modification_result+history_result)) case3=$((modification_result+history_result))
if [ "$case3" = "0" ]; then if [ "$case3" = "0" ]; then
@ -415,7 +425,7 @@ test4(){
add_untracked_file $REPO_NAME add_untracked_file $REPO_NAME
#make git_update.sh update the repository #make git_update.sh update the repository
cd $REPO_NAME cd $REPO_NAME
../git_update.sh $REMOTE &> /dev/null ../../../src/git_update.sh $REMOTE &> /dev/null
cd .. cd ..
#checks #checks
modification_check $REPO_NAME modification_check $REPO_NAME
@ -448,7 +458,7 @@ test5(){
modification_remote modification_remote
#make git_update.sh update the local repository #make git_update.sh update the local repository
cd $REPO_NAME cd $REPO_NAME
../git_update.sh $REMOTE &> /dev/null ../../../src/git_update.sh $REMOTE &> /dev/null
cd .. cd ..
#checks #checks
conflict_check $REPO_NAME conflict_check $REPO_NAME
@ -474,7 +484,7 @@ test6(){
git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null
#call git update with another branch #call git update with another branch
cd $REPO_NAME cd $REPO_NAME
../git_update.sh -r $BRANCH_NAME $REMOTE &> /dev/null ../../../src/git_update.sh -r $BRANCH_NAME $REMOTE &> /dev/null
cd .. cd ..
#checks #checks
switching_branch_check $REPO_NAME switching_branch_check $REPO_NAME
@ -498,7 +508,7 @@ test7(){
git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null
#call git_update.sh with a tag #call git_update.sh with a tag
cd $REPO_NAME cd $REPO_NAME
../git_update.sh -r $TAG_NAME $REMOTE &> /dev/null ../../../src/git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
cd .. cd ..
#checks #checks
switching_tag_check $REPO_NAME switching_tag_check $REPO_NAME
@ -522,7 +532,7 @@ test8(){
git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null
#call git_update.sh with a tag #call git_update.sh with a tag
cd $REPO_NAME cd $REPO_NAME
../git_update.sh -r $TAG_NAME $REMOTE &> /dev/null ../../../src/git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
cd .. cd ..
#intermediate check to make sure that we are starting on the initial position of the tag #intermediate check to make sure that we are starting on the initial position of the tag
switching_tag_check $REPO_NAME switching_tag_check $REPO_NAME
@ -530,7 +540,7 @@ test8(){
changing_tag changing_tag
#call git_update.sh again to go to the new position of the tag #call git_update.sh again to go to the new position of the tag
cd $REPO_NAME cd $REPO_NAME
../git_update.sh -r $TAG_NAME $REMOTE &> /dev/null ../../../src/git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
cd .. cd ..
#put back the remote in its initial state #put back the remote in its initial state
undo_changing_tag undo_changing_tag
@ -561,7 +571,7 @@ test9(){
#make git_update.sh update the repository #make git_update.sh update the repository
cd $REPO_NAME cd $REPO_NAME
echo "moment fatidique" echo "moment fatidique"
../git_update.sh $REMOTE #&> /dev/null ../../../src/git_update.sh $REMOTE &> /dev/null
cd .. cd ..
#checks #checks
modification_submodule_check $REPO_NAME modification_submodule_check $REPO_NAME
@ -577,17 +587,22 @@ test9(){
fi fi
} }
while getopts ":hn:a" option; do ALL_TESTS="false"
TEST_NUM=""
while getopts ":hcn:a" option; do
case $option in case $option in
h) # display Help h) # display Help
Help Help
exit;; exit;;
n) c) #clean
clean;;
n) #perform specific test
TEST_NUM=$OPTARG;; TEST_NUM=$OPTARG;;
a) a) #perform all tests and clean
ALL_TESTS="true";; ALL_TESTS="true";;
\?) # Invalid option \?) # Invalid option
echo "Error: Invalid option here" echo "Error: Invalid option"
Help
exit;; exit;;
esac esac
done done
@ -603,6 +618,7 @@ if [ "$ALL_TESTS" = "true" ]; then
test7 test7
test8 test8
test9 test9
clean
elif [ -n "$TEST_NUM" ]; then elif [ -n "$TEST_NUM" ]; then
#in order to only create the temporary clone once if we execute all tests #in order to only create the temporary clone once if we execute all tests
case $TEST_NUM in case $TEST_NUM in
@ -630,6 +646,4 @@ elif [ -n "$TEST_NUM" ]; then
echo "Error: Invalid test number" echo "Error: Invalid test number"
exit;; exit;;
esac esac
else
Help
fi fi

File diff suppressed because it is too large Load Diff

View File

@ -1,60 +1,27 @@
## Testing of different cloning methods ## Introduction
Our objective is to find the least-consuming method in terms of memory and bandwidth resources. Our objective is to find the least-consuming method in terms of memory and bandwidth resources.
We are interested in cloning one specific state of the repository. We are not interested in its history or the possibility to change it from the server where it has been cloned. The first step is done by the script creation_repo.sh which creates an adequate repository to act as a local remote. The testing in itself is done by performance_tests.sh. We are interested in cloning one specific state of the repository. We are not interested in its history or the possibility to change it from the server where it has been cloned.
The tests rely on a repository created by test_repo_creation.sh. It measures memory and bandwidth usage for different git commande.
## Creation of the test repository ## Tests
The script creation_repo.sh creates a remote/performance_testing repository. The script consists of twenty-nine tests (listed in the results below), based on three functions: generate_random_file, get_storage_used and get_bandwidth.
NAME
creation_repo.sh
SYNOPSIS
creation_repo.sh [-h] [-s]
DESCRIPTION
This script creates a ./remote directory in the current directory, then creates a remote/performance_testing git repository.
This git repository is filled with randomly generated binary files described in the readme.md.
OPTIONS
-h prints the help.
-s creates a submodule remote/submodule_for_performance_testing and includes it in remote/performance_testing. "
Here is a history of the commits: generate_random_file uses the bash command dd and /dev/random.
### branch main get_storage_used uses the bash command du.
commit sample0 1M created (tag: start) get_bandwidth retrieves the output of Git commands and extracts the traffic displayed. This does not take submodule traffic into account.
commit sample1 1M created
commit sample3 1M created
commit sample4 5M created
commit sample4 5M deleted
[if -s is selected] commit adding submodule_for_performance_testing module
### branch secondary
commit sample0 1M created
commit sample1 1M created
commit sample2 500K created
Which gives the latest state: The first five tests concern cloning.
### branch main The following tests involve updating the repository using different commands, with three cases for each command: after adding a file, after deleting a file, after adding then deleting a file.
sample0 1M
sample1 1M
sample3 1M
### branch secondary
sample0 1M
sample1 1M
sample2 500K
If the -s option is selected, submodule_for_performance_testing is created with this history of commits: ## Help extract
### branch main
commit first 1M sample created
which gives the latest state:
### branch main
sub_sample0
## Testing
The script performance_tests.sh measures memory and bandwidth usage for different git commands. It sources the script driglibash-base. It executes creation_repo.sh in order to have an adequate repository to test on.
NAME NAME
performance_tests.sh performance_tests.sh
SYNOPSIS SYNOPSIS
performance_tests.sh [-a] [-h] [-n number] performance_tests.sh [-a] [-h] [-n number]
OPTIONS OPTIONS
-a excutes all the tests. -a executes all the tests.
-n number executes test number -n number executes test number.
-c cleans.
-h prints the help. -h prints the help.
DESCRIPTION DESCRIPTION
This script allows you to measure memory and bandwidth usage. The first five test different cloning methods. Te following apply changes to the local remote before testing fetching and merging commands. This script allows you to measure memory and bandwidth usage. The first five test different cloning methods. Te following apply changes to the local remote before testing fetching and merging commands.
@ -96,3 +63,6 @@ DESCRIPTION
TEST27: --depth=1 fetching+merging -s ours with reflog and gc after addition of a 1M file TEST27: --depth=1 fetching+merging -s ours with reflog and gc after addition of a 1M file
TEST28: --depth=1 fetching+merging -s ours with reflog and gc after removal of a 1M file TEST28: --depth=1 fetching+merging -s ours with reflog and gc after removal of a 1M file
TEST29: --depth=1 fetching+merging -s ours with reflog and gc after addition then removal of a 1M file" TEST29: --depth=1 fetching+merging -s ours with reflog and gc after addition then removal of a 1M file"
## To go further
To learn more about the process of testing different git methods conducted, please refer to doc/developement_explanations.md.

51
test/readme Normal file
View File

@ -0,0 +1,51 @@
# Introduction
performance_tests contains tests who compare the memory and bandwidth usage of different Git commande in order to compare them.
functional_tests contains tests who verify that git_update.sh is behaving as expected.
Both rely on the same test repository that is created by test_repo_creation.sh.
# Creation of the test repository
The script test_repo_creation.sh creates a remote/$REPO_NAME repository.
## Help extract
NAME
test_repo_creation.sh
SYNOPSIS
test_repo_creation.sh [-h] [-l] [-s]
DESCRIPTION
This script creates a ./remote directory in the current directory, then creates a remote/$REPO_NAME git repository.
This git repository is filled with randomly generated binary files described in the readme.md.
OPTIONS
-h prints the help.
-l [link] adds the linked online repository as remote and pushes changes to it. Must be en empty repository.
-s creates a submodule remote/$SUB_NAME and includes it in remote/$REPO_NAME.
# Description of the created repository
Here is a history of the commits:
### branch main
commit sample0 1M created
commit sample1 1M created
commit sample3 5M created
commit sample4 1M created
commit sample3 5M deleted (tag : tagging_point)
[if -s is selected] commit adding $SUB_NAME module
### branch secondary
commit sample0 1M created
commit sample1 1M created
commit sample2 500K created
Which gives the latest state:
### branch main
sample0 1M
sample1 1M
sample4 1M
### branch secondary
sample0 1M
sample1 1M
sample2 500K
If the -s option is selected, the submodule is created, and integrated in the last commit of main, with this history of commits:
### branch main
commit first 1M sample created
which gives the latest state:
### branch main
sub_sample0

View File

@ -3,16 +3,16 @@ Help()
{ {
echo " echo "
NAME NAME
creation_repo.sh test_repo_creation.sh
SYNOPSIS SYNOPSIS
creation_repo.sh [-h] [-s] test_repo_creation.sh [-h] [-l] [-s]
DESCRIPTION DESCRIPTION
This script creates a ./remote directory in the current directory, then creates a remote/performance_testing git repository. This script creates a ./remote directory in the current directory, then creates a remote/$REPO_NAME git repository.
This git repository is filled with randomly generated binary files described in the readme.md. This git repository is filled with randomly generated binary files described in the readme.md.
OPTIONS OPTIONS
-h prints the help. -h prints the help.
-l [link] adds the linked online repository as remote and pushes changes to it. Must be en empty repository. -l [link] adds the linked online repository as remote and pushes changes to it. Must be en empty repository.
-s creates a submodule remote/submodule_for_performance_testing and includes it in remote/performance_testing. " -s creates a submodule remote/$SUB_NAME and includes it in remote/$REPO_NAME. "
} }
create_random_file(){ create_random_file(){
@ -47,7 +47,7 @@ if [ ! -d $REPO_PATH ]; then
fi fi
cd $REPO_PATH cd $REPO_PATH
if [ ! -d $REPO_NAME ]; then if [ ! -d $REPO_NAME ]; then
echo "remote/performance testing will be created" echo "remote/$REPO_NAME will be created"
mkdir $REPO_NAME mkdir $REPO_NAME
cd $REPO_NAME cd $REPO_NAME
git init git init
@ -64,16 +64,16 @@ if [ ! -d $REPO_NAME ]; then
git add sample2 git add sample2
git commit -m"first 500K sample created in branch secondary" git commit -m"first 500K sample created in branch secondary"
git checkout main git checkout main
create_random_file 'sample4' '5M' create_random_file 'sample3' '5M'
git add sample4 git add sample3
git commit -m"first 5M sample created" git commit -m"first 5M sample created"
git tag tagging_point git tag tagging_point
create_random_file 'sample3' '1M' create_random_file 'sample4' '1M'
git add sample3
git commit -m"third 1M sample created"
rm sample4
git add sample4 git add sample4
git commit -m"sample4 deleted" git commit -m"third 1M sample created"
rm sample3
git add sample3
git commit -m"sample3 deleted"
cd .. cd ..
if [ "$WITH_SUBMODULE" = "true" ]; then if [ "$WITH_SUBMODULE" = "true" ]; then
mkdir $SUB_NAME mkdir $SUB_NAME