]> git.sur5r.net Git - bacula/bacula/blobdiff - regress/tests/next-vol-test
update
[bacula/bacula] / regress / tests / next-vol-test
index 1d354ca1cd738cd95051a2f7b626a79ddf57238c..fce14d03b54def195fdca34c8085daec9d917112 100755 (executable)
@@ -3,32 +3,40 @@
 # This script will test next vol algo with
 # vtape
 #
-
+# TODO: Test Pool with RecyclePool
+#       Test Pool without RecyclePool
+#       Test with enabled=false
+#       Test with recycle=no
+#       Track scratch usage
+#
 . scripts/functions
 
-require_vtape
+TestName="next-vol-test"
+JobName=backup
 
+require_linux
 scripts/cleanup
 scripts/copy-tape-confs
 cp scripts/bacula-dir-vtape.conf bin/bacula-dir.conf
 cp scripts/bacula-sd-vtape.conf bin/bacula-sd.conf
-
 scripts/prepare-fake-autochanger
 
-TestName="next-vol-test"
-JobName=backup
 
 start_test
 
 cat <<EOF > ${cwd}/tmp/bconcmds
 @$out ${cwd}/tmp/log.out
-label barcodes storage=LTO3 slots=48-59 drive=0 pool=Scratch
+label barcodes storage=LTO3 slots=46-59 drive=0 pool=Scratch
 yes
+update volume=vol47 pool=Test inchanger=no RecyclePool=Test
 update volume=vol59 pool=Test enabled=no
 update volume=vol58 pool=Test volstatus=Recycle
 purge  volume=vol57
 update volume=vol56 pool=Test
-update volume=vol55 pool=Test volstatus=Full volretention=15 
+update volume=vol55 pool=Test volstatus=Full
+update volume=vol46 volstatus=Full volretention=15 
+purge volume=vol46
+update volume=vol46 pool=Test
 update volume=vol54 volstatus=Recycle
 purge  volume=vol53
 update volume=vol52 MaxVolJobs=1
@@ -40,6 +48,9 @@ update volume=vol48 inchanger=no pool=Test
 update volume  AllFromPool=Test
 sql
 update Media SET VolJobs=1 WHERE VolumeName='vol52';
+update Media SET LastWritten='2006-01-01 01:00:00';
+update Media SET LastWritten='2006-01-01 01:00:01' WHERE VolumeName='vol57';
+update Media SET LastWritten='2006-01-01 01:00:02' WHERE VolumeName='vol53';
 
 list volume
 EOF
@@ -50,38 +61,52 @@ echo $PWD/build/po > tmp/file-list
 
 cat <<EOF > ${cwd}/tmp/bconcmds
 @$out ${cwd}/tmp/log2.out
-list volume
 @# Must choose vol56
+@# Pool + Append + Enabled + InChanger
 run level=full pool=Test NightlySave yes
 wait
 message
 list volume
 @# Must choose vol58
+@# Pool + Recycled + Enabled + InChanger
+run level=full pool=Test NightlySave yes
+wait
+message
+list volume
+@# Must choose vol46
+@# Pool + Purged + Enabled + InChanger
 run level=full pool=Test NightlySave yes
 wait
 message
 list volume
 @# Must choose vol55
+@# Pool + Full + Recycle + Enabled + InChanger
 run level=full pool=Test NightlySave yes
 wait
 message
 list volume
 @# Must choose vol54
+@# No more in Test pool, get from scratch
+@# vol52 is Append, but have 1 job and MaxJob
+@# Scratch + Recycle + Enabled + InChanger
 run level=full pool=Test NightlySave yes
 wait
 message
 list volume
-@# Must choose vol52 <--------- BUG vol50
+@# Must choose vol52
+@# Scratch + Purged + Enabled + InChanger + LastW
 run level=full pool=Test NightlySave yes
 wait
 message
 list volume
-@# Must choose vol53
+@# Must choose vol57
+@# Scratch + Purged + Enabled + InChanger + LastW
 run level=full pool=Test NightlySave yes
 wait
 message
 list volume
-@# Must choose vol57
+@# Must choose vol53
+@# Scratch + Purged + Enabled + InChanger + LastW
 run level=full pool=Test NightlySave yes
 wait
 message
@@ -101,18 +126,173 @@ EOF
 
 run_bconsole
 
-check_for_zombie_jobs storage=LTO3
-stop_bacula
+awk '/Must choose/ { print $4 } '    tmp/log2.out > tmp/normal
+awk '/Volume name.+:/ { print $3 } ' tmp/log2.out > tmp/real
+if [ "$debug" -eq 1 ]; then
+   diff -ur tmp/normal tmp/real
+else
+   diff tmp/normal tmp/real > /dev/null
+fi
 
