
# shellcheck disable=SC2043
# For the license, see the LICENSE file in the root directory.

function wait_for_file()
{
  local filename="$1"
  local timeout="$2"

  local loops=$((timeout * 10)) loop

  for ((loop=0; loop<loops; loop++)); do
    [ -f "${filename}" ] && return 1 
    sleep 0.1
  done
  return 0 
}

function check_logfile_patterns_level_20()
{
	local logfile="$1"

	for pattern in \
	"^ [[:print:]]+$" \
	"^  [[:print:]]+$" \
	"^   [[:print:]]+$" \
	"^    [[:print:]]+$" \
	"^     [[:print:]]+$" \
	"^      [[:print:]]+$" \
	"^       [[:print:]]+$" \
	; do
		shift
		ctr=$(grep -E "${pattern}" "$logfile" | wc -l)
		if [ "$ctr" -eq 0 ]; then
			echo "Counted $ctr occurrences of pattern '${pattern}' in logfile; expected at least 1"
			exit 1
		fi
		echo "'${pattern}' occurrences: $ctr (OK)"
	done
}

function check_logfile_patterns_level_1()
{
	local logfile="$1"
	local minocc="$2"

	for pattern in \
	"^[[:print:]]+$" \
	; do
		shift
		ctr=$(grep -E "${pattern}" "$logfile" | wc -l)
		if [ "$ctr" -lt "$minocc" ]; then
			echo "Counted $ctr occurrences of pattern '${pattern}' in logfile; expected at least $minocc"
			exit 1
		fi
		echo "'${pattern}' occurrences: $ctr (OK)"
	done
}
