#!/bin/bash
# questo script si occupa di fare dei test sul file system in modo
# user-friendly per mostrare la funzionalita' del sistema
SCRIPT_PATH=~/sgf-binary/script
# set alias
shopt -s expand_aliases
alias pwd='echo $PWD'
alias cd='source ~/sgf-binary/script/cd.sh $PWD'
alias ls='source ~/sgf-binary/script/ls.sh $PWD'
alias mkdir='source ~/sgf-binary/script/mkdir.sh $PWD'
alias del='source ~/sgf-binary/script/del.sh $PWD'
alias rm='source ~/sgf-binary/script/del.sh $PWD'
alias undel='source ~/sgf-binary/script/undel.sh $PWD'
alias purge='source ~/sgf-binary/script/purge.sh $PWD'
alias cp='source ~/sgf-binary/script/cp.sh $PWD'
alias ln='source ~/sgf-binary/script/ln.sh $PWD'
alias vd="~/sgf-binary/script/vd.sh"
# variabili per modificare la formattazione del carattere sulla shell
# in modo da mettere in evidenza alcune parti del testo
DEFAULT="\033[0;00m"
BOLD="\033[0;01m"
# questa funzione esegue un comando stampandolo, e poi, nel caso in cui
# l'exit status sia positivo stampa anche un "OK"
function exec_command {
shopt -s expand_aliases
alias pwd='echo $PWD'
alias cd='source ~/sgf-binary/script/cd.sh $PWD'
alias ls='source ~/sgf-binary/script/ls.sh $PWD'
alias mkdir='source ~/sgf-binary/script/mkdir.sh $PWD'
alias del='source ~/sgf-binary/script/del.sh $PWD'
alias rm='source ~/sgf-binary/script/del.sh $PWD'
alias undel='source ~/sgf-binary/script/undel.sh $PWD'
alias purge='source ~/sgf-binary/script/purge.sh $PWD'
alias cp='source ~/sgf-binary/script/cp.sh $PWD'
alias ln='source ~/sgf-binary/script/ln.sh $PWD'
alias vd='~/sgf-binary/script/vd.sh'
echo -e " > $1" # stampa il nome del comando
if eval $1; then # lo esegue
echo " OK " # se l'exit status e' 0 allora stampa OK
fi;
read choice # aspetta la pressione di un tasto qualsiasi
}
# questa funzione scrive semplicemente a schermo un testo in grassetto
function display_message {
echo -e "$BOLD$1$DEFAULT"
}
# variabile con il path ad un file temporaneo grande
source_file_big="/tmp/big_file"
# variabile con il path ad un file temporaneo piccolo
source_file_little="/tmp/little_file"
# creo i file grandi e piccoli: faccio queste operazioni per sapere la
# dimensione dei file che andro' a copiare e quindi generare volutamente
# alcuni messaggi di errore
# copio un pezzo di questo stesso script per il file piccolo
me=$(basename $0)
head -n 4 $SCRIPT_PATH/$me > $source_file_little
# copio piu' volte l'intero file per creare un file grande
cp $SCRIPT_PATH/$me $source_file_big
LIMIT=50
for ((a=1; a <= LIMIT ; a++))
do
cat $SCRIPT_PATH/$me >> $source_file_big
done
# pulisco lo schermo e stamp un messagio di benvenuto
clear
echo "Benvenuto nello script di test delle funzionalita' del VFS:"
echo "dopo ogni comando premi invio per passare al successivo"
echo
# fermo un eventuale gestore e lo lancio nuovamente
display_message "fermo un eventuale gestore e lo lancio nuovamente"
vd stop
vd start
display_message "copio un file nella root dal file system reale"
exec_command "cp $source_file_little VD:/"
display_message "mi sposto nella root"
exec_command "cd VD:"
display_message "ne mostro il contenuto"
exec_command "ls"
display_message "creo una cartella"
exec_command "mkdir VD:cartella"
display_message "copio un file al suo interno cambiandone il nome \
(utilizzo il path assoluto)"
exec_command "cp $source_file_little VD:/cartella/filecopiato"
display_message "mi sposto all'interno della cartella"
exec_command "cd VD:cartella"
display_message "copio un file di dimensione non valida nella root"
exec_command "cp $source_file_big VD:/"
display_message "copio un file inesistente all'interno della \
cartella (utilizzo il path relativo)"
exec_command "cp /sOnOunFILE/INESISTENTE/qui VD:"
display_message "copio un file di tipo invalido nella root"
exec_command "cp /dev/null VD:/"
display_message "creo un'altra cartella nella root"
exec_command "mkdir VD:/altra_cartella"
display_message "copio VD:filecopiato dalla cartella ad un'altra, \
utilizzo il '..'"
exec_command "cp VD:filecopiato VD:../altra_cartella"
display_message "creo un link hard nella root al file copiato"
exec_command "ln VD:/altra_cartella/filecopiato VD:/linkhard"
display_message "mostro il contenuto della root"
exec_command "ls VD:/"
display_message "cancello un file in modo soft"
exec_command "del VD:/cartella/filecopiato"
display_message "mostro il contenuto di VD:/cartella"
exec_command "ls VD:/cartella"
display_message "eseguo una undel del file"
exec_command "undel VD:/cartella/filecopiato"
display_message "mostro il contenuto di VD:/cartella"
exec_command "ls VD:/cartella"
display_message "mi sposto nel file system reale"
exec_command "cd"
display_message "copio il file precedentemente recuperato qui nella ~"
exec_command "cp VD:/cartella/filecopiato ~/file_copiato_dal_vfs"
display_message "controllo con una diff che dopo tutte le \
operazioni sia ancora integro"
exec_command "diff ~/file_copiato_dal_vfs $source_file_little"
display_message "eseguo una purge del file sul VFS"
exec_command "purge VD:/cartella/filecopiato"
display_message "e quindi della cartella"
exec_command "purge VD:/cartella"
display_message "mostro quindi il contenuto della root"
exec_command "ls VD:/"
display_message "creo un link hard invalido (ad una cartella)"
exec_command "ln VD:/altra_cartella VD:/directory_link"
echo
display_message "test terminati, e' possibile farne altri manualmente"
display_message "ora verra' terminato il gestore"
vd stop
rm $source_file_little
rm $source_file_big