Binary checker, introduction
This commit is contained in:
committed by
Jon Häggblad
parent
362e7f2fea
commit
bd61679c58
@@ -0,0 +1,15 @@
|
||||
## Binary init checker
|
||||
|
||||
|
||||
### WIP
|
||||
A simple tool to ensure that all binaries init with the correct format, using the assert.sh library
|
||||
|
||||
Simply run `./build_and_run.sh $GIT_BRANCH`
|
||||
|
||||
This will run through all the binaries anc check the fields that we expect to be initialised when passing the parameters into nyms core binaries
|
||||
|
||||
## TODO
|
||||
- Introduce all binaries
|
||||
- Sort paths and locations
|
||||
- Tidy up
|
||||
- Run in CI
|
||||
Executable
+186
@@ -0,0 +1,186 @@
|
||||
#!/bin/bash
|
||||
# assert.sh 1.1 - bash unit testing framework
|
||||
# Copyright (C) 2009-2015 Robert Lehmann
|
||||
#
|
||||
# http://github.com/lehmannro/assert.sh
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export DISCOVERONLY=${DISCOVERONLY:-}
|
||||
export DEBUG=${DEBUG:-}
|
||||
export STOP=${STOP:-}
|
||||
export INVARIANT=${INVARIANT:-}
|
||||
export CONTINUE=${CONTINUE:-}
|
||||
|
||||
args="$(getopt -n "$0" -l \
|
||||
verbose,help,stop,discover,invariant,continue vhxdic $*)" \
|
||||
|| exit -1
|
||||
for arg in $args; do
|
||||
case "$arg" in
|
||||
-h)
|
||||
echo "$0 [-vxidc]" \
|
||||
"[--verbose] [--stop] [--invariant] [--discover] [--continue]"
|
||||
echo "`sed 's/./ /g' <<< "$0"` [-h] [--help]"
|
||||
exit 0;;
|
||||
--help)
|
||||
cat <<EOF
|
||||
Usage: $0 [options]
|
||||
Language-agnostic unit tests for subprocesses.
|
||||
|
||||
Options:
|
||||
-v, --verbose generate output for every individual test case
|
||||
-x, --stop stop running tests after the first failure
|
||||
-i, --invariant do not measure timings to remain invariant between runs
|
||||
-d, --discover collect test suites only, do not run any tests
|
||||
-c, --continue do not modify exit code to test suite status
|
||||
-h show brief usage information and exit
|
||||
--help show this help message and exit
|
||||
EOF
|
||||
exit 0;;
|
||||
-v|--verbose)
|
||||
DEBUG=1;;
|
||||
-x|--stop)
|
||||
STOP=1;;
|
||||
-i|--invariant)
|
||||
INVARIANT=1;;
|
||||
-d|--discover)
|
||||
DISCOVERONLY=1;;
|
||||
-c|--continue)
|
||||
CONTINUE=1;;
|
||||
esac
|
||||
done
|
||||
|
||||
_indent=$'\n\t' # local format helper
|
||||
|
||||
_assert_reset() {
|
||||
tests_ran=0
|
||||
tests_failed=0
|
||||
tests_errors=()
|
||||
tests_starttime="$(date +%s%N)" # nanoseconds_since_epoch
|
||||
}
|
||||
|
||||
assert_end() {
|
||||
# assert_end [suite ..]
|
||||
tests_endtime="$(date +%s%N)"
|
||||
# required visible decimal place for seconds (leading zeros if needed)
|
||||
local tests_time="$( \
|
||||
printf "%010d" "$(( ${tests_endtime/%N/000000000}
|
||||
- ${tests_starttime/%N/000000000} ))")" # in ns
|
||||
tests="$tests_ran ${*:+$* }tests"
|
||||
[[ -n "$DISCOVERONLY" ]] && echo "collected $tests." && _assert_reset && return
|
||||
[[ -n "$DEBUG" ]] && echo
|
||||
# to get report_time split tests_time on 2 substrings:
|
||||
# ${tests_time:0:${#tests_time}-9} - seconds
|
||||
# ${tests_time:${#tests_time}-9:3} - milliseconds
|
||||
[[ -z "$INVARIANT" ]] \
|
||||
&& report_time=" in ${tests_time:0:${#tests_time}-9}.${tests_time:${#tests_time}-9:3}s" \
|
||||
|| report_time=
|
||||
|
||||
if [[ "$tests_failed" -eq 0 ]]; then
|
||||
echo "all $tests passed$report_time."
|
||||
else
|
||||
for error in "${tests_errors[@]}"; do echo "$error"; done
|
||||
echo "$tests_failed of $tests failed$report_time."
|
||||
fi
|
||||
tests_failed_previous=$tests_failed
|
||||
[[ $tests_failed -gt 0 ]] && tests_suite_status=1
|
||||
_assert_reset
|
||||
}
|
||||
|
||||
assert() {
|
||||
# assert <command> <expected stdout> [stdin]
|
||||
(( tests_ran++ )) || :
|
||||
[[ -z "$DISCOVERONLY" ]] || return
|
||||
expected=$(echo -ne "${2:-}")
|
||||
result="$(eval 2>/dev/null $1 <<< ${3:-})" || true
|
||||
if [[ "$result" == "$expected" ]]; then
|
||||
[[ -z "$DEBUG" ]] || echo -n .
|
||||
return
|
||||
fi
|
||||
result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")"
|
||||
[[ -z "$result" ]] && result="nothing" || result="\"$result\""
|
||||
[[ -z "$2" ]] && expected="nothing" || expected="\"$2\""
|
||||
_assert_fail "expected $expected${_indent}got $result" "$1" "$3"
|
||||
}
|
||||
|
||||
assert_raises() {
|
||||
# assert_raises <command> <expected code> [stdin]
|
||||
(( tests_ran++ )) || :
|
||||
[[ -z "$DISCOVERONLY" ]] || return
|
||||
status=0
|
||||
(eval $1 <<< ${3:-}) > /dev/null 2>&1 || status=$?
|
||||
expected=${2:-0}
|
||||
if [[ "$status" -eq "$expected" ]]; then
|
||||
[[ -z "$DEBUG" ]] || echo -n .
|
||||
return
|
||||
fi
|
||||
_assert_fail "program terminated with code $status instead of $expected" "$1" "$3"
|
||||
}
|
||||
|
||||
_assert_fail() {
|
||||
# _assert_fail <failure> <command> <stdin>
|
||||
[[ -n "$DEBUG" ]] && echo -n X
|
||||
report="test #$tests_ran \"$2${3:+ <<< $3}\" failed:${_indent}$1"
|
||||
if [[ -n "$STOP" ]]; then
|
||||
[[ -n "$DEBUG" ]] && echo
|
||||
echo "$report"
|
||||
exit 1
|
||||
fi
|
||||
tests_errors[$tests_failed]="$report"
|
||||
(( tests_failed++ )) || :
|
||||
}
|
||||
|
||||
skip_if() {
|
||||
# skip_if <command ..>
|
||||
(eval $@) > /dev/null 2>&1 && status=0 || status=$?
|
||||
[[ "$status" -eq 0 ]] || return
|
||||
skip
|
||||
}
|
||||
|
||||
skip() {
|
||||
# skip (no arguments)
|
||||
shopt -q extdebug && tests_extdebug=0 || tests_extdebug=1
|
||||
shopt -q -o errexit && tests_errexit=0 || tests_errexit=1
|
||||
# enable extdebug so returning 1 in a DEBUG trap handler skips next command
|
||||
shopt -s extdebug
|
||||
# disable errexit (set -e) so we can safely return 1 without causing exit
|
||||
set +o errexit
|
||||
tests_trapped=0
|
||||
trap _skip DEBUG
|
||||
}
|
||||
_skip() {
|
||||
if [[ $tests_trapped -eq 0 ]]; then
|
||||
# DEBUG trap for command we want to skip. Do not remove the handler
|
||||
# yet because *after* the command we need to reset extdebug/errexit (in
|
||||
# another DEBUG trap.)
|
||||
tests_trapped=1
|
||||
[[ -z "$DEBUG" ]] || echo -n s
|
||||
return 1
|
||||
else
|
||||
trap - DEBUG
|
||||
[[ $tests_extdebug -eq 0 ]] || shopt -u extdebug
|
||||
[[ $tests_errexit -eq 1 ]] || set -o errexit
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
_assert_reset
|
||||
: ${tests_suite_status:=0} # remember if any of the tests failed so far
|
||||
_assert_cleanup() {
|
||||
local status=$?
|
||||
# modify exit code if it's not already non-zero
|
||||
[[ $status -eq 0 && -z $CONTINUE ]] && exit $tests_suite_status
|
||||
}
|
||||
trap _assert_cleanup EXIT
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
PWD="../"
|
||||
GIT_BRANCH=$1
|
||||
VERSION_NUMBER=$2
|
||||
|
||||
# lets make sure the branch is up to date
|
||||
# ---------------------------------------
|
||||
git checkout develop
|
||||
git fetch origin
|
||||
git checkout $GIT_BRANCH
|
||||
git pull origin $GIT_BRANCH
|
||||
# ---------------------------------------
|
||||
|
||||
echo "working directory ${PWD}"
|
||||
|
||||
#build all binaries...
|
||||
#expect the cargo tool chain to be installed on the machine
|
||||
cargo build --release --all
|
||||
|
||||
#here there should be the applicable binaries to test inits
|
||||
|
||||
./nym-mixnode-binary-check.sh "$VERSION_NUMBER"
|
||||
|
||||
sleep 2
|
||||
|
||||
echo "running gateway binary check"
|
||||
#./nym-gateway-binary-check.sh "$VERSION_NUMBER"
|
||||
Executable
+38
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
. assert.sh -v -x
|
||||
|
||||
PWD="../"
|
||||
RELEASE_DIRECTORY="target/release"
|
||||
VERSION_NUMBER=$1
|
||||
WALLET_ADDRESS_CONST=n1435n84se65tn7yv536am0sfvng4yyrwj7thhxr
|
||||
MOCK_HOST="1.2.3.4"
|
||||
OUTPUT=$(for i in {1..8}; do echo -n $(( $RANDOM % 10 )); done)
|
||||
ID="test-${OUTPUT}"
|
||||
|
||||
echo "the version number is ${VERSION_NUMBER}"
|
||||
|
||||
cd ${PWD}${RELEASE_DIRECTORY}
|
||||
|
||||
if [ -f nym-gateway ]; then
|
||||
echo "running init tests"
|
||||
# we wont use config env files for now
|
||||
# unless we want to use a specific environment
|
||||
OUTPUT=$(./nym-gateway --output json init --id ${ID} --host ${MOCK_HOST} --wallet-address ${WALLET_ADDRESS_CONST}) > /dev/null 2>&1
|
||||
|
||||
# get jq values for things we can assert against
|
||||
VALUE=$(echo ${OUTPUT} | jq .wallet_address)
|
||||
VALUE=${VALUE#\"}
|
||||
VALUE=${VALUE%\"}
|
||||
|
||||
# do asserts here based upon the output on init
|
||||
|
||||
assert $(cat ${VALUE}) $(echo ${WALLET_ADDRESS_CONST})
|
||||
assert_end nym-gateway-tests
|
||||
else
|
||||
echo "exting test no binary found"
|
||||
fi
|
||||
|
||||
|
||||
Executable
+34
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
. assert.sh -v -x
|
||||
|
||||
PWD="../"
|
||||
RELEASE_DIRECTORY="target/release"
|
||||
VERSION_NUMBER=$1
|
||||
WALLET_ADDRESS_CONST=n1435n84se65tn7yv536am0sfvng4yyrwj7thhxr
|
||||
MOCK_HOST="1.2.3.4"
|
||||
OUTPUT=$(for i in {1..8}; do echo -n $(( $RANDOM % 10 )); done)
|
||||
ID="test-${OUTPUT}"
|
||||
|
||||
echo "the version number is ${VERSION_NUMBER}"
|
||||
|
||||
cd $PWD/$RELEASE_DIRECTORY
|
||||
|
||||
if [ -f nym-mixnode ]; then
|
||||
echo "running init tests"
|
||||
# we wont use config env files for now
|
||||
OUTPUT=$(./nym-mixnode --output json init --id ${ID} --host ${MOCK_HOST} --wallet-address ${WALLET_ADDRESS_CONST}) > /dev/null 2>&1
|
||||
|
||||
# get jq values for things we can assert against
|
||||
# tidy this bit up - okay for first push
|
||||
VALUE=$(echo ${OUTPUT} | jq .wallet_address)
|
||||
VALUE=${VALUE#\"}
|
||||
VALUE=${VALUE%\"}
|
||||
|
||||
# do asserts here based upon the output on init
|
||||
|
||||
assert $(cat ${VALUE}) $(echo ${WALLET_ADDRESS_CONST})
|
||||
assert_end nym-mixnode-tests
|
||||
else
|
||||
echo "exting test no binary found"
|
||||
fi
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
# TODO
|
||||
Reference in New Issue
Block a user