Compare commits

...

30 Commits

Author SHA1 Message Date
Tommy Verrall 07b566071b supress output 2023-02-03 16:11:15 -01:00
Tommy Verrall 5f231e3eac last check 2023-02-03 15:50:38 -01:00
Tommy Verrall 9d3cad2771 directories 2023-02-03 15:41:17 -01:00
Tommy Verrall ae0f9b1b7b move the files to the correct place 2023-02-03 15:31:50 -01:00
Tommy Verrall 8a1e225365 write to file 2023-02-03 15:22:54 -01:00
Tommy Verrall 2a6d0f3113 quotes 2023-02-03 15:03:10 -01:00
Tommy Verrall d81e1fe44d operator 2023-02-03 15:01:58 -01:00
Tommy Verrall ef62ec6560 check output 2023-02-03 14:57:03 -01:00
Tommy Verrall 6649f859e6 wrong positioning 2023-02-03 14:47:39 -01:00
Tommy Verrall 617113555b print for debugging existing and after to check 2023-02-03 14:43:05 -01:00
Tommy Verrall b9e8ba3215 the version is always due to change, everything else should be okay 2023-02-03 14:36:38 -01:00
Tommy Verrall 2693ccafd1 format 2023-02-03 14:31:07 -01:00
Tommy Verrall 8d78d23060 update the config 2023-02-03 14:29:41 -01:00
Tommy Verrall 9543247def try diffing the files 2023-02-03 14:28:02 -01:00
Tommy Verrall 618c54ede3 format 2023-02-03 13:51:14 -01:00
Tommy Verrall c91b63a6f8 tidy up now it's passing now validate against new binary 2023-02-03 13:40:01 -01:00
Tommy Verrall 4e63f2ce60 try assertion command via outputting via echo 2023-02-03 13:35:04 -01:00
Tommy Verrall bc80511863 weird behaviour from local to machine 2023-02-03 13:25:41 -01:00
Tommy Verrall bc08b26ed4 more debug 2023-02-03 13:17:10 -01:00
Tommy Verrall 81c5cafc60 binary add 2023-02-03 13:16:19 -01:00
Tommy Verrall a9f25c2492 debugging 2023-02-03 13:09:21 -01:00
Tommy Verrall 0ab5320656 fix var 2023-02-03 12:25:45 -01:00
Tommy Verrall 28e7ce11e3 input assertion again 2023-02-03 10:19:05 -01:00
Tommy Verrall 03364b848b bad variable placement 2023-02-03 10:16:34 -01:00
Tommy Verrall 8926d622b3 wrap the var name 2023-02-03 10:13:11 -01:00
Tommy Verrall a58d3dc6b2 fixing up 2023-02-03 10:12:28 -01:00
Tommy Verrall ece189773d typo on the function 2023-02-03 10:09:00 -01:00
Tommy Verrall de2c3851ee change output 2023-02-03 10:05:18 -01:00
Tommy Verrall 6869de5640 install the binaries from github and run it against specific branch 2023-02-03 09:57:05 -01:00
Tommy Verrall 580b677489 Binary checker, introduction 2023-02-03 08:46:40 -01:00
6 changed files with 394 additions and 0 deletions
+15
View File
@@ -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
+186
View File
@@ -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
+28
View File
@@ -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"
+74
View File
@@ -0,0 +1,74 @@
#!/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}"
BINARY_NAME="nym-gateway"
echo "the version number is ${VERSION_NUMBER} to be installed from github"
cd ${PWD}${RELEASE_DIRECTORY}
# steps
# we curl the existing binary from the release page of github
# we init the binary to check successful init
# then in our testing branch, we build the binary locally
# re run the init based upon the configuration injected
# we validate that no errors are return from upgrading the binary against the test
# install the current release binary
# so this is dependant on running on a linux machine for the time being
curl -L https://github.com/nymtech/nym/releases/download/nym-binaries-${RELEASE_VERSION_NUMBER}/$BINARY_NAME -o $BINARY_NAME
chmod u+x $BINARY_NAME
#--------------------------------------
# functions
#--------------------------------------
check_gateway_binary_build() 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%\"}
echo $OUTPUT
sleep 2
# do asserts here based upon the output on init
assert $(echo ${VALUE}) $(echo ${WALLET_ADDRESS_CONST})
assert_end nym-gateway-tests
else
echo "exting test no binary found"
fi
# we run the release version first
check_gateway_binary_build
# lets remove the binary then navigate to the target/release directory for checking the latest version
# expect to have successful output and configuration
if [ -f $BINARY_NAME ]; then
echo "removing nym-mixnode"
rm -rf $BINARY_NAME
else
echo "no binary found exiting"
exit 1
fi
# we should expect it to pass because no errors should be presented when performing the upgrade of an init
# this should be caught at testing staage
check_gateway_binary_build
+89
View File
@@ -0,0 +1,89 @@
#!/bin/bash
. assert.sh -v -x
PWD="../"
RELEASE_DIRECTORY="target/release"
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}"
BINARY_NAME="nym-mixnode"
echo "the version number is ${VERSION_NUMBER} to be installed from github"
# steps
# we curl the existing binary from the release page of github
# we init the binary to check successful init
# then in our testing branch, we build the binary locally
# re run the init based upon the configuration injected
# we validate that no errors are return from upgrading the binary against the test
# install the current release binary
# so this is dependant on running on a linux machine for the time being
curl -L "https://github.com/nymtech/nym/releases/download/nym-binaries-${RELEASE_VERSION_NUMBER}/${BINARY_NAME}" -o nym-mixnode
chmod u+x "$BINARY_NAME"
#--------------------------------------
# functions
#--------------------------------------
check_mixnode_binary_build() {
if [ -f "$BINARY_NAME" ]; then
echo "running init tests"
# we wont use config env files for now
OUTPUT=$(./${BINARY_NAME} --output json init --id ${ID} --host ${MOCK_HOST} --wallet-address ${WALLET_ADDRESS_CONST} > /dev/null)
# get jq values for things we can assert against
# tidy this bit up - okay for first push
VALUE="$(echo ${OUTPUT} | jq .wallet_address | tr -d '"')"
# do asserts here based upon the output on init
assert "echo ${VALUE}" $(echo ${WALLET_ADDRESS_CONST})
assert_end nym-mixnode-tests
else
echo "exiting test no binary found"
fi
}
#-------------------------------
# tests
#-------------------------------
# we run the release version first
check_mixnode_binary_build
# whoami
# this is dependant on where it runs on ci potentially, will need to tweak this in the future
first_init=$(cat /root/.nym/mixnodes/${ID}/config/config.toml | grep -v "^\[mixnode\]$" | grep -v "^version =")
#lets remove the binary then navigate to the target/release directory for checking the latest version
if [ -f "$BINARY_NAME" ]; then
echo "removing nym-mixnode"
rm -rf "$BINARY_NAME"
echo "successfully removed nym-mixnode"
else
echo "no binary found exiting"
exit 1
fi
# we should expect it to pass because no errors should be presented when performing the upgrade of an init
# this should be caught at testing stage
# navigate to latest binary build
cd $PWD$RELEASE_DIRECTORY
#re run against the current binary built locally
check_mixnode_binary_build
echo "diff the config files after each init"
echo "-------------------------------------"
second_init=$(cat /root/.nym/mixnodes/${ID}/config/config.toml | grep -v "^\[mixnode\]$" | grep -v "^version =")
diff -w <(echo "$first_init") <(echo "$second_init")
# check the status of the diff
if [ $? -eq 0 ]; then
echo "no differences in config files, exiting script"
exit 0
else
echo "there are differences in the config files, it may require a fresh init on the binary"
exit 1
fi
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
# TODO