-
Notifications
You must be signed in to change notification settings - Fork 2
/
test-fsa-none.sh
executable file
·178 lines (144 loc) · 5.05 KB
/
test-fsa-none.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#! /bin/bash
# test that the --fsa-scope-none option works
# setup a btrfs file system, backup and restore to another type of filesystem
# setup a btrfs file system
# set an attibute not supported on ext4 file systems
# run install.sh
# run dar-backup.sh
# restore the file with ext4 unsupprted attribute
# add file GREENLAND.JEP to "include dir" and to the "exclude dir"
# run dar-diff-backup.sh
# list the FULL & DIFF archives
SCRIPTPATH=$(realpath "$0")
SCRIPTDIRPATH=$(dirname "$SCRIPTPATH")
echo SCRIPTDIRPATH: "$SCRIPTDIRPATH"
source "$SCRIPTDIRPATH/setup.sh"
source "$TESTDIR/conf/dar-backup.conf"
BTRFS_FILE="/tmp/btrfs-file"
BTRFS_MOUNT_POINT="/tmp/mnt/btrfs"
# check if mounted btrfs exist
mount | grep "$BTRFS_MOUNT_POINT"
if [[ $? == "0" ]]; then
umount "$BTRFS_MOUNT_POINT"
if [[ $? != "0" ]]; then
echo "umount of $BTRFS_MOUNT_POINT failed, exiting"
exit 1
fi
fi
rm -f "$BTRFS_FILE"
# setup a btrfs filesystem
dd if=/dev/zero of="$BTRFS_FILE" bs=1024 count=150000
mkfs.btrfs "$BTRFS_FILE"
rm -fr "$BTRFS_MOUNT_POINT"
mkdir -p "$BTRFS_MOUNT_POINT"
mount "$BTRFS_FILE" "$BTRFS_MOUNT_POINT"
chmod 777 "$BTRFS_MOUNT_POINT"
cp -R "$TESTDIR" "$BTRFS_MOUNT_POINT"
"$BTRFS_MOUNT_POINT"/dar-backup-test/bin/install.sh
# set new TESTDIR location
TESTDIR="$BTRFS_MOUNT_POINT"/dar-backup-test
MOUNT_POINT="$TESTDIR/archives"
LOG_LOCATION="$MOUNT_POINT"
ATTRIBUTE_FILE="${TESTDIR}/dirs/attribute-test"
# set a non ext{2,3,4} attibute
touch "$ATTRIBUTE_FILE"
chattr +c "$ATTRIBUTE_FILE"
# run the test
"$TESTDIR/bin/dar-backup.sh" -d TEST --local-backup-dir --fsa-scope-none --verbose
RESULT=$?
if [[ $RESULT != "0" ]]; then
TESTRESULT=1
fi
dar -l "$MOUNT_POINT/TEST_FULL_$DATE" > "$TESTDIR/FULL-filelist.txt"
RESULT=$?
echo dar exit code: $RESULT
if [[ $RESULT != "0" ]]; then
TESTRESULT=1
fi
# test restore the attribute-test file
temp_dir=$(mktemp -d) || { echo "temp dir not created, exiting"; exit 1; }
echo "Restore test of \"attribute-test\""
dar -x "$MOUNT_POINT/TEST_FULL_$DATE" -R "$temp_dir" -g "dirs/attribute-test" -Oignore-owner --fsa-scope none
RESULT=$?
if [[ $RESULT != "0" ]]; then
TESTRESULT=1
echo "ERROR: \"attribute-test\" was not restored, exit code: $RESULT"
else
echo "\"attribute-test\" successfully restored, exit code: $RESULT"
fi
if [[ -e "${temp_dir}/dirs/attribute-test" ]]; then
echo "Restored file found"
else
echo "Restore file not found"
TESTRESULT=1
fi
# alter backup set
cp "$SCRIPTDIRPATH/GREENLAND.JPEG" "$TESTDIR/dirs/include this one/"
cp "$SCRIPTDIRPATH/GREENLAND.JPEG" "$TESTDIR/dirs/exclude this one/"
# run DIFF backup
"$TESTDIR/bin/dar-diff-backup.sh" -d TEST --local-backup-dir --fsa-scope-none
RESULT=$?
if [[ $RESULT != "0" ]]; then
TESTRESULT=1
fi
dar -l "$MOUNT_POINT/TEST_DIFF_$DATE" > "$TESTDIR/DIFF-filelist.txt"
RESULT=$?
if [[ $RESULT != "0" ]]; then
TESTRESULT=1
fi
# modify a file backed up in the DIFF
touch "$TESTDIR/dirs/include this one/GREENLAND.JPEG"
# run INCREMENTAL backup
"$TESTDIR/bin/dar-inc-backup.sh" -d TEST --local-backup-dir --fsa-scope-none
RESULT=$?
if [[ $RESULT != "0" ]]; then
TESTRESULT=1
fi
dar -l "$MOUNT_POINT/TEST_INC_$DATE" > "$TESTDIR/INC-filelist.txt"
RESULT=$?
if [[ $RESULT != "0" ]]; then
TESTRESULT=1
fi
if [[ $TESTRESULT != "0" ]]; then
echo "Something went wrong, exiting"
umount "$BTRFS_MOUNT_POINT"
rm -fr "$BTRFS_FILE"
exit 1
fi
echo .
echo ..
echo ===========================================
echo "cat filelists & logfile, then do checks"
echo ===========================================
echo "FULL dar archive:"
cat "$TESTDIR/FULL-filelist.txt"
echo "DIFF dar archive:"
cat "$TESTDIR/DIFF-filelist.txt"
echo "Logfile:"
cat "$LOG_LOCATION/dar-backup.log"
echo RESULTS for FULL backup:
# FULL backup
checkExpectLog "\[Saved\].*?dirs/include this one/Abe.jpg" "$TESTDIR/FULL-filelist.txt"
checkExpectLog "\[Saved\].*?dirs/include this one/Krummi.JPG" "$TESTDIR/FULL-filelist.txt"
checkExpectLog "\[Saved\].*?dirs/compressable/Lorem Ipsum.txt" "$TESTDIR/FULL-filelist.txt"
checkExpectLog "\[Saved\].*?dirs/attribute-test" "$TESTDIR/FULL-filelist.txt"
checkDontFindLog "include this one/GREENLAND.JPEG" "$TESTDIR/FULL-filelist.txt"
checkDontFindLog "exclude this one/In exclude dir.txt" "$TESTDIR/FULL-filelist.txt"
echo RESULTS for DIFF backup:
# DIFF backup
checkExpectLog "\[Saved\].*?dirs/include this one/GREENLAND.JPEG" "$TESTDIR/DIFF-filelist.txt"
checkDontFindLog "exclude this one/GREENLAND.JPEG" "$TESTDIR/DIFF-filelist.txt"
echo RESULTS for INCREMENTAL backup:
# INC backup
checkExpectLog "\[Saved\].*?dirs/include this one/GREENLAND.JPEG" "$TESTDIR/INC-filelist.txt"
NO_SAVED=$(grep -c "\[Saved\]" "$TESTDIR/INC-filelist.txt")
if [[ $NO_SAVED == "1" ]]; then
echo "ok Number of files saved in INCREMENTAL archive: $NO_SAVED"
else
echo "error more than one file saved in the INCREMENTAL archive"
TESTRESULT=1
fi
umount "$BTRFS_MOUNT_POINT"
rm -fr "$BTRFS_FILE"
echo TEST RESULT: "$TESTRESULT"
exit "$TESTRESULT"