Skip to content

Commit

Permalink
mem.sh with more than one target
Browse files Browse the repository at this point in the history
  • Loading branch information
olofhagsand committed Mar 28, 2019
1 parent a269e26 commit 3899108
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 60 deletions.
2 changes: 1 addition & 1 deletion docker/system/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ RUN make
RUN make install

# Build and install the clixon example
WORKDIR /clixon/clixon/example
WORKDIR /clixon/clixon/example/main
RUN make
RUN make install
RUN install example.xml /clixon/build/etc/clixon.xml
Expand Down
8 changes: 3 additions & 5 deletions test/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,10 @@ Run all tests but continue after errors and only print a summary test output ide
```

## Memory leak test
These tests use valgrind to check for memory leaks:
The `mem.sh` runs memory checks using valgrind. Start it with no arguments to test all components (backend, restconf, cli, netconf), or specify which components to run:
```
mem.sh cli
mem.sh netconf
mem.sh backend
mem.sh restconf
mem.sh # All components
mem.sh restconf backend # Only backend and cli
```

## Site.sh
Expand Down
132 changes: 78 additions & 54 deletions test/mem.sh
Original file line number Diff line number Diff line change
@@ -1,65 +1,89 @@
#!/bin/bash
# Run valgrind leak test for cli, restconf, netconf or background.
# Stop on first error
#
if [ $# -ne 1 ]; then
echo "usage: $0 cli|netconf|restconf|backend" # valgrind memleak checks
exit -1
fi
PROGRAM=$1

valgrindfile=$(mktemp)
echo "valgrindfile:$valgrindfile"

# Run valgrindtest once, args:
# what: cli|netconf|restconf|backend
memonce(){
what=$1

valgrindfile=$(mktemp)
echo "valgrindfile:$valgrindfile"

case "$PROGRAM" in
'cli')
valgrindtest=1
RCWAIT=1
clixon_cli="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=no --child-silent-after-fork=yes --log-file=$valgrindfile clixon_cli"
;;
'netconf')
valgrindtest=1
RCWAIT=1
clixon_netconf="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=no --child-silent-after-fork=yes --log-file=$valgrindfile clixon_netconf"
;;
'backend')
valgrindtest=2 # This means backend valgrind test
RCWAIT=10 # valgrind backend needs some time to get up
perfnr=100 # test_perf.sh restconf put more or less stops
perfreq=10
case "$what" in
'cli')
valgrindtest=1
RCWAIT=1
clixon_cli="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=no --child-silent-after-fork=yes --log-file=$valgrindfile clixon_cli"
;;
'netconf')
valgrindtest=1
RCWAIT=1
clixon_netconf="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=no --child-silent-after-fork=yes --log-file=$valgrindfile clixon_netconf"
;;
'backend')
valgrindtest=2 # This means backend valgrind test
RCWAIT=10 # valgrind backend needs some time to get up
perfnr=100 # test_perf.sh restconf put more or less stops
perfreq=10

clixon_backend="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=yes --log-file=$valgrindfile clixon_backend"
;;
'restconf')
valgrindtest=3 # This means backend valgrind test
sudo chmod 660 $valgrindfile
sudo chown www-data $valgrindfile
RCWAIT=5 # valgrind restconf needs some time to get up
clixon_restconf="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=no --child-silent-after-fork=yes --log-file=$valgrindfile /www-data/clixon_restconf"
clixon_backend="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=yes --log-file=$valgrindfile clixon_backend"
;;
'restconf')
valgrindtest=3 # This means backend valgrind test
sudo chmod 660 $valgrindfile
sudo chown www-data $valgrindfile
RCWAIT=5 # valgrind restconf needs some time to get up
clixon_restconf="/usr/bin/valgrind --leak-check=full --show-leak-kinds=all --suppressions=./valgrind-clixon.supp --track-fds=yes --trace-children=no --child-silent-after-fork=yes --log-file=$valgrindfile /www-data/clixon_restconf"

;;
*)
echo "usage: $0 cli|netconf|restconf|backend" # valgrind memleak checks
rm -f $valgrindfile
exit -1
;;
esac
;;
*)
echo "usage: $0 cli|netconf|restconf|backend" # valgrind memleak checks
rm -f $valgrindfile
exit -1
;;
esac

err=0
testnr=0
for test in test_*.sh; do
testfile=$test
. ./$test
errcode=$?
if [ $errcode -ne 0 ]; then
err=1
echo -e "\e[31mError in $test errcode=$errcode"
echo -ne "\e[0m"
exit $errcode
err=0
testnr=0
for test in test_*.sh; do
if [ $testnr != 0 ]; then echo; fi
testfile=$test
. ./$test
errcode=$?
if [ $errcode -ne 0 ]; then
err=1
echo -e "\e[31mError in $test errcode=$errcode"
echo -ne "\e[0m"
exit $errcode
fi
done
if [ $valgrindtest -eq 1 ]; then
checkvalgrind
sudo rm -f $valgrindfile
fi
done
if [ $valgrindtest -eq 1 ]; then
checkvalgrind
sudo rm -f $valgrindfile
}

if [ -z "$*" ]; then
cmds="backend restconf cli netconf"
else
cmds=$*
fi

# First run sanity
for c in $cmds; do
if [ $c != cli -a $c != netconf -a $c != restconf -a $c != backend ]; then
echo "c:$c"
echo "usage: $0 [cli|netconf|restconf|backend]+"
echo " with no args run all"
exit -1
fi
done

# Then actual run
for c in $cmds; do
echo "Mem test for $c"
echo "================="
memonce $c
done

0 comments on commit 3899108

Please sign in to comment.