#!/bin/sh
#
+# Copyright (C) 2000-2017 Kern Sibbald
+# License: BSD 2-Clause; see file LICENSE-FOSS
+#
#
TestName="action-on-purge-test"
-JobName=AOP
+JobName=FIFOTest
. scripts/functions
cwd=`pwd`
scripts/copy-test-confs
echo $src > $tmp/file-list
+
sed 's/Pool Type = Backup/Pool Type = Backup; ActionOnPurge = Truncate/' $conf/bacula-dir.conf > $tmp/1
cp $tmp/1 $conf/bacula-dir.conf
-change_jobname CompressedTest $JobName
start_test
cat >tmp/bconcmds <<END_OF_DATA
messages
@$out $tmp/log1.out
label storage=File volume=TestVolume001
-label storage=File volume=TestVolume002
+@########################################################
+@# Run a first job on TestVolume001
+@########################################################
run level=full job=$JobName yes
wait
messages
-@$out $tmp/log2.out
-restore where=${cwd}/tmp/bacula-restores select all storage=File done
-yes
-wait
-messages
+@#@$out $tmp/log2.out
+@#restore where=${cwd}/tmp/bacula-restores select all storage=File done
+@#yes
+@#wait
+@#messages
@#########################################################
@# Run a second job on TestVolume002
@#########################################################
@$out $tmp/log3.out
+label storage=File volume=TestVolume002
update volume=TestVolume001 volstatus=Used
messages
show pool
wait
messages
@#########################################################
-@# Run a third job that will wait, and purge volume
+@# Run a 3th job on TestVolume003
@#########################################################
@$out $tmp/log3.out
update volume=TestVolume002 volstatus=Used
+label storage=File volume=TestVolume003
messages
+show pool
@$out $tmp/log1.out
run level=full job=$JobName yes
-@#wait mount
-@sleep 5
-messages
-list volume
-@# should continue on TestVolume001
-sql
-select VolumeName, ActionOnPurge FROM Media;
-
-setdebug level=400 director
-purge volume=TestVolume001
-list volume
-sql
-select VolumeName, ActionOnPurge FROM Media;
-
-mount storage=File
wait
+messages
@#########################################################
-@# Test ActionOnPurge=Truncate Volume size should be small
+@# Run a 4th job
@#########################################################
-purge volume=TestVolume001
+@$out $tmp/log5.out
+update volume=TestVolume003 volstatus=Used
+label storage=File volume=TestVolume004
+messages
+@$out $tmp/log1.out
+run level=full job=$JobName yes
+wait
+messages
list volume
+@$out $tmp/log1.out
+update volume=TestVolume004 volstatus=Used
+label storage=File volume=TestVolume005
+run level=full job=$JobName yes
+wait
+messages
+@$out $tmp/log6.out
@#########################################################
-@# Test ActionOnPurge=Truncate, then update it to None
-@# Volume size should be normal
+@# tests
@#########################################################
update volume=TestVolume002 actiononpurge=none
+purge volume=TestVolume001
purge volume=TestVolume002
+purge volume=TestVolume003
+purge volume=TestVolume004
+list volume
+sql
+select VolumeName, VolStatus, ActionOnPurge FROM Media;
+
+setdebug level=100 director
+quit
+END_OF_DATA
+
+run_bacula
+check_for_zombie_jobs storage=File
+
+print_debug "Check all media"
+for i in 1 2 3 4 5 ; do
+ size=`du -b $tmp/TestVolume00$i|cut -f1`
+ if test $size -lt 5000 ; then
+ print_debug "ERROR 2: Volume TestVolum00$i is too small $size"
+ ls -l $tmp/TestVolume00$i
+ estat=2
+ fi
+done
+
+echo "purge volume=TestVolume001 action storage=File" > $tmp/bconcmds
+run_bconsole
+
+for i in 2 3 4 5 ; do
+ size=`du -b $tmp/TestVolume00$i|cut -f1`
+ if test $size -lt 5000 ; then
+ print_debug "ERROR 3: Volume TestVolum00$i is too small $size"
+ ls -l $tmp/TestVolume00$i
+ estat=3
+ fi
+done
+for i in 1 ; do
+ size=`du -b $tmp/TestVolume00$i|cut -f1`
+ if test $size -gt 5000 ; then
+ print_debug "ERROR 4: Volume TestVolum00$i is not truncated (too big) $size"
+ ls -l $tmp/TestVolume00$i
+ estat=4
+ fi
+done
+
+echo "purge volume action storage=File" > $tmp/bconcmds
+run_bconsole
+
+for i in 2 5 ; do
+ size=`du -b $tmp/TestVolume00$i|cut -f1`
+ if test $size -lt 5000 ; then
+ print_debug "ERROR 5: Volume TestVolum00$i is too small $size"
+ ls -l $tmp/TestVolume00$i
+ estat=5
+ fi
+done
+for i in 1 3 4 ; do
+ size=`du -b $tmp/TestVolume00$i|cut -f1`
+ if test $size -gt 5000 ; then
+ print_debug "ERROR 6: Volume TestVolum00$i is not truncated (too big) $size"
+ ls -l $tmp/TestVolume00$i
+ estat=6
+ fi
+done
+
+cat <<END_OF_DATA > $tmp/bconcmds
@#########################################################
@# Display catalog settings for Pool and Media
@#########################################################
@$out $tmp/log4.out
+setdebug level=0 director
sql
select VolumeName, ActionOnPurge FROM Media;
select Name, ActionOnPurge FROM Pool;
+wait
quit
END_OF_DATA
-run_bacula
-check_for_zombie_jobs storage=File
+run_bconsole
+
stop_bacula
+touch $tmp/log2.out
check_two_logs
-check_restore_diff
-
-perl -e "die 'Volume size too big' if (-s '$tmp/TestVolume001' > 4096)"
-if [ $? != 0 ]; then
- print_debug `ls -l $tmp/TestVolume001`
- bstat=2
-fi
-
-perl -e "die 'Volume size too small' if (-s '$tmp/TestVolume002' < 4096)"
-if [ $? != 0 ]; then
- print_debug `ls -l $tmp/TestVolume002`
- bstat=2
-fi
print_debug "Test if Pool record is ok"
r=`awk '/Default/ { print $4 }' $tmp/log4.out`
if [ "$r" != 1 ]; then
- print_debug "ActionOnPurge on Pool record should be 1"
- bstat=2
+ print_debug "ActionOnPurge on Pool record should be 1 ($r)"
+ estat=2
fi
print_debug "Test TestVolume001 if Media record is ok"
r=`awk '/TestVolume001/ { print $4 }' $tmp/log4.out`
if [ "$r" != 1 ]; then
print_debug "ActionOnPurge on Media record should be 1"
- bstat=2
+ estat=2
fi
print_debug "Test TestVolume002 if Media record is ok"
r=`awk '/TestVolume002/ { print $4 }' $tmp/log4.out`
if [ "$r" != 0 ]; then
print_debug "ActionOnPurge on Media record should be 0"
- bstat=2
+ estat=2
fi
end_test