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