--- /dev/null
+#!/bin/sh
+#
+# Test different cancel cases
+# Can be quite long
+
+#
+TestName="cancel-test"
+JobName=backup
+. scripts/functions
+
+scripts/cleanup
+scripts/copy-confs
+
+#
+# Zap out any schedule in default conf file so that
+# it doesn't start during our test
+#
+outf="tmp/sed_tmp"
+echo "s% Schedule =%# Schedule =%g" >$outf
+cp ${cwd}/bin/bacula-dir.conf ${cwd}/tmp/1
+sed -f ${outf} ${cwd}/tmp/1 >${cwd}/bin/bacula-dir.conf
+
+touch tmp/log1.out
+
+# Add some jobs and fileset for this test
+cat <<EOF >>${cwd}/bin/bacula-dir.conf
+FileSet {
+ Name = FS_ERR
+ Include {
+ Options {
+ signature = MD5
+ }
+ file = "\\</path/to/nowhere"
+ }
+}
+Job {
+ Name = RUN_ERR1
+ ClientRunBeforeJob = "/bin/false"
+ JobDefs = DefaultJob
+}
+Job {
+ Name = RUN_ERR2
+ RunScript {
+ Command = "/bin/false"
+ RunsWhen = Before
+ }
+ JobDefs = DefaultJob
+}
+Job {
+ Name = RUN_ERR3
+ ClientRunBeforeJob="/bin/sleep 10"
+ RunScript {
+ Command = "/bin/sleep 600"
+ RunsWhen = After
+ RunsOnFailure = Yes
+ }
+ JobDefs = DefaultJob
+}
+EOF
+
+change_jobname Client1 $JobName
+start_test
+
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@output /dev/null
+messages
+@$out ${cwd}/tmp/logfile1.out
+@################################################################
+@# run a first test without volume
+@# Expect: duration < 60
+@################################################################
+run job=$JobName yes
+@sleep 5
+messages
+cancel
+yes
+wait
+messages
+@$out ${cwd}/tmp/logfile2.out
+@################################################################
+@# run test with a small volume
+@# Expect: duration < 60
+@################################################################
+label volume=TestVolume001 storage=File pool=Default
+update volume=TestVolume001 MaxVolBytes=1MB
+run job=$JobName yes
+@sleep 5
+messages
+st dir
+cancel
+yes
+wait
+messages
+@$out ${cwd}/tmp/logfile3.out
+@################################################################
+@# run test with 2 jobs in // (limit 1)
+@# expect that the second job don't stay in the list
+@# Expect: Job2 not present at the end
+@################################################################
+label volume=TestVolume002 storage=File pool=Default
+run job=$JobName yes
+@sleep 1
+messages
+run job=$JobName yes
+@sleep 1
+messages
+st dir
+cancel jobid=4
+@sleep 1
+st dir
+cancel jobid=3
+@sleep 1
+st dir
+wait
+messages
+@$out ${cwd}/tmp/logfile4.out
+@################################################################
+@# test with a broken fileset
+@# Expect: duration < 20s
+@################################################################
+run job=$JobName fileset=FS_ERR yes
+@sleep 3
+messages
+st dir
+wait
+messages
+@$out ${cwd}/tmp/logfile5.out
+@################################################################
+@# test with a broken runscript
+@# Expect: duration < 20s
+@################################################################
+run job=RUN_ERR1 yes
+@sleep 3
+messages
+st dir
+wait
+messages
+@$out ${cwd}/tmp/logfile6.out
+@################################################################
+@# test with a broken runscript
+@# Expect: duration < 20s
+@################################################################
+run job=RUN_ERR2 yes
+@sleep 3
+messages
+st dir
+wait
+messages
+@$out ${cwd}/tmp/logfile7.out
+@################################################################
+@# test with a broken runscript and a very long AfterJob
+@# we broke the backup during the ClientRunBeforeJob
+@# Expect: duration > 600
+@################################################################
+run job=RUN_ERR3 yes
+@sleep 5
+messages
+st dir
+cancel
+yes
+@sleep 5
+messages
+st dir
+wait
+messages
+@$out ${cwd}/tmp/logfile8.out
+@################################################################
+@# test with a broken runscript and a very long AfterJob
+@# we broke the backup during the ClientRunAfterJob
+@# Expect: duration > 600
+@################################################################
+run job=RUN_ERR3 yes
+@sleep 20
+messages
+st dir
+cancel
+yes
+@sleep 5
+messages
+st dir
+wait
+messages
+@$out ${cwd}/tmp/logfile9.out
+@################################################################
+@# test with a broken runscript and a very long AfterJob
+@# we broke the backup during the backup
+@# Expect: duration > 600
+@################################################################
+update volume=TestVolume002 volstatus=Used
+label volume=TestVolume003 storage=File pool=Default
+update volume=TestVolume003 MaxVolBytes=1MB
+run job=RUN_ERR3 yes
+@sleep 20
+messages
+st dir
+cancel
+yes
+@sleep 5
+messages
+st dir
+wait
+messages
+@$out ${cwd}/tmp/logfile20.out
+@################################################################
+@# test with a broken connexion between DIR/FD
+@# the test will run a job that will stop, and we send
+@# the STOP signal to the FD process
+@# Expect: duration < 400
+@################################################################
+update volume=TestVolume003 volstatus=Used
+label volume=TestVolume004 storage=File pool=Default
+update volume=TestVolume004 MaxVolBytes=1MB
+run job=$JobName yes
+@sleep 5
+messages
+quit
+END_OF_DATA
+
+run_bacula
+
+print_debug "Stopping FD"
+# stop the bacula-fd and cancel the job
+#kill -STOP $(pidof bacula-fd)
+
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@$out ${cwd}/tmp/logfile20.out
+@sleep 3
+messages
+st dir
+cancel
+yes
+st dir
+wait
+messages
+quit
+END_OF_DATA
+
+run_bconsole
+
+kill -CONT $(pidof bacula-fd)
+
+check_for_zombie_jobs storage=File
+stop_bacula
+
+# A fileset or runscript error goes fast
+check_duration ${cwd}/tmp/logfile4.out 30
+check_duration ${cwd}/tmp/logfile5.out 30
+check_duration ${cwd}/tmp/logfile6.out 30
+
+# Verify the broken connection
+check_duration ${cwd}/tmp/logfile20.out 400
+
+end_test