]> git.sur5r.net Git - bacula/bacula/blob - regress/tests/next-vol-test
Make out of freespace non-fatal for removable devices -- i.e. behaves like tape
[bacula/bacula] / regress / tests / next-vol-test
1 #!/bin/sh
2 #
3 # Copyright (C) 2000-2017 Kern Sibbald
4 # License: BSD 2-Clause; see file LICENSE-FOSS
5 #
6 # This script will test next vol algo with
7 # vtape
8 #
9 # TODO: Test Pool with RecyclePool
10 #       Test Pool without RecyclePool
11 #       Test with enabled=false
12 #       Test with recycle=no
13 #       Track scratch usage
14 #
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.
18 #
19 . scripts/functions
20
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  ==="
24   exit 0
25 fi
26 if test x$FORCE_CLOUD = xyes ; then
27   echo "\n=== Test next-vol-test skipped not compatible with Cloud  ==="
28   exit 0
29 fi
30
31
32 TestName="next-vol-test"
33 JobName=backup
34
35 require_linux
36 scripts/cleanup
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
41
42
43 start_test
44
45 cat <<EOF > ${cwd}/tmp/bconcmds
46 @$out ${cwd}/tmp/log.out
47 label barcodes storage=LTO3 slots=46-59 drive=0 pool=Scratch
48 yes
49 sql
50 update Media SET FirstWritten='2006-01-01 01:00:00', LastWritten='2006-01-01 01:00:00';
51
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
55 purge  volume=vol57
56 update volume=vol56 pool=Test
57 update volume=vol55 pool=Test volstatus=Full
58 update volume=vol46 volstatus=Full volretention=15 
59 purge volume=vol46
60 update volume=vol46 pool=Test
61 update volume=vol54 volstatus=Recycle
62 purge  volume=vol53
63 update volume=vol52 MaxVolJobs=1 volretention=15
64 update volume=vol51 inchanger=no volstatus=Recycle
65 purge  volume=vol50
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
70 sql
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';
74
75 list volumes
76 wait
77 quit
78 EOF
79
80 run_bacula
81
82 echo $PWD/build/po > tmp/file-list
83
84 cat <<EOF > ${cwd}/tmp/bconcmds
85 @$out ${cwd}/tmp/log2.out
86 @# Must choose vol56
87 @# Pool + Append + Enabled + InChanger
88 @# JobId=1
89 run level=full pool=Test NightlySave yes
90 wait
91 message
92 list volumes
93 @# Must choose vol58
94 @# Pool + Recycled + Enabled + InChanger
95 @# JobId=2
96 run level=full pool=Test NightlySave yes
97 wait
98 message
99 list volume
100 @# Must choose vol46
101 @# Pool + Purged + Enabled + InChanger
102 @# JobId=3
103 run level=full pool=Test NightlySave yes
104 wait
105 message
106 list volumes
107 @# Must choose vol55
108 @# Pool + Full + Recycle + Enabled + InChanger
109 @# JobId=4
110 run level=full pool=Test NightlySave yes
111 wait
112 message
113 list volumes
114 @# Must choose vol54
115 @# No more in Test pool, get from scratch
116 @# vol52 is Append, but have 1 job and MaxJob
117 @# Scratch + Recycle + Enabled + InChanger
118 @# JobId=5
119 run level=full pool=Test NightlySave yes
120 wait
121 message
122 list volume
123 @# Must choose vol52
124 @# Scratch + Purged + Enabled + InChanger + LastW
125 @# JobId=6
126 run level=Full pool=Test NightlySave yes
127 wait
128 message
129 list volume
130 @# Must choose vol57
131 @# Scratch + Purged + Enabled + InChanger + LastW
132 @# JobId=7
133 run level=full pool=Test NightlySave yes
134 wait
135 message
136 list volumes
137 @# Must choose vol53
138 @# Scratch + Purged + Enabled + InChanger + LastW
139 @# JobId=8
140 run level=full pool=Test NightlySave yes
141 wait
142 messages
143 list volumes
144 @# JobId=9
145 restore fileset="Full Set" pool=Test where=${cwd}/tmp/bacula-restores select all done
146 1
147 yes
148 wait
149 messages
150 wait
151 messages
152 @# Must Wait
153 @#run level=full pool=Test NightlySave yes
154 @#wait
155 @#message
156 @#list volume
157 quit
158 EOF
159
160 run_bconsole
161
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
166 else
167    diff tmp/normal tmp/real > /dev/null
168 fi
169 dstat=$?
170
171
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
186 sql
187 update Media SET FirstWritten='2006-01-01 01:00:00', LastWritten='2006-01-01 01:00:00';
188
189 update volume=file2 enabled=no
190 update volume=file3 volstatus=Recycle
191 @# volstatus=Purged
192 purge  volume=file4
193 update volume=file5 recycle=no volretention=1
194 update volume=file6 volstatus=Full volretention=15 
195 update volume=file7 volstatus=Full volretention=15 
196 purge volume=file7
197 update volume=file8 pool=Test VolRetention=1
198 update volume=file9 volstatus=Recycle
199 purge volume=file11
200 sql
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';
204
205 messages
206 @$out ${cwd}/tmp/log4.out
207 list volume
208 messages
209 @# Must choose file1
210 @# Pool + Append + Lowest MediaId
211 @# JobId=10
212 run level=full pool=Test storage=File NightlySave yes
213 wait
214 message
215 list volume
216 @# Must choose file5
217 @# Pool + Append + Lowest MediaId (only once)
218 @# JobId=11
219 run level=full pool=Test storage=File NightlySave yes
220 wait
221 message
222 list volume
223 @# Must choose file8
224 @# Pool + Append + Lowest MediaId
225 @# JobId=12
226 run level=full pool=Test storage=File NightlySave yes
227 wait
228 message
229 list volume
230 @# Must choose file3
231 @# Pool + Recycle
232 @# JobId=13
233 run level=full pool=Test storage=File NightlySave yes
234 wait
235 message
236 list volume
237 @# Must choose file11
238 @# Pool + Purged
239 @# JobId=14
240 run level=full pool=Test storage=File NightlySave yes
241 wait
242 message
243 list volume
244 @# Must choose file6
245 @# Pool + Full (prunable)
246 setdebug level=50 director
247 @# JobId=15
248 run level=full pool=Test storage=File NightlySave yes
249 wait
250 message
251 setdebug level=0 director
252 list volume
253 @sleep 5
254 @# Must choose file8
255 @# Pool + Full (prunable)
256 @# JobId=16
257 run level=full pool=Test storage=File NightlySave yes
258 wait
259 message
260 update volume=file8 enabled=no
261 list volume
262 @# Must choose file10
263 @# (no more Pool) Scratch + Append
264 @# JobId=17
265 run level=full pool=Test storage=File NightlySave yes
266 wait
267 message
268 list volume
269 @# Must choose file9
270 @# (no more Pool) Scratch + Recycle
271 @# JobId=18
272 run level=full pool=Test storage=File NightlySave yes
273 wait
274 message
275 list volume
276 @sleep 10
277 @# Must choose file6
278 @# Used (prunable) + Pool
279 @# JobId=19
280 run level=full pool=Test storage=File NightlySave yes
281 wait
282 message
283 list volume
284 @# Must choose file4
285 @# Used (prunable) + oldest + Scratch
286 run level=full pool=Test storage=File NightlySave yes
287 wait
288 message
289 list volume
290 @# Must choose file7
291 @# Used (prunable) + oldest + Scratch
292 @# JobId=20
293 run level=full pool=Test storage=File NightlySave yes
294 wait
295 message
296 list volume
297 wait
298 quit
299 EOF
300
301 run_bconsole
302
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
307 else
308    diff tmp/normal4 tmp/real4 > /dev/null
309 fi
310 if [ $dstat -eq 0 ] ; then
311    dstat=$?
312    if [ $dstat -ne 0 ] ; then
313       echo "normal4 and real4 differ!!!!!"
314       echo "normal4 and real4 differ!!!!!"  >>test.out
315    fi
316 fi
317
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.
321
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
328 sql
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');
331
332 list volume
333 @# JobId=21
334 run level=full pool=Test NightlySave yes
335 wait
336 messages
337 quit
338 EOF
339
340 run_bconsole
341 grep "Invalid slot=0 defined in catalog for Volume" tmp/log1.out > /dev/null
342 if [ $? -ne 0 ]; then
343    bstat=$?
344 fi
345
346 check_for_zombie_jobs storage=LTO3 client=${HOST}-fd
347 stop_bacula
348
349 check_two_logs
350
351 end_test