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