zgrab2/integration_tests/ntp/test.sh
2018-02-07 12:25:46 -05:00

83 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
MODULE_DIR=$(dirname $0)
TEST_ROOT=$MODULE_DIR/..
ZGRAB_ROOT=$MODULE_DIR/../..
ZGRAB_OUTPUT=$ZGRAB_ROOT/zgrab-output
OUTPUT_ROOT=$ZGRAB_OUTPUT/ntp
mkdir -p $OUTPUT_ROOT
versions="openntp 4.2.6"
function test_openntp() {
echo "ntp/test: Tests runner for ntp_openntp"
CONTAINER_NAME="zgrab_ntp_openntp" $ZGRAB_ROOT/docker-runner/docker-run.sh ntp --timeout 3 > "$OUTPUT_ROOT/openntp.json"
# Don't drop this in the standard output root, since it will not have status = success
CONTAINER_NAME="zgrab_ntp_openntp" $ZGRAB_ROOT/docker-runner/docker-run.sh ntp --timeout 3 --monlist > out.tmp
time=$($ZGRAB_ROOT/jp -u data.ntp.result.time < out.tmp)
version=$($ZGRAB_ROOT/jp -u data.ntp.result.version < out.tmp)
rm -f out.tmp
if [ $time = "null" ]; then
echo "ntp/test: Failed to get partial result from monlist on openntp (time = null)"
exit 1
fi
if ! [ $version = "3" ]; then
echo "ntp/test: Failed to get partial result from monlist on openntp (version = $version)"
exit 1
fi
}
function test_bad_req() {
code=$1
expected_error=$2
CONTAINER_NAME="zgrab_ntp_4.2.6" $ZGRAB_ROOT/docker-runner/docker-run.sh ntp --timeout 3 --monlist --request-code $code --skip-get-time > out.tmp
status=$($ZGRAB_ROOT/jp -u data.ntp.status < out.tmp)
error=$($ZGRAB_ROOT/jp -u data.ntp.error < out.tmp)
rm -f out.tmp
if ! [ $status = "application-error" ]; then
echo "ntp/test: Got error '$error', expected '$expected_error' on $code"
exit 1
fi
if ! [ $error = $expected_error ]; then
echo "ntp/test: Got error '$error', expected '$expected_error' on $code"
exit 1
fi
}
function test_4_2_6() {
CONTAINER_NAME="zgrab_ntp_4.2.6"
echo "ntp/test: Tests runner for ntp_4.2.6"
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh ntp --timeout 3 > "$OUTPUT_ROOT/4.2.6_normal.json"
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh ntp --timeout 3 --monlist > "$OUTPUT_ROOT/4.2.6_monlist.json"
request_codes="REQ_MON_GETLIST_1 REQ_MON_GETLIST"
for code in $request_codes; do
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh ntp --timeout 3 --monlist --request-code $code > "$OUTPUT_ROOT/4.2.6_$code.json"
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh ntp --timeout 3 --monlist --request-code $code --skip-get-time > "$OUTPUT_ROOT/4.2.6_${code}_solo.json"
done
# Check that when the server returns with a valid error code that we return status = application-error and we forward the INFO_ERR code from the server
test_bad_req "REQ_PEER_LIST" "INFO_ERR_NODATA"
test_bad_req "REQ_DO_DIRTY_HACK" "INFO_ERR_REQ"
test_bad_req "REQ_DONT_DIRTY_HACK" "INFO_ERR_REQ"
}
test_openntp
test_4_2_6
for version in $versions; do
CONTAINER_NAME="zgrab_ntp_$version"
echo "ntp/test: BEGIN docker logs from $CONTAINER_NAME [{("
docker logs --tail all $CONTAINER_NAME
echo ")}] END docker logs from $CONTAINER_NAME"
done