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
### 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.
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 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.
### README extract
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.
### Help extract
NAME
performance_tests.sh
SYNOPSIS
performance_tests.sh [-a] [-h] [-n number]
OPTIONS
-a executes all the tests.
-n number executes test number.
- c cleans.
-h prints the help.
### Results
======================================= 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
#importer driglibash
echo "<execution of test_git_update.sh>"
Help()
{
echo "
NAME
test_git_update.sh
SYNOPSIS
test_git_update.sh [-a] [-h] [-n number]
test_git_update.sh [-a] [-h] [-c] [-n number]
OPTIONS
-a excutes all the tests.
-n number executes test number
-a excutes all the tests and cleans.
-n number executes test number.
-c cleans.
-h prints the help.
DESCRIPTION
Tests on the initial cloning
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
@ -24,8 +22,7 @@ DESCRIPTION
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
"
TEST9: git updated fast-forward on submodule on main"
}
#Variables definitions
@ -33,7 +30,7 @@ WORKING_DIRECTORY=$(pwd)
REPO_NAME="git_update_testing"
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
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"
FILENAMES=("sample0" "sample1 sample3")
FILENAMES_TAG=("sample0 sample1 sample4")
@ -50,13 +47,25 @@ TAG_NAME="tagging_point"
TAG_FLAG="tag_flag"
BRANCH_NAME="secondary"
bash creation_repo.sh -s #&> /dev/null
#preparing the test repository
bash ../test_repo_creation.sh -s &> /dev/null
#output function
section(){
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
cloning_check(){
local input=("$@")
@ -311,16 +320,17 @@ undo_changing_tag(){
test0 (){
#CASE 0: git cloned in an empty directory
#CASE 0: git cloned in an empty directory
section TEST0
#if it exists, delete the directory
if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME
fi
./git_update.sh -d $REPO_NAME $REMOTE &> /dev/null
../../src/git_update.sh -d $REPO_NAME $REMOTE &> /dev/null
#checks
cloning_check $REPO_NAME ${FILENAMES[@]}
history_check $REPO_NAME
case0=$((history_result+cloning_result))
if [ "$case0" = "0" ]; then
echo "case 0, in a empty directory: OK"
@ -330,13 +340,13 @@ test0 (){
}
test1(){
#CASE 1: git cloned in an empty directory with tag
#CASE 1: git cloned in an empty directory with tag
section TEST1
#if it exists, delete the directory
if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME
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
cloning_check $REPO_NAME ${FILENAMES_TAG[@]}
history_check $REPO_NAME
@ -357,7 +367,7 @@ test2(){
if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME
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
cloning_check $REPO_NAME ${FILENAMES_BRANCH[@]}
history_check $REPO_NAME
@ -384,13 +394,13 @@ test3(){
modification_remote
#make git_update.sh update the repository
cd $REPO_NAME
../git_update.sh $REMOTE &> /dev/null
../../../src/git_update.sh $REMOTE &> /dev/null
cd ..
#checks
modification_check $REPO_NAME
history_check $REPO_NAME
#cleaning
undo_modification_remote
#undo_modification_remote
case3=$((modification_result+history_result))
if [ "$case3" = "0" ]; then
@ -415,7 +425,7 @@ test4(){
add_untracked_file $REPO_NAME
#make git_update.sh update the repository
cd $REPO_NAME
../git_update.sh $REMOTE &> /dev/null
../../../src/git_update.sh $REMOTE &> /dev/null
cd ..
#checks
modification_check $REPO_NAME
@ -448,7 +458,7 @@ test5(){
modification_remote
#make git_update.sh update the local repository
cd $REPO_NAME
../git_update.sh $REMOTE &> /dev/null
../../../src/git_update.sh $REMOTE &> /dev/null
cd ..
#checks
conflict_check $REPO_NAME
@ -474,7 +484,7 @@ test6(){
git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null
#call git update with another branch
cd $REPO_NAME
../git_update.sh -r $BRANCH_NAME $REMOTE &> /dev/null
../../../src/git_update.sh -r $BRANCH_NAME $REMOTE &> /dev/null
cd ..
#checks
switching_branch_check $REPO_NAME
@ -498,7 +508,7 @@ test7(){
git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null
#call git_update.sh with a tag
cd $REPO_NAME
../git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
../../../src/git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
cd ..
#checks
switching_tag_check $REPO_NAME
@ -522,7 +532,7 @@ test8(){
git clone --recurse-submodules --shallow-submodules --depth 1 $REMOTE &> /dev/null
#call git_update.sh with a tag
cd $REPO_NAME
../git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
../../../src/git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
cd ..
#intermediate check to make sure that we are starting on the initial position of the tag
switching_tag_check $REPO_NAME
@ -530,7 +540,7 @@ test8(){
changing_tag
#call git_update.sh again to go to the new position of the tag
cd $REPO_NAME
../git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
../../../src/git_update.sh -r $TAG_NAME $REMOTE &> /dev/null
cd ..
#put back the remote in its initial state
undo_changing_tag
@ -561,7 +571,7 @@ test9(){
#make git_update.sh update the repository
cd $REPO_NAME
echo "moment fatidique"
../git_update.sh $REMOTE #&> /dev/null
../../../src/git_update.sh $REMOTE &> /dev/null
cd ..
#checks
modification_submodule_check $REPO_NAME
@ -577,18 +587,23 @@ test9(){
fi
}
while getopts ":hn:a" option; do
ALL_TESTS="false"
TEST_NUM=""
while getopts ":hcn:a" option; do
case $option in
h) # display Help
Help
exit;;
n)
Help
exit;;
c) #clean
clean;;
n) #perform specific test
TEST_NUM=$OPTARG;;
a)
a) #perform all tests and clean
ALL_TESTS="true";;
\?) # Invalid option
echo "Error: Invalid option here"
exit;;
echo "Error: Invalid option"
Help
exit;;
esac
done
@ -603,6 +618,7 @@ if [ "$ALL_TESTS" = "true" ]; then
test7
test8
test9
clean
elif [ -n "$TEST_NUM" ]; then
#in order to only create the temporary clone once if we execute all tests
case $TEST_NUM in
@ -630,6 +646,4 @@ elif [ -n "$TEST_NUM" ]; then
echo "Error: Invalid test number"
exit;;
esac
else
Help
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.
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
The script creation_repo.sh creates a remote/performance_testing repository.
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. "
## Tests
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.
Here is a history of the commits:
### branch main
commit sample0 1M created (tag: start)
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
generate_random_file uses the bash command dd and /dev/random.
get_storage_used uses the bash command du.
get_bandwidth retrieves the output of Git commands and extracts the traffic displayed. This does not take submodule traffic into account.
Which gives the latest state:
### branch main
sample0 1M
sample1 1M
sample3 1M
### branch secondary
sample0 1M
sample1 1M
sample2 500K
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.
If the -s option is selected, submodule_for_performance_testing is created with this history of commits:
### 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.
## Help extract
NAME
performance_tests.sh
SYNOPSIS
performance_tests.sh [-a] [-h] [-n number]
OPTIONS
-a excutes all the tests.
-n number executes test number
-a executes all the tests.
-n number executes test number.
-c cleans.
-h prints the help.
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.
@ -96,3 +63,6 @@ DESCRIPTION
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
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 "
NAME
creation_repo.sh
test_repo_creation.sh
SYNOPSIS
creation_repo.sh [-h] [-s]
test_repo_creation.sh [-h] [-l] [-s]
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.
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/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(){
@ -47,7 +47,7 @@ if [ ! -d $REPO_PATH ]; then
fi
cd $REPO_PATH
if [ ! -d $REPO_NAME ]; then
echo "remote/performance testing will be created"
echo "remote/$REPO_NAME will be created"
mkdir $REPO_NAME
cd $REPO_NAME
git init
@ -64,16 +64,16 @@ if [ ! -d $REPO_NAME ]; then
git add sample2
git commit -m"first 500K sample created in branch secondary"
git checkout main
create_random_file 'sample4' '5M'
git add sample4
create_random_file 'sample3' '5M'
git add sample3
git commit -m"first 5M sample created"
git tag tagging_point
create_random_file 'sample3' '1M'
git add sample3
git commit -m"third 1M sample created"
rm sample4
create_random_file 'sample4' '1M'
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 ..
if [ "$WITH_SUBMODULE" = "true" ]; then
mkdir $SUB_NAME