#!/bin/sh
#
# Copyright (C) 2000-2025 Kern Sibbald
# License: BSD 2-Clause; see file LICENSE-FOSS
#

#
# Run a simple backup of the Bacula build directory then create some           
#   new files, do an Incremental and restore those two files.
#
TestName="incremental-test"
JobName=Incremental 
. scripts/functions

${rscripts}/cleanup
${rscripts}/copy-test-confs
echo "${tmpsrc}" >${tmp}/file-list
mkdir -p ${tmpsrc}
cp -p ${src}/src/dird/*.c ${tmpsrc}
cd ${tmp}
echo "${tmpsrc}/ficheriro1.txt" >restore-list
echo "${tmpsrc}/ficheriro2.txt" >>restore-list
cd ${cwd}

change_jobname CompressedTest $JobName
start_test

cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
setdebug level=4 storage=File
@#setdebug level=200 client
@#setdebug level=100 director
label storage=File volume=TestVolume001
label storage=File volume=TestVolume002
run job=$JobName yes
status client
wait
messages
quit
END_OF_DATA

run_bacula
check_for_zombie_jobs storage=File
#
# Now create two new files to be restored later
#
sleep 1
echo "ficheriro1.txt" >${tmpsrc}/ficheriro1.txt
cp -f ${tmpsrc}/dird.c ${tmpsrc}/ficheriro2.txt

cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
@# Force Incremental on the second Volume
setdebug level=4 storage=File
update volume=TestVolume001 VolStatus=Used
run level=Differential job=$JobName yes
wait
messages
quit
END_OF_DATA

run_bconsole

sleep 1
touch ${tmpsrc}/ficheriro1.txt
touch ${tmpsrc}/ficheriro2.txt

cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
setdebug level=4 storage=File
run level=Incremental job=$JobName yes
wait
messages
quit
END_OF_DATA

run_bconsole

sleep 1
cd ${tmpsrc}
cp -f ficheriro2.txt 1
sed "s%a%b%g" 1 >ficheriro2.txt
rm -f 1
cd ${cwd}
cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
setdebug level=4 storage=File
run level=Differential job=$JobName yes
wait
messages
quit
END_OF_DATA

run_bconsole

sleep 1
touch ${tmpsrc}/ficheriro1.txt
touch ${tmpsrc}/ficheriro2.txt
cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
setdebug level=4 storage=File
run level=Incremental job=$JobName yes
wait
messages
quit
END_OF_DATA

run_bconsole

sleep 1
touch ${tmpsrc}/ficheriro1.txt
touch ${tmpsrc}/ficheriro2.txt
cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
setdebug level=4 storage=File
run level=Incremental job=$JobName yes
wait
messages
quit
END_OF_DATA

run_bconsole

sleep 1
touch ${tmpsrc}/ficheriro1.txt
touch ${tmpsrc}/ficheriro2.txt
cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
setdebug level=4 storage=File
run level=Incremental job=$JobName yes
wait
messages
quit
END_OF_DATA

run_bconsole
sleep 1
touch ${tmpsrc}/ficheriro1.txt
touch ${tmpsrc}/ficheriro2.txt

cat <<END_OF_DATA >${tmp}/bconcmds
@output /dev/null
messages
@$out ${tmp}/log1.out
setdebug level=4 storage=File
run level=Incremental job=$JobName yes
wait
messages
@# 
@# now do a restore
@#
@$out ${tmp}/log2.out
setdebug level=10 storage=File
restore where=${tmp}/bacula-restores storage=File file=<${tmp}/restore-list
yes
wait
status client
status storage=File
messages
quit
END_OF_DATA

run_bconsole
check_for_zombie_jobs storage=File
stop_bacula

check_two_logs
#
# Delete .c files because we will only restored the txt files
#
rm -f ${tmpsrc}/*.c
check_restore_tmp_build_diff
end_test
