This repository has been archived by the owner on Mar 19, 2021. It is now read-only.
/
README
255 lines (175 loc) · 7.46 KB
/
README
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
Bareos Regression
=================
Origial author: Kern Sibbald
This is Bareos's regression script directory.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Warning!!!! Make sure not to run it on the same system
with your production Catalog because the tables will all
be deleted (dropped and recreated).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
bareos-regress package
======================
When using the bareos-regress package,
the software is already preconfigured to test bareos,
provided by the normal install packages.
The Bareos packages include a package that provide the required configuration:
bareos-regress-config
# as root: stop all running bareos daemon
# switch to user to bareos
su - bareos -s /bin/bash
# enable debug output
export REGRESS_DEBUG=1
# run a single test (and verify that it ends with "OK"
tests/backup-bareos-test
# run all disk tests
./all-disk-tests
Local Build
===========
get sources from github
-----------------------
# get Bareos core
git clone https://github.com/bareos/bareos-regress
# get bareos-regress
git clone https://github.com/bareos/bareos-regress
To set it up, create your personal configuration file, by
copying prototype.conf to config or simply editing prototype.conf
directly then copying it to the file config.
cd bareos-regress
cp prototype.conf config
You must end up with a file named config in the main regress
directory that has all the specifications that correspond to
your system.
Note, be sure it is not your production database
because Bareos will delete all the tables
and recreate them.
Then do:
make setup
You run the above one time.
This will substitute all variables in the *.in files,
copy the Bareos source, configure and build it.
If you change your source, you will need to redo this command.
If you only change some bareos-regress *.in files,
only a "make sed" is required.
Then you can run any of the tests in the tests subdirectory.
Each test whose name ends in -root requires you to be root for
a resonable run. Each test is totally independent of any other
test. Aside from the required "make setup", each test is totally
self-initalizing and should clean up after itself.
All the tests expect you to execute them from the main regress
directory.
Running the disk based tests:
You can run all the disk based tests by doing:
./do_disk
The disk based tests are totally separate from any production
system, provided you have configured the database appropriately
as noted above.
Running all the "standard" tests:
You can run all the disk and most of the tape tests by doing:
./do_all
======== Important !!! ============
When running the tape tests, Bareos will write on any tape that
is in the tape drive that you have configured. If it is a production
Bareos tape, it will be destroyed. If you have configured an Autochanger,
Bareos will write on the tapes in slots 1 and 2 thus destroying any
information on those tapes, even if they are Bareos production tapes.
===================================
Each of the above calls one or more scripts. By looking at the
scripts available in this directory, you can see that there are a number
of options for running tests.
You can run them individually as:
tests/two-jobs-test
or all non-root tests (my normal testing under my account)
./all-non-root-tests
or all tests
su
./all-tests
after running the root tests, while still root, it is a good idea
to do:
make reset
this cleans up any files that may be created with root permissions.
Tape test naming convention:
The last part of the tape test name indicates (in general) what kind
of test it is. They are broken (for the most part) into test names
ending with:
-test => a disk based test
-tape => a tape based test (can be a standalone tape drive
or an autochanger). Only one tape will be used
and it is assumed to be mounted.
-changer => you have an autochanger
Adding tests
============
If you want to add more tests, you can start from the example tests/1-example-test
and follow the instructions in this file, especially about where the configuration comes from
(configs/BASE plus individual extensions).
To avoid re-doing a make setup if you have made a change to the
conf files, and you do not need a new copy of the source, you can simply do:
make sed
Debugging failed tests
======================
Prior versions required editing the tests/xxxx and changing a debug flag.
However, that has been replaced by two environment variables:
REGRESS_DEBUG
REGRESS_WAIT
If you define REGRESS_DEBUG, e.g.
REGRESS_DEBUG=1
export REGRESS_DEBUG
then run a test, it will display the job and debug output.
If you define REGRESS_WAIT, the script will stop and request:
Start Bareos under debugger and enter anything when ready ...
At this point, you can start any of the daemons under the debugger,
then answer the message by entering any character. The script will
then continue. For any daemon or daemons that you have manually started,
you will see an error message when the script attempts to run a second
copy, but those messages can be ignored. This makes it reasonably easy
to run any component or components under the debugger if necessary.
Explicit example:
In shell window 1.
cd regress
export REGRESS_DEBUG=1
export REGRESS_WAIT=1
tests/name-of-script-test
(wait until it tells you to start the debugger)
In shell window 2
cd regress/bin
gdb bareos-xx (where xx is the component you want to debug).
(possibly set a break point -- normally not)
run -s -f
(wait for the output to stop)
In shell window 1
(enter any character or simply a return)
(ignore the error message it prints complaining that the daemon
you are debugging is already running, which is in fact the case).
That is all there is to it. The debugger window will get some
output and will stop waiting for input if anything goes wrong
like a seg fault. At that point, you can enter commands.
The procedure avoids modifying the test scripts and trying to
find pids and the such. If you want less debug output when
debugging, don't set REGRESS_DEBUG=1.
Troubleshooting
===============
If you run from time to time on a computer that is not connected
to the network, please be sure that "hostname" is set to "localhost",
otherwise, your tests may fail because the hostname used by Bareos's
./configure cannot be properly resolved.
Anyway, you can debug where it is happening in the source code using the
following example. For example, here I get the following backtrace:
======= Backtrace: =========
/lib/libc.so.6[0xb7b9d6e1]
/lib/libc.so.6(cfree+0x89)[0xb7b9ed79]
/home/kern/bareos/regress/bin/bareos-fd[0x8082ae5]
/home/kern/bareos/regress/bin/bareos-fd[0x8082d58]
/home/kern/bareos/regress/bin/bareos-fd[0x80838ac]
/home/kern/bareos/regress/bin/bareos-fd[0x807aa3f]
/home/kern/bareos/regress/bin/bareos-fd[0x807ac29]
/home/kern/bareos/regress/bin/bareos-fd[0x804d188]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb7b4ef9c]
/home/kern/bareos/regress/bin/bareos-fd[0x804cd21]
Now to convert this into something more meaningful, kill off any hung Bareos
processes. Note the one that was running -- above you see that it was
bareos-fd, then bring the same binary up in the debugger. Then start at the
first bareos-fd line, and feed the hex number to gdb as follows:
info symbol 0x8082ae5
free_addresses(dlist*) + 53 in section .text
info symbol 0x8082d58
add_address(dlist**, IPADDR::i_type, unsigned short, int, char const*, char
const*, char**) + 568 in section .text