-cp tmp/log2.out tmp/log1.out
-check_two_logs
+dstat=$?
 
 
-awk '/Must choose/ { print $4 } '    tmp/log2.out > tmp/normal
-awk '/Volume name.+:/ { print $3 } ' tmp/log2.out > tmp/real
-diff tmp/normal tmp/real > /dev/null
+# so some tests with File media
+cat <<EOF > ${cwd}/tmp/bconcmds
+@$out ${cwd}/tmp/log3.out
+label volume=file1 storage=File pool=Test
+label volume=file2 storage=File pool=Test
+label volume=file3 storage=File pool=Test
+label volume=file4 storage=File pool=Scratch
+label volume=file5 storage=File pool=Test
+label volume=file6 storage=File pool=Test
+label volume=file7 storage=File pool=Scratch
+label volume=file8 storage=File pool=Test
+label volume=file9 storage=File pool=Scratch
+label volume=file10 storage=File pool=Scratch
+label volume=file11 storage=File pool=Test
+update volume=file2 enabled=no
+update volume=file3 volstatus=Recycle
+@# volstatus=Purged
+purge  volume=file4
+update volume=file5 recycle=no volretention=1
+update volume=file6 volstatus=Full volretention=15 
+update volume=file7 volstatus=Full volretention=15 
+purge volume=file7
+update volume=file8 pool=Test VolRetention=1
+update volume=file9 volstatus=Recycle
+purge volume=file11
+sql
+update Media SET VolJobs=1 WHERE VolumeName='file9';
+update Media SET LastWritten='2006-01-01 01:00:00';
+update Media SET LastWritten='2006-01-01 01:00:01' WHERE VolumeName='file4';
+update Media SET LastWritten='2006-01-01 01:00:02' WHERE VolumeName='file7';
 
+messages
+@$out ${cwd}/tmp/log4.out
+list volume
+messages
+@# Must choose file1
+@# Pool + Append + Lowest MediaId
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file5
+@# Pool + Append + Lowest MediaId (only once)
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file8
+@# Pool + Append + Lowest MediaId
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file3
+@# Pool + Recycle
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file11
+@# Pool + Purged
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file6
+@# Pool + Full (prunable)
+setdebug level=50 director
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+setdebug level=0 director
+list volume
+@sleep 5
+@# Must choose file8
+@# Pool + Full (prunable)
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+update volume=file8 enabled=no
+list volume
+@# Must choose file10
+@# (no more Pool) Scratch + Append
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file9
+@# (no more Pool) Scratch + Recycle
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@sleep 10
+@# Must choose file6
+@# Used (prunable) + Pool
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file4
+@# Used (prunable) + oldest + Scratch
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+@# Must choose file7
+@# Used (prunable) + oldest + Scratch
+run level=full pool=Test storage=File NightlySave yes
+wait
+message
+list volume
+quit
+EOF
+
+run_bconsole
+
+awk '/Must choose/ { print $4 } '    tmp/log4.out > tmp/normal4
+awk '/Volume name.+:/ { print $3 } ' tmp/log4.out > tmp/real4
+if [ "$debug" -eq 1 ]; then
+   diff -ur tmp/normal4 tmp/real4
+else
+   diff tmp/normal4 tmp/real4 > /dev/null
+fi
+
+dstat=`expr $? + $dstat`
+
+# try to break the old code 
+# in this situation, we have 1 available volume (vol50) and bacula will try to use
+# vol47, vol48 and vol49 and will stop without using vol50.
 
-export dstat=$?
+cat <<EOF > ${cwd}/tmp/bconcmds
+@$out ${cwd}/tmp/log1.out
+update volume=vol47 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
+update volume=vol48 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
+update volume=vol49 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
+update volume=vol50 pool=Test VolStatus=Used VolRetention=10s inchanger=yes RecyclePool=Test
+sql
+update Media SET LastWritten='2005-01-01 01:00:00' WHERE VolumeName IN ('vol47', 'vol48', 'vol49');
+
+list volume
+run level=full pool=Test NightlySave yes
+wait
+messages
+quit
+EOF
+
+run_bconsole
+grep "Invalid slot=0 defined in catalog for Volume" tmp/log1.out > /dev/null
+if [ $? -ne 0 ]; then
+   bstat=$?
+fi
+
+check_for_zombie_jobs storage=LTO3
+stop_bacula
+
+check_two_logs
 
 end_test