]> git.sur5r.net Git - bacula/bacula/blob - regress/tests/next-vol-test
Backport from Bacula Enterprise
[bacula/bacula] / regress / tests / next-vol-test
1 #!/bin/sh
2 #
3 # Copyright (C) 2000-2015 Kern Sibbald
4 # License: BSD 2-Clause; see file LICENSE-FOSS
5 #
6
7 #
8 # This script will test next vol algo with
9 # vtape
10 #
11 # TODO: Test Pool with RecyclePool
12 #       Test Pool without RecyclePool
13 #       Test with enabled=false
14 #       Test with recycle=no
15 #       Track scratch usage
16 #
17 # Please do not write any more tests with so many Jobs and combinations,
18 #  because when something goes wrong it is very hard and time consuming
19 #  to know what caused the failure.
20 #
21 . scripts/functions
22
23 TestName="next-vol-test"
24 JobName=backup
25
26 require_linux
27 scripts/cleanup
28 scripts/copy-tape-confs
29 cp scripts/bacula-dir-vtape.conf bin/bacula-dir.conf
30 cp scripts/bacula-sd-vtape.conf bin/bacula-sd.conf
31 scripts/prepare-fake-autochanger
32
33
34 start_test
35
36 cat <<EOF > ${cwd}/tmp/bconcmds
37 @$out ${cwd}/tmp/log.out
38 label barcodes storage=LTO3 slots=46-59 drive=0 pool=Scratch
39 yes
40 sql
41 update Media SET FirstWritten='2006-01-01 01:00:00', LastWritten='2006-01-01 01:00:00';
42
43 update volume=vol47 pool=Test inchanger=no RecyclePool=Test
44 update volume=vol59 pool=Test enabled=no
45 update volume=vol58 pool=Test volstatus=Recycle
46 purge  volume=vol57
47 update volume=vol56 pool=Test
48 update volume=vol55 pool=Test volstatus=Full
49 update volume=vol46 volstatus=Full volretention=15 
50 purge volume=vol46
51 update volume=vol46 pool=Test
52 update volume=vol54 volstatus=Recycle
53 purge  volume=vol53
54 update volume=vol52 MaxVolJobs=1 volretention=15
55 update volume=vol51 inchanger=no volstatus=Recycle
56 purge  volume=vol50
57 update volume=vol50 inchanger=no
58 update volume=vol49 inchanger=no
59 update volume=vol48 inchanger=no pool=Test
60 update volume  AllFromPool=Test
61 sql
62 update Media SET VolJobs=1 WHERE VolumeName='vol52';
63 update Media SET LastWritten='2006-01-01 01:00:01' WHERE VolumeName='vol57';
64 update Media SET LastWritten='2006-01-01 01:00:02' WHERE VolumeName='vol53';
65
66 list volumes
67 wait
68 quit
69 EOF
70
71 run_bacula
72
73 echo $PWD/build/po > tmp/file-list
74
75 cat <<EOF > ${cwd}/tmp/bconcmds
76 @$out ${cwd}/tmp/log2.out
77 @# Must choose vol56
78 @# Pool + Append + Enabled + InChanger
79 @# JobId=1
80 run level=full pool=Test NightlySave yes
81 wait
82 message
83 list volumes
84 @# Must choose vol58
85 @# Pool + Recycled + Enabled + InChanger
86 @# JobId=2
87 run level=full pool=Test NightlySave yes
88 wait
89 message
90 list volume
91 @# Must choose vol46
92 @# Pool + Purged + Enabled + InChanger
93 @# JobId=3
94 run level=full pool=Test NightlySave yes
95 wait
96 message
97 list volumes
98 @# Must choose vol55
99 @# Pool + Full + Recycle + Enabled + InChanger
100 @# JobId=4
101 run level=full pool=Test NightlySave yes
102 wait
103 message
104 list volumes
105 @# Must choose vol54
106 @# No more in Test pool, get from scratch
107 @# vol52 is Append, but have 1 job and MaxJob
108 @# Scratch + Recycle + Enabled + InChanger
109 @# JobId=5
110 run level=full pool=Test NightlySave yes
111 wait
112 message
113 list volume
114 @# Must choose vol52
115 @# Scratch + Purged + Enabled + InChanger + LastW
116 @# JobId=6
117 run level=Full pool=Test NightlySave yes
118 wait
119 message
120 list volume
121 @# Must choose vol57
122 @# Scratch + Purged + Enabled + InChanger + LastW
123 @# JobId=7
124 run level=full pool=Test NightlySave yes
125 wait
126 message
127 list volumes
128 @# Must choose vol53
129 @# Scratch + Purged + Enabled + InChanger + LastW
130 @# JobId=8
131 run level=full pool=Test NightlySave yes
132 wait
133 messages
134 list volumes
135 @# JobId=9
136 restore fileset="Full Set" pool=Test where=${cwd}/tmp/bacula-restores select all done
137 1
138 yes
139 wait
140 messages
141 wait
142 messages
143 @# Must Wait
144 @#run level=full pool=Test NightlySave yes
145 @#wait
146 @#message
147 @#list volume
148 quit
149 EOF
150
151 run_bconsole
152
153 awk '/Must choose/ { print $4 } '    tmp/log2.out > tmp/normal
154 awk '/Volume name.+:/ { print $3 } ' tmp/log2.out > tmp/real
155 if [ "$debug" -eq 1 ]; then
156    diff -ur tmp/normal tmp/real
157 else
158    diff tmp/normal tmp/real > /dev/null
159 fi
160 dstat=$?
161
162
163 # so some tests with File media
164 cat <<EOF > ${cwd}/tmp/bconcmds
165 @$out ${cwd}/tmp/log3.out
166 label volume=file1 storage=File pool=Test
167 label volume=file2 storage=File pool=Test
168 label volume=file3 storage=File pool=Test
169 label volume=file4 storage=File pool=Scratch
170 label volume=file5 storage=File pool=Test
171 label volume=file6 storage=File pool=Test
172 label volume=file7 storage=File pool=Scratch
173 label volume=file8 storage=File pool=Test
174 label volume=file9 storage=File pool=Scratch
175 label volume=file10 storage=File pool=Scratch
176 label volume=file11 storage=File pool=Test
177 sql
178 update Media SET FirstWritten='2006-01-01 01:00:00', LastWritten='2006-01-01 01:00:00';
179
180 update volume=file2 enabled=no
181 update volume=file3 volstatus=Recycle
182 @# volstatus=Purged
183 purge  volume=file4
184 update volume=file5 recycle=no volretention=1
185 update volume=file6 volstatus=Full volretention=15 
186 update volume=file7 volstatus=Full volretention=15 
187 purge volume=file7
188 update volume=file8 pool=Test VolRetention=1
189 update volume=file9 volstatus=Recycle
190 purge volume=file11
191 sql
192 update Media SET VolJobs=1 WHERE VolumeName='file9';
193 update Media SET LastWritten='2006-01-01 01:00:01' WHERE VolumeName='file4';
194 update Media SET LastWritten='2006-01-01 01:00:02' WHERE VolumeName='file7';
195
196 messages
197 @$out ${cwd}/tmp/log4.out
198 list volume
199 messages
200 @# Must choose file1
201 @# Pool + Append + Lowest MediaId
202 @# JobId=10
203 run level=full pool=Test storage=File NightlySave yes
204 wait
205 message
206 list volume
207 @# Must choose file5
208 @# Pool + Append + Lowest MediaId (only once)
209 @# JobId=11
210 run level=full pool=Test storage=File NightlySave yes
211 wait
212 message
213 list volume
214 @# Must choose file8
215 @# Pool + Append + Lowest MediaId
216 @# JobId=12
217 run level=full pool=Test storage=File NightlySave yes
218 wait
219 message
220 list volume
221 @# Must choose file3
222 @# Pool + Recycle
223 @# JobId=13
224 run level=full pool=Test storage=File NightlySave yes
225 wait
226 message
227 list volume
228 @# Must choose file11
229 @# Pool + Purged
230 @# JobId=14
231 run level=full pool=Test storage=File NightlySave yes
232 wait
233 message
234 list volume
235 @# Must choose file6
236 @# Pool + Full (prunable)
237 setdebug level=50 director
238 @# JobId=15
239 run level=full pool=Test storage=File NightlySave yes
240 wait
241 message
242 setdebug level=0 director
243 list volume
244 @sleep 5
245 @# Must choose file8
246 @# Pool + Full (prunable)
247 @# JobId=16
248 run level=full pool=Test storage=File NightlySave yes
249 wait
250 message
251 update volume=file8 enabled=no
252 list volume
253 @# Must choose file10
254 @# (no more Pool) Scratch + Append
255 @# JobId=17
256 run level=full pool=Test storage=File NightlySave yes
257 wait
258 message
259 list volume
260 @# Must choose file9
261 @# (no more Pool) Scratch + Recycle
262 @# JobId=18
263 run level=full pool=Test storage=File NightlySave yes
264 wait
265 message
266 list volume
267 @sleep 10
268 @# Must choose file6
269 @# Used (prunable) + Pool
270 @# JobId=19
271 run level=full pool=Test storage=File NightlySave yes
272 wait
273 message
274 list volume
275 @# Must choose file4
276 @# Used (prunable) + oldest + Scratch
277 run level=full pool=Test storage=File NightlySave yes
278 wait
279 message
280 list volume
281 @# Must choose file7
282 @# Used (prunable) + oldest + Scratch
283 @# JobId=20
284 run level=full pool=Test storage=File NightlySave yes
285 wait
286 message
287 list volume
288 wait
289 quit
290 EOF
291
292 run_bconsole
293
294 awk '/Must choose/ { print $4 } '    tmp/log4.out > tmp/normal4
295 awk '/Volume name.+:/ { print $3 } ' tmp/log4.out > tmp/real4
296 if [ "$debug" -eq 1 ]; then
297    diff -ur tmp/normal4 tmp/real4
298 else
299    diff tmp/normal4 tmp/real4 > /dev/null
300 fi
301 if [ $dstat -eq 0 ] ; then
302    dstat=$?
303    if [ $dstat -ne 0 ] ; then
304       echo "normal4 and real4 differ!!!!!"
305       echo "normal4 and real4 differ!!!!!"  >>test.out
306    fi
307 fi
308
309 # try to break the old code 
310 # in this situation, we have 1 available volume (vol50) and bacula will try to use
311 # vol47, vol48 and vol49 and will stop without using vol50.
312
313 cat <<EOF > ${cwd}/tmp/bconcmds
314 @$out ${cwd}/tmp/log1.out
315 update volume=vol47 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
316 update volume=vol48 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
317 update volume=vol49 pool=Test VolStatus=Used VolRetention=10s inchanger=no RecyclePool=Test
318 update volume=vol50 pool=Test VolStatus=Used VolRetention=10s inchanger=yes RecyclePool=Test
319 sql
320 update Media SET FirstWritten='2005-01-01 01:00:00', LastWritten='2005-01-01 01:00:00' 
321 WHERE VolumeName IN ('vol47', 'vol48', 'vol49');
322
323 list volume
324 @# JobId=21
325 run level=full pool=Test NightlySave yes
326 wait
327 messages
328 quit
329 EOF
330
331 run_bconsole
332 grep "Invalid slot=0 defined in catalog for Volume" tmp/log1.out > /dev/null
333 if [ $? -ne 0 ]; then
334    bstat=$?
335 fi
336
337 check_for_zombie_jobs storage=LTO3 client=${HOST}-fd
338 stop_bacula
339
340 check_two_logs
341
342 end_test