test directory complete
This commit is contained in:
parent
9422ddebb9
commit
ed37d09fa0
@ -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
|
||||
|
34
test/functional_tests/readme
Normal file
34
test/functional_tests/readme
Normal 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.
|
@ -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
|
1056
test/performance_tests/performance_tests.sh
Executable file
1056
test/performance_tests/performance_tests.sh
Executable file
File diff suppressed because it is too large
Load Diff
@ -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
51
test/readme
Normal 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
|
@ -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
|
Loading…
Reference in New Issue
Block a user