diff --git a/tests/README.md b/tests/README.md
new file mode 100644
index 0000000000..14e3487dd3
--- /dev/null
+++ b/tests/README.md
@@ -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
\ No newline at end of file
diff --git a/tests/assert.sh b/tests/assert.sh
new file mode 100755
index 0000000000..ffd2b9551b
--- /dev/null
+++ b/tests/assert.sh
@@ -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 .
+
+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 < [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 [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
+ [[ -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
+ (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
diff --git a/tests/build_and_run.sh b/tests/build_and_run.sh
new file mode 100755
index 0000000000..f6ff95f3cd
--- /dev/null
+++ b/tests/build_and_run.sh
@@ -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"
\ No newline at end of file
diff --git a/tests/nym-gateway-binary-check.sh b/tests/nym-gateway-binary-check.sh
new file mode 100755
index 0000000000..7489553617
--- /dev/null
+++ b/tests/nym-gateway-binary-check.sh
@@ -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
+
+
diff --git a/tests/nym-mixnode-binary-check.sh b/tests/nym-mixnode-binary-check.sh
new file mode 100755
index 0000000000..1e62b21318
--- /dev/null
+++ b/tests/nym-mixnode-binary-check.sh
@@ -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
diff --git a/tests/socks5-binary-check.sh b/tests/socks5-binary-check.sh
new file mode 100755
index 0000000000..74c27dbf69
--- /dev/null
+++ b/tests/socks5-binary-check.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+# TODO
\ No newline at end of file