3 # Copyright (C) 2000-2017 Kern Sibbald
4 # License: BSD 2-Clause; see file LICENSE-FOSS
6 # This script will test next vol algo with
9 # TODO: Test Pool with RecyclePool
10 # Test Pool without RecyclePool
11 # Test with enabled=false
12 # Test with recycle=no
15 # Please do not write any more tests with so many Jobs and combinations,
16 # because when something goes wrong it is very hard and time consuming
17 # to know what caused the failure.
21 # Dedup does not work with "tapes"
22 if test x$FORCE_DEDUP = xyes ; then
23 echo "\n=== Test next-vol-test skipped not compatible with dedup ==="
26 if test x$FORCE_CLOUD = xyes ; then
27 echo "\n=== Test next-vol-test skipped not compatible with Cloud ==="
32 TestName="next-vol-test"
37 scripts/copy-tape-confs
38 cp scripts/bacula-dir-vtape.conf bin/bacula-dir.conf
39 cp scripts/bacula-sd-vtape.conf bin/bacula-sd.conf
40 scripts/prepare-fake-autochanger
45 cat <<EOF > ${cwd}/tmp/bconcmds
46 @$out ${cwd}/tmp/log.out
47 label barcodes storage=LTO3 slots=46-59 drive=0 pool=Scratch
50 update Media SET FirstWritten='2006-01-01 01:00:00', LastWritten='2006-01-01 01:00:00';
52 update volume=vol47 pool=Test inchanger=no RecyclePool=Test
53 update volume=vol59 pool=Test enabled=no
54 update volume=vol58 pool=Test volstatus=Recycle
56 update volume=vol56 pool=Test
57 update volume=vol55 pool=Test volstatus=Full
58 update volume=vol46 volstatus=Full volretention=15
60 update volume=vol46 pool=Test
61 update volume=vol54 volstatus=Recycle
63 update volume=vol52 MaxVolJobs=1 volretention=15
64 update volume=vol51 inchanger=no volstatus=Recycle
66 update volume=vol50 inchanger=no
67 update volume=vol49 inchanger=no
68 update volume=vol48 inchanger=no pool=Test
69 update volume AllFromPool=Test
71 update Media SET VolJobs=1 WHERE VolumeName='vol52';
72 update Media SET LastWritten='2006-01-01 01:00:01' WHERE VolumeName='vol57';
73 update Media SET LastWritten='2006-01-01 01:00:02' WHERE VolumeName='vol53';
82 echo $PWD/build/po > tmp/file-list
84 cat <<EOF > ${cwd}/tmp/bconcmds
85 @$out ${cwd}/tmp/log2.out
87 @# Pool + Append + Enabled + InChanger
89 run level=full pool=Test NightlySave yes
94 @# Pool + Recycled + Enabled + InChanger
96 run level=full pool=Test NightlySave yes
101 @# Pool + Purged + Enabled + InChanger
103 run level=full pool=Test NightlySave yes
108 @# Pool + Full + Recycle + Enabled + InChanger
110 run level=full pool=Test NightlySave yes
115 @# No more in Test pool, get from scratch
116 @# vol52 is Append, but have 1 job and MaxJob
117 @# Scratch + Recycle + Enabled + InChanger
119 run level=full pool=Test NightlySave yes
124 @# Scratch + Purged + Enabled + InChanger + LastW
126 run level=Full pool=Test NightlySave yes
131 @# Scratch + Purged + Enabled + InChanger + LastW
133 run level=full pool=Test NightlySave yes
138 @# Scratch + Purged + Enabled + InChanger + LastW
140 run level=full pool=Test NightlySave yes
145 restore fileset="Full Set" pool=Test where=${cwd}/tmp/bacula-restores select all done
153 @#run level=full pool=Test NightlySave yes
162 awk '/Must choose/ { print $4 } ' tmp/log2.out > tmp/normal
163 awk '/Volume name.+:/ { print $3 } ' tmp/log2.out > tmp/real
164 if [ "$debug" -eq 1 ]; then
165 diff -ur tmp/normal tmp/real
167 diff tmp/normal tmp/real > /dev/null
172 # so some tests with File media
173 cat <<EOF > ${cwd}/tmp/bconcmds
174 @$out ${cwd}/tmp/log3.out
175 label volume=file1 storage=File pool=Test
176 label volume=file2 storage=File pool=Test
177 label volume=file3 storage=File pool=Test
178 label volume=file4 storage=File pool=Scratch
179 label volume=file5 storage=File pool=Test
180 label volume=file6 storage=File pool=Test
181 label volume=file7 storage=File pool=Scratch
182 label volume=file8 storage=File pool=Test
183 label volume=file9 storage=File pool=Scratch
184 label volume=file10 storage=File pool=Scratch
185 label volume=file11 storage=File pool=Test
187 update Media SET FirstWritten='2006-01-01 01:00:00', LastWritten='2006-01-01 01:00:00';
189 update volume=file2 enabled=no
190 update volume=file3 volstatus=Recycle
193 update volume=file5 recycle=no volretention=1
194 update volume=file6 volstatus=Full volretention=15
195 update volume=file7 volstatus=Full volretention=15
197 update volume=file8 pool=Test VolRetention=1
198 update volume=file9 volstatus=Recycle
201 update Media SET VolJobs=1 WHERE VolumeName='file9';
202 update Media SET LastWritten='2006-01-01 01:00:01' WHERE VolumeName='file4';
203 update Media SET LastWritten='2006-01-01 01:00:02' WHERE VolumeName='file7';
206 @$out ${cwd}/tmp/log4.out
210 @# Pool + Append + Lowest MediaId
212 run level=full pool=Test storage=File NightlySave yes
217 @# Pool + Append + Lowest MediaId (only once)
219 run level=full pool=Test storage=File NightlySave yes
224 @# Pool + Append + Lowest MediaId
226 run level=full pool=Test storage=File NightlySave yes
233 run level=full pool=Test storage=File NightlySave yes
237 @# Must choose file11
240 run level=full pool=Test storage=File NightlySave yes
245 @# Pool + Full (prunable)
246 setdebug level=50 director
248 run level=full pool=Test storage=File NightlySave yes
251 setdebug level=0 director
255 @# Pool + Full (prunable)
257 run level=full pool=Test storage=File NightlySave yes
260 update volume=file8 enabled=no
262 @# Must choose file10
263 @# (no more Pool) Scratch + Append
265 run level=full pool=Test storage=File NightlySave yes
270 @# (no more Pool) Scratch + Recycle
272 run level=full pool=Test storage=File NightlySave yes
278 @# Used (prunable) + Pool
280 run level=full pool=Test storage=File NightlySave yes
285 @# Used (prunable) + oldest + Scratch
286 run level=full pool=Test storage=File NightlySave yes
291 @# Used (prunable) + oldest + Scratch
293 run level=full pool=Test storage=File NightlySave yes
303 awk '/Must choose/ { print $4 } ' tmp/log4.out > tmp/normal4
304 awk '/Volume name.+:/ { print $3 } ' tmp/log4.out > tmp/real4
305 if [ "$debug" -eq 1 ]; then
306 diff -ur tmp/normal4 tmp/real4
308 diff tmp/normal4 tmp/real4 > /dev/null
310 if [ $dstat -eq 0 ] ; then
312 if [ $dstat -ne 0 ] ; then
313 echo "normal4 and real4 differ!!!!!"
314 echo "normal4 and real4 differ!!!!!" >>test.out
318 # try to break the old code
319 # in this situation, we have 1 available volume (vol50) and bacula will try to use
320 # vol47, vol48 and vol49 and will stop without using vol50.
322 cat <<EOF > ${cwd}/tmp/bconcmds
323 @$out ${cwd}/tmp/log1.out
324 update volume=vol47 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
325 update volume=vol48 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
326 update volume=vol49 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
327 update volume=vol50 pool=Test VolStatus=Used VolRetention=10s inchanger=yes RecyclePool=Test
329 update Media SET FirstWritten='2005-01-01 01:00:00', LastWritten='2005-01-01 01:00:00'
330 WHERE VolumeName IN ('vol47', 'vol48', 'vol49');
334 run level=full pool=Test NightlySave yes
341 grep "Invalid slot=0 defined in catalog for Volume" tmp/log1.out > /dev/null
342 if [ $? -ne 0 ]; then
346 check_for_zombie_jobs storage=LTO3 client=${HOST}-fd