Newer
Older
#!/bin/sh
#
# The integration test scenario for yeastx workflow.
#
# --- include external sources ------------------------
# --------------------
MY_DATA=$WORK/data-yeastx
TEMPLATE_INCOMING_CONTENT=$MY_DATA/expected-output/template_incoming_content_yeastx.txt
METABOL_DB=metabol_dev
# --------------------
# Prepare template incoming data and some destination data structures
function prepare_data {
# Prepare empty incoming data
rm -fr $MY_DATA
mkdir -p $MY_DATA
tpylak
committed
local SRC=$TEMPLATE/data-yeastx
tpylak
committed
cp -R $SRC/* $MY_DATA/
tpylak
committed
tpylak
committed
chmod -R 700 $MY_DATA/incoming*
function build_and_install_yeastx {
kaloyane
committed
unzip -u $INSTALL/datastore_server_plugin-yeastx-*.zip -d $WORK/datastore_server_yeastx
mv $WORK/datastore_server_yeastx/datastore_server/lib/* $WORK/datastore_server_yeastx/lib
chmod_exec $WORK/datastore_server_yeastx/takeCifsOwnershipRecursive.sh
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
echo Dropping metabolomics database
psql_cmd=`run_psql`
$psql_cmd -U postgres -c "drop database $METABOL_DB"
}
function check_file_exists {
local file=$1
if [ -e $marker ]; then echo true; else echo false; fi
}
function assert_correct_incoming_content {
local dir_name=$1
local expected_file_count=$2
local has_error_marker=$3
local dir=$MY_DATA/incoming/$dir_name
assert_dir_exists $dir
if [ ! -e $dir ]; then
return
fi
assert_files_number $dir $expected_file_count
local marker=$dir/_delete_me_after_correcting_errors
local error_log=$dir/error-log.txt
if [ "$has_error_marker" = "true" ]; then
assert_file_exists $marker
assert_file_exists $error_log
else
assert_file_not_exists $marker
assert_file_not_exists $error_log
fi
}
# prints all the error messages from incoming folder in a canonic form
function print_incoming_errorlog_fingerprint {
local incoming_dir=$1
for dir in `ls -1 $incoming_dir | sort`; do
echo $dir --------------------
local error_log=$incoming_dir/$dir/error-log.txt
if [ -e $error_log ]; then
while read line; do
# remove all prefixes with dates
line=${line//*ERROR/ERROR}
# remove all warnings
line=${line//*WARNING*/}
echo $line
done < $error_log
fi
done
}
# checks that the error messages for the folders which could not be processed
# in the incomming folder are correct
function assert_correct_errorlogs {
local incoming_dir=$1
tpylak
committed
local errorlogs=$WORK/incoming_current_content.txt
print_incoming_errorlog_fingerprint $incoming_dir > $errorlogs
echo [INFO] Comparing error logs in the incoming directory with the expected template $TEMPLATE_INCOMING_CONTENT.
tpylak
committed
diff -w $TEMPLATE_INCOMING_CONTENT $errorlogs
if [ $? -ne 0 ]; then
report_error "Unexpected content of the error logs in the incoming directory (compare $TEMPLATE_INCOMING_CONTENT with $errorlogs)."
function count_db_table_records {
local db=$1
local table=$2
local psql=`run_psql`
local count=`$psql -U postgres -d $db -c "select count(*) from $table" \
| head -n 3 | tail -n 1 | awk '{gsub(/ /,"");print}'`
function assert_correct_datasets_metabol_database {
local eicms_runs=`count_db_table_records $METABOL_DB eic_ms_runs`
local fiams_runs=`count_db_table_records $METABOL_DB fia_ms_runs`
local mzxml_runs=`count_db_table_records $METABOL_DB mz_ms_runs`
# one run comes from the incoming and one from incoming-*ml
assert_equals "Wrong number of eic MS runs in the metablomics db" 2 $eicms_runs
assert_equals "Wrong number of fia MS runs in the metablomics db" 2 $fiams_runs
assert_equals "Wrong number of mzXML runs in the metablomics db" 1 $mzxml_runs
local quantms_runs=`count_db_table_records $METABOL_DB ms_quantifications`
local quantms_concentrations=`count_db_table_records $METABOL_DB ms_quant_concentrations`
local quantms_component_ids=`count_db_table_records $METABOL_DB ms_quant_compounds`
assert_equals "Wrong number of quantifications in the metablomics db" 1 $quantms_runs
assert_equals "Wrong number of quant. concentrations in the metablomics db" 2 $quantms_concentrations
assert_equals "Wrong number of quant. component ids in the metablomics db" 3 $quantms_component_ids
local mz_scans=`count_db_table_records $METABOL_DB mz_scans`
assert_equals "Wrong number of mz scans in the metablomics db" 19 $mz_scans
}
function assert_correct_incoming_contents {
local incoming_dir=$1
# check content of incoming directory for faulty or ignored datasets
assert_files_number $incoming_dir 12
assert_correct_incoming_content faulty-duplicated-mapping 4 true
assert_correct_incoming_content faulty-experiment-code 4 true
assert_correct_incoming_content faulty-mapped-file-does-not-exist 3 true
assert_correct_incoming_content faulty-no-email-specified 3 true
assert_correct_incoming_content faulty-no-mapping 4 true
assert_correct_incoming_content faulty-non-unique-mapping 6 true
assert_correct_incoming_content faulty-to-many-mapping-files 4 true
assert_correct_incoming_content faulty-unknown-property 4 true
assert_correct_incoming_content faulty-unknown-mapping 8 true
assert_correct_incoming_content faulty-wrong-conversion 5 true
assert_correct_incoming_content ignore-empty-dir 0 false
assert_correct_incoming_content ignore-no-index 1 false
assert_correct_errorlogs $incoming_dir
# check content of dropboxes
assert_files_number "$MY_DATA/dropbox-eicml/TEST&TEST_PROJECT&EXP_TEST.*.mzXML" 6
assert_files_number "$MY_DATA/dropbox-fiaml/TEST&TEST_PROJECT&EXP_TEST.*.mzXML" 2
assert_dir_empty $MY_DATA/incoming-quantml
local store_files_count=`find $store -type f | wc -l`
# there will be one additional blob file for the quantML dataset
assert_equals "Wrong number of files in the store $store" $(($registered_datasets+1)) $store_files_count
# check the number of datasets in openbis database
local datasets=`count_db_table_records $DATABASE data`
# there will be one additional dataset placeholder for the incoming-*ml files which specify
# the parent code which does not exist
assert_equals "Wrong number of datasets in the openbis db" $(($registered_datasets+1)) $datasets
# check each dataset in openbis database.
# Result set columns are:
# id;experiment_code;data_store_code;code;is_placeholder;data_id_parent;is_complete;data_producer_code;production_timestamp
local pattern="[0-9]*;EXP_TEST;DSS1;20[0-9]*-[0-9]*;[ft];[0-9]*;[TFU]*;;.*"
local i=2;
while [ $i -lt $(($registered_datasets+2)) ]; do
assert_correct_dataset_content_in_database $i $pattern
i=$(( $i +1))
done
}
function integration_tests_yeastx {
kaloyane
committed
build_and_install $@
build_and_install_yeastx
switch_dss "on" datastore_server_yeastx
sleep 240
assert_correct_incoming_contents $MY_DATA/incoming
switch_dss "off" datastore_server_yeastx
kaloyane
committed
# -- MAIN ------------
if [ "$1" = "--clean" ]; then
clean_after_tests
else
parse_cli_args $@
integration_tests_yeastx $install_dss $install_dmv $install_openbis $use_local_source $reinstall_all
fi