Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
ISC Open Source Projects
BIND
Commits
2fafcc2c
Commit
2fafcc2c
authored
Mar 20, 2020
by
Michal Nowak
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'mnowak/unit-test-debugging-enhancements' into 'master'
Enhance unit test debugging See merge request
!2990
parents
eb26fdf7
8fad74e0
Pipeline
#37140
passed with stages
in 5 minutes and 23 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
26 deletions
+36
-26
.gitlab-ci.yml
.gitlab-ci.yml
+1
-8
unit/unittest.sh.in
unit/unittest.sh.in
+35
-18
No files found.
.gitlab-ci.yml
View file @
2fafcc2c
...
...
@@ -313,10 +313,7 @@ stages:
after_script
:
-
*kyua_report_html
artifacts
:
paths
:
-
kyua.log
-
kyua.results
-
kyua_html/
untracked
:
true
expire_in
:
"
1
day"
when
:
on_failure
...
...
@@ -1088,8 +1085,6 @@ system:clang:freebsd11.3:amd64:
unit:clang:freebsd11.3:amd64:
<<
:
*freebsd_amd64
<<
:
*unit_test_job
variables
:
USER
:
gitlab-runner
needs
:
-
job
:
clang:freebsd11.3:amd64
artifacts
:
true
...
...
@@ -1117,8 +1112,6 @@ system:clang:freebsd12.1:amd64:
unit:clang:freebsd12.1:amd64:
<<
:
*freebsd_amd64
<<
:
*unit_test_job
variables
:
USER
:
gitlab-runner
needs
:
-
job
:
clang:freebsd12.1:amd64
artifacts
:
true
...
...
unit/unittest.sh.in
View file @
2fafcc2c
...
...
@@ -12,42 +12,59 @@ kyua_report() {
${
KYUA
}
--logfile
/dev/null report
--results-file
"
${
KYUA_RESULT
:-
LATEST
}
"
}
clear_kyua_work_dir
()
{
KYUA_WORK_DIR
=
"
$(
grep
-i
-m1
"failed"
"
${
1
}
"
|
sed
-n
's|.*\(/tmp/kyua\.[A-Za-z0-9]*\).*|\1|p'
)
"
if
[
-n
"
${
CI
}
"
]
&&
[
-d
"
${
KYUA_WORK_DIR
}
"
]
;
then
find
"
${
KYUA_WORK_DIR
}
"
\(
-name
'core*'
-o
-name
'*.core'
\)
-exec
mv
-v
{}
.
\;
rm
-rf
"
${
KYUA_WORK_DIR
}
"
fi
}
status
=
0
if
[
-n
"
${
UNITTESTS
}
"
]
&&
[
-f
Kyuafile
]
then
echo
"S:unit:
$(
date
)
"
echo
"T:unit:1:A"
echo
"I: unit tests (using kyua)"
echo
"I:unit tests (using kyua)"
${
KYUA
}
-v
parallelism
=
"
${
TEST_PARALLEL_JOBS
:-
1
}
"
--logfile
kyua.log
--loglevel
debug
test
--results-file
"
${
KYUA_RESULT
:-
NEW
}
"
status
=
$?
kyua_report
if
command
-v
sysctl
>
/dev/null
;
then
if
[
"
$(
uname
-s
)
"
=
"Linux"
]
&&
[
"
$(
sysctl
-n
kernel.core_uses_pid
)
"
-ne
1
]
;
then
echo
"kernel.core_uses_pid is not set on the Linux host"
echo
"kyua may not find core file of broken tests"
fi
else
echo
"sysctl command is not present, can't check kernel.core_uses_pid."
echo
"kyua may not find core file of broken tests"
fi
clear_kyua_work_dir kyua.log
# Use kyua-debug(1) facility to gather additional data on failed tests.
# Some runs will just show verbose information from the run, some will
# show backtrace via gdb(1).
broken_tests
=
$(
kyua_report |
awk
'$2 == "->" && ( $3 == "broken:" || $3 == "failed:" ) { print $1 }'
)
if
[
-n
"
${
CI
}
"
]
&&
[
"
$(
id
-u
)
"
-eq
0
]
&&
[
-n
"
${
broken_tests
}
"
]
&&
[
-n
"
${
GDB
}
"
]
;
then
# kyua debug command misidentifies broken binary when libtool is used
# to configure BIND (see https://github.com/jmmv/kyua/issues/207).
# Here we try "trick" kyua use our custom gdb script instead
# of using gdb(1) directly. That's why this part needs to be run as root
USER_ID
=
$(
id
-u
)
BROKEN_TESTS
=
$(
kyua_report |
awk
'$2 == "->" && ( $3 == "broken:" || $3 == "failed:" ) { print $1 }'
)
# Conditions for getting kyua debug info and GDB backtrace: runs under CI
# (safety), GDB present, root privileges, failed tests.
if
[
-n
"
${
CI
}
"
]
&&
[
-n
"
${
GDB
}
"
]
&&
[
"
${
USER_ID
:-
1
}
"
-eq
0
]
&&
[
-n
"
${
BROKEN_TESTS
}
"
]
;
then
if
[
"
$(
uname
-s
)
"
=
"Linux"
]
&&
!
sysctl
-n
"kernel.core_pattern"
|
grep
-xq
"core.%p"
;
then
echo
"I:*** kernel.core_pattern is not set to 'core.%p'"
echo
"I:*** kyua may not be able to find core dumps for broken tests"
fi
if
[
"
$(
uname
-s
)
"
=
"FreeBSD"
]
&&
!
sysctl
-n
"kern.corefile"
|
grep
-xq
"core.%P"
;
then
echo
"I:*** kern.corefile is not set to 'core.%P'"
echo
"I:*** kyua may not be able to find core dumps for broken tests"
fi
# kyua debug command misidentifies broken binaries when libtool
# is used (see https://github.com/jmmv/kyua/issues/207).
# Here we try to "trick" kyua to use our custom gdb script instead
# of using gdb(1) directly. Hence this part needs to be run as root
# and, for safety reasons, only in the CI.
mv
"
${
GDB
}
"
"
${
GDB
}
.orig"
cp
"
${
TOP
}
/unit/gdb"
"
${
GDB
}
"
for
test
in
${
broken_tests
}
;
do
i
=
1
for
test
in
${
BROKEN_TESTS
}
;
do
echo
${
KYUA
}
debug
"
${
test
}
"
echo
"-----
$test
-----"
KYUA_DEBUG_LOG
=
"kyua.debug.log.
${
i
}
"
${
KYUA
}
debug
"
${
test
}
"
2>&1 |
tee
"
${
KYUA_DEBUG_LOG
}
"
clear_kyua_work_dir
"
${
KYUA_DEBUG_LOG
}
"
i
=
$((
i
+
1
))
done
mv
"
${
GDB
}
.orig"
"
${
GDB
}
"
fi
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment