#!/usr/bin/env bash

# Configure shell.
set -u -e

# User-friendly print wrapper.
log() {
  printf '[%s] [%s] %s\n' "${0##*/}" "$( date '+%Y-%m-%dT%H:%M:%S' )" "${@}"
}

# Configure defaults.
TEST_SUITE_FAILED=0

# Configure test expectations.
EXPECT_FAILED=70
EXPECT_PASSED=72
EXPECT_SKIPPED=86
EXPECT_PARSING_ERRORS=0
EXPECT_RESOURCE_COUNT=57

log 'Running checkov on tests directory'
checkov --config-file checkov.yaml --download-external-modules false -d tests -c 'ORCD_*' --soft-fail -o cli -o json --output-file-path console,test-results.json

log 'Processing test results'
FAILED=$( jq -r '.summary.failed' test-results.json )
PASSED=$( jq -r '.summary.passed' test-results.json )
SKIPPED=$( jq -r '.summary.skipped' test-results.json )
PARSING_ERRORS=$( jq -r '.summary.parsing_errors' test-results.json )
RESOURCE_COUNT=$( jq -r '.summary.resource_count' test-results.json )

if [[ ${FAILED} -ne ${EXPECT_FAILED} ]]; then
  log "Error: Got ${FAILED} failed checks, ${EXPECT_FAILED} expected"
  TEST_SUITE_FAILED=1
fi

if [[ ${PASSED} -ne ${EXPECT_PASSED} ]]; then
  log "Error: Got ${PASSED} passed checks, ${EXPECT_PASSED} expected"
  TEST_SUITE_FAILED=1
fi

if [[ ${SKIPPED} -ne ${EXPECT_SKIPPED} ]]; then
  log "Error: Got ${SKIPPED} skipped checks, ${EXPECT_SKIPPED} expected"
  TEST_SUITE_FAILED=1
fi

if [[ ${PARSING_ERRORS} -ne ${EXPECT_PARSING_ERRORS} ]]; then
  log "Error: Got ${PARSING_ERRORS} parsing errors, ${EXPECT_PARSING_ERRORS} expected"
  TEST_SUITE_FAILED=1
fi

if [[ ${RESOURCE_COUNT} -ne ${EXPECT_RESOURCE_COUNT} ]]; then
  log "Error: Got ${RESOURCE_COUNT} resource count, ${EXPECT_RESOURCE_COUNT} expected"
  TEST_SUITE_FAILED=1
fi

if [[ ${TEST_SUITE_FAILED} -ne 0 ]]; then
  exit 1
fi
